Я пишу приложение Tkinter, которое требует, чтобы части пользовательского дисплея существовали в двух разных классах, оба импортированных из другого файла.Мне нужно взять часть пользовательского ввода и передать его из одного класса в другой.В приведенном ниже примере с игрушкой пользователь должен ввести что-то в my_entry_input
, к которому позже должен получить доступ класс PullVariable
.
Код приведен ниже.У меня было несколько мыслей, таких как использование глобальных переменных или создание функции в исходном классе, чтобы получить переменные и затем передать их обратно.Во всех случаях я получаю:
AttributeError: тип объекта «Приложение» не имеет атрибута «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