我在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()
这将绘制一个空的组合框。令人费解的是,如果我将替换文本配置替换为textvariable config,它会完美运行:
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()
我不明白为什么?
最佳答案
我猜不出您要达到的最终目的是什么。不过,如果您的目的只是初始化组合框,那么让我们开始吧:
令人费解的是,如果我将替换文本配置与
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')