我在 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 配置替换文本配置,它就可以完美地工作:
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()
不明白为什么?
最佳答案
我无法猜测您这样做的最终目标是什么。不过,如果您的目标只是初始化组合框,那么让我们开始吧:
What's puzzling is that if I put a replace text config with textvariable config it works perfectly
实际上,发生的情况与您所说的相反:组合框无法使用 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')
关于python 组合框默认当前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44213233/