2017-05-27 39 views
1

我在Windows 1010中使用Python 2.7.8。這一個真的讓我發瘋:我只是想一個ttk.Combobox()默認,預先選定的值,只要我格。這是我的代碼:蟒蛇組合框默認當前

from Tkinter import * 
import ttk 

class open_review_frame(): 
    def __init__(self, original): 
     self.root = original     
     self.review_frame = LabelFrame(original, text="review", bd=1, height=400, width=500) 
     self.review_frame.grid(row=0, column=1, sticky=W + N, ipadx=10, ipady=10) 
     self.rowline = 0 

     self.review_type_val = StringVar() 
     self.review_type = ttk.Combobox(self.review_frame, width=12, textvariable=self.review_type_val, state='readonly') 
     self.review_type['values'] = ("a", "b", "c", "d") 
     self.review_type.current(0) 
     self.review_type.grid(row=self.rowline, column=2, sticky=W) 

class main_frame(): 
    def __init__(self, original): 
     self.root = original 

     review_frame_test = open_review_frame(self.root) 

if __name__ == "__main__": 
    root = Tk() 
    app = main_frame(original=root) 
    root.mainloop() 

它繪製一個空的Combobox。令人費解的是,如果我把一個替換文本配置文本變量配置它完美的作品:

from Tkinter import * 
import ttk 

class open_review_frame(): 
    def __init__(self, original): 
     """Constructor""" 
     self.root = original 

     self.review_frame = LabelFrame(original, text="review", bd=1, height=400, width=500) 
     self.review_frame.grid(row=0, column=1, sticky=W + N, ipadx=10, ipady=10) 
     self.rowline = 0 

     self.review_type_val = StringVar() 
     self.review_type = ttk.Combobox(self.review_frame, width=12, text= "", state='readonly') 
     #self.review_type = ttk.Combobox(self.review_frame, width=12, textvariable=self.review_type_val, state='readonly') 
     self.review_type['values'] = ("a", "b", "c", "d") 
     self.review_type.current(0) 
     self.review_type.grid(row=self.rowline, column=2, sticky=W) 

class main_frame(): 
    def __init__(self, original): 
     self.root = original 

     review_frame_test = open_review_frame(self.root) 

if __name__ == "__main__": 
    root = Tk() 
    app = main_frame(original=root) 
    root.mainloop() 

我不明白爲什麼?

回答

1

我無法猜測你通過這樣做的最終目標是什麼。不過,如果你的目標僅僅是初始化組合框,然後讓我們去:

什麼是令人不解的是,如果我把替換文本配置與 textvariable配置它完美

其實,發生了什麼與您所說的相反:組合框無法使用textvariable選項進行初始化。

這種意外行爲的解釋是因爲您沒有正確使用StringVar()。您首先需要設置值self.review_type_val。在你的情況,你想將其設置爲「A」,所以這樣做:

self.review_type['values'] = ("a", "b", "c", "d") 
self.review_type_val.set(self.review_type['values'][0]) 

然後使用get()獲得在ComboBox該值:

self.review_type = ttk.Combobox(self.review_frame, width=12, textvariable=self.review_type_val.get(), state='readonly') 
+0

謝謝您的回答,我解決了問題 –