Проблема получения ввода пользователя с помощью tkinter - PullRequest
0 голосов
/ 27 апреля 2020

Я новичок в 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']

Я действительно не могу найти проблему и боролся в течение нескольких дней, я не могу двигаться вперед без ввода пользователя. Пожалуйста помоги!

...