python 组合框默认当前

标签 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()

绘制一个空的组合框。令人费解的是,如果我用 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/

相关文章:

python - 将字典中的键组合成列表中的元组

python - ValueError : Tensor ("BN_1/moments/Squeeze:0", shape=(32, 256, 32), dtype=float32) 必须来自与 Tensor 相同的图表

python - split ("\n") 是否添加新行?

python - 属性错误: 'module' object has no attribute 'tk'

python - 当只应该存在一个窗口时,Tkinter 在使用多重处理选择文件时打开多个 GUI 窗口

python - 使用python检测HTML中图像的大小

c++ - 在 Python 中获取从有符号整数到无符号整数的转换

django - 如何在 django rest 框架中对项目的删除 url 进行 url 反转

Python:os.mkdir 的代码在哪里?

python - 我的单选按钮在选择它们后保持选中状态并且无法取消选择它们 python tkinter