切换 tkinter 条目 textVariable 的来源
Switching the source of a tkinter Entry textVariable
请原谅标题,因为用这么少的字符很难解释清楚。
这是 Python,当然是使用 tkinter 和 Entry 小部件。
所以我有一个条目,我还有一个class。这是一个非常简单的 class,看起来像这样:
class Class1():
def __init__(self):
self.strVar = tk.StringVar()
事实上,class 的创建只是为了尝试复制这个特定问题。
那么我们需要这个 class 的两个实例,以及一个 'selected' 的实例。也就是说,指向我们想要的两个实例中的任何一个。
c1 = Class1()
c1.strVar.set('First')
c2 = Class1()
c2.strVar.set('Second')
selectedClass = c1
接下来,我们需要将Entry widget的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'。但是,条目文本仍然显示 'First'。还没有更新。
所以我希望条目也能更新。在我使用 C# WPF 的日子里,你可以......好吧,情况看起来有点不同,但你可以调用 'RaisePropertyChanged' 并且它会更新变量的观察者(比如文本框等等)。
您需要手动更改条目小部件的 textvariable
属性:
entry1.configure(textvariable=c2.strVar)
请原谅标题,因为用这么少的字符很难解释清楚。
这是 Python,当然是使用 tkinter 和 Entry 小部件。
所以我有一个条目,我还有一个class。这是一个非常简单的 class,看起来像这样:
class Class1():
def __init__(self):
self.strVar = tk.StringVar()
事实上,class 的创建只是为了尝试复制这个特定问题。
那么我们需要这个 class 的两个实例,以及一个 'selected' 的实例。也就是说,指向我们想要的两个实例中的任何一个。
c1 = Class1()
c1.strVar.set('First')
c2 = Class1()
c2.strVar.set('Second')
selectedClass = c1
接下来,我们需要将Entry widget的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'。但是,条目文本仍然显示 'First'。还没有更新。
所以我希望条目也能更新。在我使用 C# WPF 的日子里,你可以......好吧,情况看起来有点不同,但你可以调用 'RaisePropertyChanged' 并且它会更新变量的观察者(比如文本框等等)。
您需要手动更改条目小部件的 textvariable
属性:
entry1.configure(textvariable=c2.strVar)