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

标签 python tkinter ttk

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

相关文章:

python - 使用 tkinter 增加宽度 python 分隔符

python ttk treeview排序数字

python - 鼠标悬停时如何更改行颜色? Tkinter TreeView

python - ttk 菜单不会取消发布

javascript - JS加密-python解密

python - 回调警告: Callback error creating dash' DataTable

python - 使 Tkinter Notebook 可拖动到另一个 View

python - 解释 numpy 中 dim、shape、rank、dimension 和 axis 之间的区别

python - 转换 pandas 数据框中包含 nan、连字符和逗号的列的数据类型

matplotlib - cygwin : TclError: no display name and no $DISPLAY environment variable 上的 ipython --pylab