Feelgood
Какой-то клоун писал, если честно. Ошибка на ошибке…
4. При передаче в обработчик зря сразу конвертируете в типы. Пусть обработчик сам на себя возьмет эти задачи. Ну и зачем передавать их явно. Вы же уже их сделали атрибутами объекта (self.entryDescription и т.п.).
self.btnOk.bind('<Button-1>', lambda event: self.insert_data(self.entryDescription.get(), self.combobox.get(), self.entryMoney.get()))
# self.btnOk.bind('<Button-1>', self.insert_data) self.slave.grab_set() self.slave.focus_set() self.slave.wait_window() def insert_data(self, event): print(self.entryDescription.get()) c.execute('''INSERT INTO finance(description, costs, sum) VALUES (?, ?, ?)''', (description, costs, total)) conn.commit() '''conn.close()''' # call main.add_data self.main.add_data((description, costs, total)) self.slave.destroy()
1. Наследоваться желательно от чего-то, тогда можно будет этот виджет размещаться как элемент (как кнопку, например). Рекомендую рамку. Она, если надо, сама себе создаст root, если забыли передать (передали None).
6. Не принято создание писать в __init__. Лучше завести какой-то метод-инициатор.
# import tkinter # class MyWidget(tkinter.Frame): def __init__(self, root, *attr, **kwargs): super().__init__(self, root, *attr, **kwargs) self.init_widget() def init_widget(self): button_ops = tkinter.Button(self, text="ops") button_ops.pack() button_ops.bind("<Button-1>", self.callback) button_ups = tkinter.Button(self, text="ups") button_ups.pack() button_ups.bind("<Button-1>", self.callback) def callback(self, event): print("button:", event.widget["text"]) # if __name__ == "__main__": root = tkinter.Tk() my_widget = MyWidget(root) my_widget.pack() root.mainloop()
from tkinter import * from tkinter import ttk