Python主题tkinter:不会设置Entry变量

时间:2011-09-16 02:06:57

标签: python tkinter

以下Python 3代码具有标签和Entry字段,这些字段使用字符串正确初始化(示例中为“垃圾”)。但是当第二个“导入”行被取消注释以用新的主题小部件替换旧的Entry小部件时,标签和Entry字段不会被初始化。

为什么主题小部件初始化被破坏的任何线索?


from tkinter import *
# from tkinter.ttk import *

class myApp:
    def __init__(self, root):
        v = StringVar()
        v.set("junk")

        label = Label(root, textvariable=v)
        label.pack()
        text_entry = Entry(root, textvariable=v)
        text_entry.pack()

root = Tk()
root.title("MyApp")
app = myApp(root)
root.mainloop()

1 个答案:

答案 0 :(得分:5)

问题是v是一个局部变量。当它超出范围时(即:__init__完成执行时),v将被垃圾收集。将v更改为self.v,问题就会消失。

为什么你看到ttk Entry小部件的问题而不是标准的小部件,我不知道。我猜一个人对垃圾收集器更敏感,或者可能导入两个库以某种方式更快地触发垃圾收集器。无论如何,即使使用库存小部件,您最终也会遇到某种问题,因为v最终会被垃圾收集。