2013-05-13 10 views
5

Dodałem do mojego kodu widżet OptionMenu i przypisałem listę jako jej opcje. Oto, jak to jest:Menu opcji nie pokaże pierwszej opcji po kliknięciu (Tkinter).

z = StringVar() 
z.set(userList[0])  
usersOption = OptionMenu(frame1, z, *userList)#, command=changeUser) 
usersOption.pack(side=RIGHT, padx=3) 

Teraz sądzę, że pokaże wszystkie opcje na tej liście. Jak tak:

Option 1 \/ <-- the box with the selected option 
Option 1 }\__the options that show on click 
Option 2 }/ 

ale faktycznie tylko pokazuje drugą opcję, a gdy wybiorę się tam jest, w zasadzie, nie ma drogi powrotnej, jeśli kliknę pole ponownie utrzymuje pokazując tylko opcję 2 i nie mogę zmień go nawet za pomocą klawiszy góra/dół. Próbowałem szukać rozwiązań, ale nigdzie się nie dostałem, więc zaczynam myśleć, że jest to domyślny sposób działania widżetu, ale nie znalazłem nic, co by mi pokazało, jak rozwiązać to w dokumentacji, którą czytałem.
P.S .: Używam Python 3.3

+0

jest "z" instancją Tkinter 'StringVar'? Czy jesteś absolutnie pewien, że 'userlist' ma wartość, którą uważasz, że ma? –

+0

tak, jest i tak, robi. Lista jest tworzona z linii pliku txt bez łamania linii '\ n' (dla tego używam .strip()). Ten plik tekstowy ma obecnie dwie linie: "Użytkownik 1" i "Użytkownik 2". I jest ustawiony na userList [0]. (Edytuję tekst, aby to dodać) – AugustoQ

Odpowiedz

1

Nieważne, wziąłem *userList off i używane dla pętli, aby wstawić elementy jak polecenia. Teraz działa dobrze.
Kod użyłem:

for user in userList: 
    usersOption["menu"].insert("end", "command", label=user, command=_setit(z, user, changeUser)) 
6

miałem ten sam problem i to doprowadza mnie do szaleństwa, więc wyglądał w source. Myślę, że problem polega na tym, że argument 3. konstruktora jest wartością domyślną. Jeśli nie określisz go przed * userList, wygląda na to, że pierwszy element przyjmuje wartość domyślną. Prawdziwy dylemat byłoby coś jak:

z = StringVar() 
z.set(userList[0])  
usersOption = OptionMenu(frame1, z, userList[0] ,*userList)#, command=changeUser) 
usersOption.pack(side=RIGHT, padx=3) 
+0

Tak. Jak odpowiedział w [to pytanie] (https://stackoverflow.com/questions/19138534/tkinter-optionmenu-first-option-vanishes) – Kalissar

3

Późne odpowiedź ..

Wystarczy użyć

self.option = OptionMenu(PARENT, VALUE TO BE CHANGED, "DEFAULT TEXT", *OPTIONS_ARRAY/LIST) 

działa idealnie dla mnie.

Powiązane problemy