我正在编写一个Tkinter应用程序,该程序要求用户显示的某些部分存在于两个不同的类中,这两个类均从另一个文件导入。我需要接受一部分用户输入,并将其从一个类传递到另一个类。在下面的玩具示例中,用户应该在my_entry_input
中键入一些内容,随后该类PullVariable
应该可以访问。
代码在下面。我有一些想法,例如以某种方式使用全局变量或在原始类中创建函数以获取变量,然后将其传递回去。在所有情况下,我都会得到:
AttributeError:类型对象“ Application”没有属性“ my_entry”
我能想到的最好的解决方案是创建一个响应绑定的函数,然后将.get()
传递给该函数中的另一个类。我的感觉是tkinter在班级之间不喜欢.get()
。
感谢社区的帮助。
主要
from import_test1 import *
root=Tk()
ui = Application(root)
ui.hello_world()
ui.entry()
pv = PullVariable()
if __name__ == '__main__':
root.mainloop()
导入的代码
from tkinter import *
from tkinter import ttk
class Application(Frame):
def __init__(self, parent, *args, **kwargs):
print('Application init')
Frame.__init__(self, parent, *args, **kwargs)
self.parent=parent
self.parent.grid()
def entry(self):
self.my_entry = StringVar(self.parent)
my_entry_input = Entry(self.parent, textvariable=self.my_entry,
width=16)
my_entry_input.bind('<FocusOut>', self.show_entry)
my_entry_input.grid(column=0, row=1)
self.show_label = Label(self.parent, text = '')
self.show_label.grid(column=0, row=2)
def hello_world(self):
print('hello world')
self.hw = Label(self.parent, text='Hello World!')
self.hw.grid(column=0, row=0)
def show_entry(self, event):
PullVariable(Application).find_entry()
class PullVariable:
def __init__(self, app):
self.app = app
print('Pull initiated')
def find_entry(self, event=None):
self.pulled_entry = self.app.my_entry.get()
self.app.show_label['text'] = self.pulled_entry
答案 0 :(得分:0)
my_entry
不是Application
类的属性,所以您不能做Application.my_entry
,因为它是Application
类的实例的属性,因此您可以做Application().my_entry
。您可以将Application
或my_entry
的一个实例添加到__init__
的{{1}}方法中。我将使用前者。
PullVariable