У объекта 'Event' нет атрибута '_tclCommands' - PullRequest
0 голосов
/ 02 ноября 2019

Я решаю эту проблему более часа, но не могу решить эту проблему. Моя ошибка - ссылка, представленная ниже. [ Это моя ошибка У меня есть два класса, мой основной класс и класс виртуальной клавиатуры. Если я щелкнул свой виджет ввода, виртуальная клавиатура должна всплыть. Я использовал .bind и вот мой код в моем основном классе init .

def __init__(self, master, *args, **kwargs):
    tk.Frame.__init__(self, master, *args, **kwargs)
    self.master = master
    master.title("Thesis")

    self.login_button = Button(master, text = "Login",command = self.login, bg= "white")
    self.login_button.pack()
    self.register_button = Button(master, text="Register", command=self.register)
    self.register_button.pack()

    self.close_button = Button(master, text="Close", command=master.destroy)
    self.close_button.pack()

    self.db = pymysql.connect(host = "localhost",user = "root",passwd = "",db = "test")
    self.cursor = self.db.cursor()
    self.QueryResident = "CREATE TABLE IF NOT EXISTS residence (FIRST_NAME varchar(255) not null, MIDDLE_NAME varchar(255) not null, LAST_NAME varchar(255) not null,SEX varchar(255) not null, BIRTH_DATE varchar(255) not null, CIVIL_STATUS varchar(255) not null)"
    self.cursor.execute(self.QueryResident)]

вот мой код, когда я использовал .bind в моем виджете.

def register(self):
    self.master_register = Toplevel()

    self.first_name = StringVar()
    self.middle_name = StringVar()
    self.last_name = StringVar()
    self.sex = StringVar()
    self.birth_day = StringVar()
    self.civil_status = StringVar()

    self.label_head = Label(self.master_register, text = "Please fill up all informations below")
    self.label_head.pack()

    self.label_first_name = Label(self.master_register, text = "First Name")
    self.label_first_name.pack()
    self.entry_first_name = Entry(self.master_register, textvariable = self.first_name)
    self.entry_first_name.pack()
    self.entry_first_name.bind('<ButtonPress-1>',keyboard.__init__)

    self.label_middle_name = Label(self.master_register, text = "Middle Name")
    self.label_middle_name.pack()
    self.entry_middle_name = Entry(self.master_register, textvariable = self.middle_name)
    self.entry_middle_name.pack()
    self.entry_middle_name.bind('<ButtonPress-1>',keyboard.__init__)

    self.label_last_name = Label(self.master_register, text = "Last Name")
    self.label_last_name.pack()
    self.entry_last_name = Entry(self.master_register, textvariable = self.last_name)
    self.entry_last_name.pack()
    self.entry_last_name.bind('<ButtonPress-1>',keyboard.__init__)

    self.label_sex = Label(self.master_register, text = "Sex")
    self.label_sex.pack()
    self.radio_button_sex1 = Radiobutton(self.master_register, text = "Male", variable = self.sex, value = "Male" )
    self.radio_button_sex1.pack()
    self.radio_button_sex2 = Radiobutton(self.master_register, text = "Female", variable = self.sex, value = "Female")
    self.radio_button_sex2.pack()


    self.label_birthday = Label(self.master_register, text = "Birth Day")
    self.label_birthday.pack()
    self.entry_birthday = Entry(self.master_register, textvariable = self.birth_day)
    self.entry_birthday.pack()
    self.entry_birthday.bind('<ButtonPress-1>',keyboard.__init__)

    self.label_civil_status = Label(self.master_register, text = "Civil Status")
    self.label_civil_status.pack()
    self.entry_civil_status = Entry(self.master_register, textvariable = self.civil_status)
    self.entry_civil_status.pack()
    self.entry_civil_status.bind('<ButtonPress-1>',keyboard.__init__)

    self.button_submit = Button(self.master_register, text = "Submit", command = lambda: self.registered(self.first_name, self.middle_name,
                                                                                        self.last_name, self.sex, self.birth_day,
                                                                                        self.civil_status))
    self.button_submit.pack()

и вот мой класс виртуальной клавиатуры. «Киоск» - это имя моего основного класса.

class keyboard(Kiosk):
def __init__(self, master, *args, **kwargs):
    Frame.__init__(self, master, *args, **kwargs)
    self.vkeyboard = master
    vkeyboard.title("Virtual Keyboard")
    self.lowercase()

def selectlower(self, value):
    if value == "Space":
        self.entry.insert(tkinter.END, ' ')
    elif value == "<-Backspace":
        self.entry.delete(len(self.entry.get())-1,tkinter.END)
    elif value == "Caps Lock":
        self.uppercase()
    else:
        self.entry.insert(tkinter.END, value)
def selectupper(self, value):
    if value == "Space":
        self.entry.insert(tkinter.END, ' ')
    elif value == "<-Backspace":
        self.entry.delete(len(self.entry.get())-1,tkinter.END)
    elif value == "Caps Lock":
        self.lowercase()
    else:
        self.entry.insert(tkinter.END, value)

def uppercase(self):

    self.ALPHABETS = ['`','1','2','3','4','5','6','7','8','9','0','-','=','Backspace',
                'Tab','Q','W','E','R','T','Y','U','I','O','P','[',']',"\\",
                'Caps Lock','A','S','D','F','G','H','J','K','L',';',"'",'Enter',
                'Shift','Z','X','C','V','B','N','M',',','.','/','Shift',
                 'Space']

    self.Row = 2
    self.Column = 0

    for self.alphabet in self.ALPHABETS:
        self.command = lambda x=self.alphabet: self.selectupper(x)
        if self.alphabet != 'Space':
            Button(self.vkeyboard, text = self.alphabet,
                   command = self.command,width = 5, padx=3, pady=3,bd=12,bg = "black", fg="white").grid(row = self.Row, column = self.Column)
        if self.alphabet == 'Enter':
            Button(self.vkeyboard, text = self.alphabet,
                   command = self.command, width = 15, padx=3, pady=3,bd=12,bg = "black", fg="white").grid(row = self.Row, column = self.Column, columnspan = 2)
        if self.alphabet == 'Shift':
            Button(self.vkeyboard, text = self.alphabet,
                   command = self.command, width = 15, padx=3, pady=3,bd=12,bg = "black", fg="white").grid(row = self.Row, column = self.Column, columnspan = 2)    
        if self.alphabet == 'Space':
            Button(self.vkeyboard, text = self.alphabet,
                   command = self.command, width = 130, padx=3, pady=3,bd=12,bg = "black", fg="white").grid(row = 6, columnspan = 16)

        self.Column +=1
        if self.Column > 13 and self.Row == 1:
            self.Column = 0
            self.Row += 1
        if self.Column > 13 and self.Row == 2:
            self.Column = 0
            self.Row +=1
        if self.Column > 13 and self.Row == 3:
            self.Column = 0
            self.Row +=1
        if self.Column > 12 and self.Row == 4:
            self.Column = 0
            self.Row +=1

def lowercase(self,event):

    self.entry = Entry(self.vkeyboard, text = "input")
    self.entry.grid(row =1, columnspan = 40)

    self.alphabets = ['`','1','2','3','4','5','6','7','8','9','0','-','=','Backspace',
                'Tab','q','w','e','r','t','y','u','i','o','p','[',']',"\\",
                'Caps Lock','a','s','d','f','g','h','j','k','l',';',"'",'Enter',
                'Shift','z','x','c','v','b','n','m',',','.','/','Shift',
                 'Space']

    self.Row = 2
    self.Column = 0


    for self.alphabet in self.alphabets:
        self.command = lambda x=self.alphabet: self.selectlower(x)
        if self.alphabet != 'Space':
            Button(self.vkeyboard, text = self.alphabet,
                   command = self.command,width = 5, padx=3, pady=3,bd=12,bg = "black", fg="white").grid(row = self.Row, column = self.Column)
        if self.alphabet == 'Enter':
            Button(self.vkeyboard, text = self.alphabet,
                   command = self.command, width = 15, padx=3, pady=3,bd=12,bg = "black", fg="white").grid(row = self.Row, column = self.Column, columnspan = 2)
        if self.alphabet == 'Shift':
            Button(self.vkeyboard, text = self.alphabet,
                   command = self.command, width = 15, padx=3, pady=3,bd=12,bg = "black", fg="white").grid(row = self.Row, column = self.Column, columnspan = 2)    
        if self.alphabet == 'Space':
            Button(self.vkeyboard, text = self.alphabet,
                   command = self.command, width = 130, padx=3, pady=3,bd=12,bg = "black", fg="white").grid(row = 6, columnspan = 16)

        self.Column +=1
        if self.Column > 13 and self.Row == 1:
            self.Column = 0
            self.Row += 1
        if self.Column > 13 and self.Row == 2:
            self.Column = 0
            self.Row +=1
        if self.Column > 13 and self.Row == 3:
            self.Column = 0
            self.Row +=1
        if self.Column > 12 and self.Row == 4:
            self.Column = 0
            self.Row +=1

Я думаю, что моя проблема - наследование или обработчик, я впервые делаю наследование и вызываю другой класс. У меня нет никаких проблем в моем основном классе, моя база данных и функция регистра работают отлично. Но когда я добавил виртуальную клавиатуру в качестве другого класса, я получил эту ошибку. надеюсь, вы, ребята, можете мне помочь. Большое вам спасибо!

...