我正在切换一个小应用程序(Win 7/64上的Python 2.7.3 / 32)来使用ttk,我无法让ttk.Entry按照tk.Entry的方式工作;当我设置其内容时,ttk.Entry没有更新显示的输入框:
import Tkinter as tk
import ttk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
part_num = '1234'
newPNVar = tk.StringVar()
newPN = ttk.Entry(self, width=13, textvariable=newPNVar)
newPNVar.set(part_num)
newPN.pack()
#newPN.insert(0, part_num) also didn't work
print newPNVar.get()
app = SampleApp()
app.mainloop()
如果我用tk.Entry替换ttk.Entry并运行示例,则1234会显示在Entry框中,但如果它是ttk.Entry则不会显示。我如何让他们以同样的方式行事?
答案 0 :(得分:2)
看来ttk和tk对文本变量的保持稍有不同。似乎根本原因是newPNVar
正在收集垃圾,因为您没有抓住参考。这似乎不会影响tk.Entry
,但会影响ttk.Entry
。
快速解决方法是保留对newPNVar
的引用(例如:self.newPNVar
),这可能是一个明智的事情,无论这种行为有何不同。
这适用于Windows:
import Tkinter as tk
import ttk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
part_num = '1234'
self.newPNVar = tk.StringVar()
newPN = ttk.Entry(self, width=13, textvariable=self.newPNVar)
self.newPNVar.set(part_num)
newPN.pack()
#newPN.insert(0, part_num) also didn't work
print self.newPNVar.get()
app = SampleApp()
app.mainloop()