gpt4 book ai didi

python - ttk.Entry 的行为方式与 tk.Entry 不同

转载 作者:行者123 更新时间:2023-12-01 05:56:27 32 4
gpt4 key购买 nike

我正在切换一个小应用程序(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/

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