2013-10-02 28 views
9

Widget menu opcji ttk rozpoczyna się od wszystkich jego wartości z menu rozwijanego. Po wybraniu dowolnej wartości pierwsza wartość na liście znika, nigdy się nie pojawia ...Pierwsza opcja opcji tkinter znika

Czy ktoś wie dlaczego? Czy to jest cecha projektu widżetu? Spróbuj z następujących czynności:

import tkinter.ttk as ttk 
import tkinter as tk 

a = tk.Tk() 

options = ['1', '2', '3'] 
value = tk.StringVar() 

masterframe = ttk.Frame() 
masterframe.pack() 

dropdown = ttk.OptionMenu(masterframe, value, *options) 
dropdown.pack() 

a.mainloop() 

Uwaga - inny użytkownik samo pytanie tutaj: OptionMenu won't show the first option when clicked (Tkinter)

Zdają to've znaleźli obejście, ale nie rozumiał, dlaczego to się dzieje.

AKTUALIZACJA: faktycznie to zachowanie pojawia się tylko podczas korzystania z widgetu ttk. Widget tk działa dobrze (choć wygląda bardzo brzydko).

Odpowiedz

1

Wydaje się, że z ttk.OptionMenu pierwszy wpis na liście opcji należy pozostawić puste:

import tkinter.ttk as ttk 
import tkinter as tk 

a = tk.Tk() 

options = ['', '1', '2', '3'] 
value = tk.StringVar() 
value.set(options[1]) 

masterframe = ttk.Frame() 
masterframe.pack() 

dropdown = ttk.OptionMenu(masterframe, value, *options) 
dropdown.pack() 

a.mainloop() 

Źródło: http://www.pyinmyeye.com/2012/08/tkinter-menubutton-demo.html

+0

To łącze wydaje się być martwe. –

+2

Podczas obejścia problemu nie jest to bardzo dobry opis problemu. 'ttk.OptionMenu' oczekuje wartości domyślnej po zmiennej argument i przed listą wartości. Podczas gdy twoje rozwiązanie działa, zasłania to, co naprawdę się dzieje. –

19

Podpis polecenia ttk.OptionMenu to:

def __init__(self, master, variable, default=None, *values, **kwargs): 

To jest docstring:

"" "Utwórz tematyczny widget OptionMenu z wzorcem jako rodzica, zmienną tekstową zasobu zasobu ustawioną na zmienną, początkowo wybraną wartością określoną przez parametr domyślny, wartości menu podane przez wartości * i dodatkowe słowa kluczowe.

Zauważ opcję default, która pojawia się przed listą wartości. Zamiast dodawać puste pozycje do listy wartości, dodaj dowolną wartość jako domyślną:

options = ['1', '2', '3'] 
dropdown = ttk.OptionMenu(masterframe, value, options[1], *options) 
+5

haha, świetnie, dodałeś dobrą odpowiedź na 1-letnie pytanie dokładnie 4 godziny przed tym, jak tego potrzebowałem. – Gregor