python combobox默认当前

时间:2017-05-27 05:21:00

标签: python python-2.7 tkinter combobox

我在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。令人费解的是,如果我使用textvariable配置替换文本配置,它可以完美地运行:

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 个答案:

答案 0 :(得分: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()在组合框中获取该值:

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