我正在切换一个小应用程序(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 将显示在“条目”框中,但如果它是 ttk.Entry,则不会显示。我如何让他们以同样的方式行事?
最佳答案
看来 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()
关于python - ttk.Entry 的行为方式与 tk.Entry 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12375540/