Я новичок в Tkniter, и у меня проблема с использованием пользовательского ввода в моей функции.
У меня есть этот класс InfoWindow для создания окна и сбора информации о пользователе:
class InfoWindow:
def __init__(self):
self.info = {}
self.infowin = Tk()
self.infowin.title('Save Subject information')
self.infowin.geometry("550x280")
self.lbl1 = Label(self.infowin, text='Name')
self.lbl2 = Label(self.infowin, text='Age')
self.lbl3 = Label(self.infowin, text='Sex')
self.t1 = Entry(self.infowin, width=25)
self.t2 = Entry(self.infowin, width=25)
choices_gender = ['Male', 'Female', 'Other']
self.strGender = StringVar(self.infowin)
self.list1 = OptionMenu(self.infowin, self.strGender, *choices_gender)
self.list1.place(x=180, y=150)
self.t1.place(x=180, y=50)
self.t2.place(x=180, y=100)
self.lbl1.place(x=80, y=50)
self.lbl2.place(x=80, y=100)
self.lbl3.place(x=80, y=150)
# Buttons
self.bSave = Button(self.infowin, text='Save', command=self.saveInfo)
self.bSave.place(x=80, y=200)
self.bQuit = Button(self.infowin, text='Quit', command=self.infowin.destroy)
self.bQuit.place(x=130, y=200)
self.infowin.mainloop()
Затем у меня есть другой класс, который инициализирует и запускает программу:
class Biometric_System(object):
def __init__(self):
super(Biometric_System, self).__init__()
self.init_params()
self.create_home_screen()
def init_params(self):
try:
self.prot = None
self.infowin = None
self.info = {}
self.root = Tk()
...
...
...
self.bBack = Button()
self.recdescription = Label()
self.rectitle = Label()
def create_home_screen(self):
self.root.configure(background=self.home_color)
self.root.geometry('1000x1000')
self.bWelcome = Button(self.root, text='Welcome to the EEG-Based Biometric Recognition System',
bd=0, bg=self.home_color, fg='black', font=('AppleGothic', 25))
self.bWelcome.place(x=105, y=380)
self.bWelcome.bind("<Button-1>", self.create_start_screen)
self.root.mainloop()
def create_start_screen(self, event):
self.root.configure(background=self.home_color)
self.root.geometry('1000x1000')
self.bOptions = Button(self.root, text='Options', bd=0, bg=self.home_color, fg='black', font=self.style)
self.bOptions.place(x=580, y=450)
self.bOptions.bind("<Button-1>", self.create_options_screen)
self.root.mainloop()
При нажатии клавиши выбора появится новая кнопка с именем «Новый человек». :
def create_options_screen(self, event):
self.bAddSubj = Button(self.root, text='New Person',
bd=0, bg=self.home_color, fg='black', font=self.style)
self.bAddSubj.place(x=230, y=350)
# self.bAddSubj.bind("<Button-1>", self.rec_description)
self.bAddSubj.bind("<Button-1>", self.add_new_subject_description)
Когда нажата кнопка «Новый человек», запускается информационное окно, и пользователь может заполнить информацию и сохранить.
def add_new_subject_description(self, evet):
self.rectitle = Label(self.root, fg=self.light_gray, bg=self.home_color, font=('Calibri', 25))
self.rectitle.config(text='Add a new subject')
self.rectitle.place(x=260, y=150)
self.bStartRec = Button(self.root, text='Start Recording',
bd=0, bg=self.home_color, fg='white', font=self.style)
self.bStartRec.place(x=370, y=480)
self.bStartRec.bind("<Button-1>", self.send_data)
self.infowin = InfoWindow()
self.root.mainloop()
Когда информация от пользователя После сохранения окно ввода закроется, и можно нажать кнопку «Начать запись». Проблема появляется здесь. Информационный объект в InfoWindow-классе не обновляется, поэтому пользовательскую информацию нельзя использовать в функции send_data ().
def send_data(self, event):
try:
if not self.idf:
self.info = self.infowin.inf0
print("inside send_data ")
print(type(self.infowin))
print(self.infowin)
print("from send_data")
print("name: " + self.info['name'] + " age: " + self.info['age'] + " sex: " + self.info['sex'])
subj_namename = self.info['name']
age = self.info['age']
sex = self.info['sex']
Я действительно не могу найти проблему и боролся в течение нескольких дней, я не могу двигаться вперед без ввода пользователя. Пожалуйста помоги!