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

Dav*_*ave 2 python tkinter

以下Python 3代码具有标签和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()
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 5

问题是这v是一个局部变量.当它超出范围时(即:__init__完成执行时),v正在进行垃圾收集.改变v,self.v问题就消失了.

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