切换tkinter Entry textVariable

时间:2019-12-22 13:36:35

标签: python-3.x tkinter tkinter-entry

请原谅标题,因为用这么少的字符来解释这个标题并不容易。

这当然是Python,使用tkinter和Entry小部件。

所以我只有一个条目,而且我还有一个课程。这是一个非常简单的类,看起来像这样:

class Class1():
    def __init__(self):
        self.strVar = tk.StringVar()

实际上,创建该类只是为了尝试复制此特定问题。

然后,我们需要该类的两个实例以及一个“选定的”实例。也就是说,指向我们想要的两个实例中任何一个的指针。

c1 = Class1()
c1.strVar.set('First')
c2 = Class1()
c2.strVar.set('Second')

selectedClass = c1

接下来,我们需要将Entry小部件的textVariable设置为'selectedClass'的strVar:

entry1 = tk.Entry(frame1, textvariable=selectedClass.strVar)

如果不清楚,我的目的是现在可以交换selectedClass;而是将其指向另一个实例(如c2),然后更改条目的文本。这不是正在发生的事情。

但是值正在变化。我有一个链接到此命令的按钮:

def ChangeSelected():
    global selectedClass

    print(f'Before: {selectedClass.strVar.get()}')
    selectedClass = c2
    print(f'After: {selectedClass.strVar.get()}')

selectedClass肯定在变化,因为这两个打印语句表明我们第一个得到“ First”,第二个得到“ Second”。但是,“输入”文本仍显示“第一”。它尚未更新。

所以我也希望条目也要更新。在我的C#WPF日子里,您可以……情况看起来似乎有些不同,但是您可以调用“ RaisePropertyChanged”,它将更新变量的观察者(如文本框等)。

1 个答案:

答案 0 :(得分:1)

您需要手动更改条目小部件的textvariable属性:

entry1.configure(textvariable=c2.strVar)