我在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()
我不明白为什么??
答案 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')