gpt4 book ai didi

python - 为 ttk 组合框设置默认值

转载 作者:太空狗 更新时间:2023-10-29 19:31:41 25 4
gpt4 key购买 nike

我在 Arch Linux x86_64 中使用 Python 3.2.1。这真的让我发疯:我只想在网格化后立即为 ttk.Combobox 设置一个默认的预选值。这是我的代码:

from tkinter import Tk, StringVar, ttk

root = Tk()

def combo(parent):
value = StringVar()
box = ttk.Combobox(parent, textvariable=value, state='readonly')
box['values'] = ('A', 'B', 'C')
box.current(0)
box.grid(column=0, row=0)

combo(root)

root.mainloop()

绘制一个空的 Combobox。有趣的是,如果我不使用某个函数,它会完美运行:

from tkinter import Tk, StringVar, ttk

root = Tk()

value = StringVar()
box = ttk.Combobox(root, textvariable=value, state='readonly')
box['values'] = ('A', 'B', 'C')
box.current(0)
box.grid(column=0, row=0)

root.mainloop()

当然,在真正的程序中我必须使用一个函数,所以我需要另一种解决方案。

最佳答案

问题是 StringVar 的实例正在被垃圾回收。这是因为根据您编写代码的方式,它是一个局部变量。

一种解决方案是使用一个类,以便您的 StringVar 持久存在:

from tkinter import Tk, StringVar, ttk

class Application:

def __init__(self, parent):
self.parent = parent
self.combo()

def combo(self):
self.box_value = StringVar()
self.box = ttk.Combobox(self.parent, textvariable=self.box_value,
state='readonly')
self.box['values'] = ('A', 'B', 'C')
self.box.current(0)
self.box.grid(column=0, row=0)

if __name__ == '__main__':
root = Tk()
app = Application(root)
root.mainloop()

关于python - 为 ttk 组合框设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6876518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com