Найти - Пользователи
Полная версия: Обновление данных в treeview из БД
Начало » GUI » Обновление данных в treeview из БД
1 2 3 4 5
4kpt_V
Feelgood
Какой-то клоун писал, если честно. Ошибка на ошибке…
Feelgood
4kpt_V
Вы имеете введу сделать так:

4. При передаче в обработчик зря сразу конвертируете в типы. Пусть обработчик сам на себя возьмет эти задачи. Ну и зачем передавать их явно. Вы же уже их сделали атрибутами объекта (self.entryDescription и т.п.).

 self.btnOk.bind('<Button-1>', lambda event: self.insert_data(self.entryDescription.get(),
                                                                     self.combobox.get(),
                                                                     self.entryMoney.get()))

4kpt_V
Нет
 #
        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()
4kpt_V
Feelgood
По пунктам все понятно?
Feelgood
4kpt_V
1. Наследоваться желательно от чего-то, тогда можно будет этот виджет размещаться как элемент (как кнопку, например). Рекомендую рамку. Она, если надо, сама себе создаст root, если забыли передать (передали None).

6. Не принято создание писать в __init__. Лучше завести какой-то метод-инициатор.

С этими пунктами не всё понятно, я так понимаю необходимо основательно взятся за теорию ООП. С наскока, как у меня, на более/менее адекватный результат не стоит рассчитывать…
4kpt_V
Это не ООП. Это больше по Tkinter. Чтение по ООП тут не поможет вовсе
Feelgood
В первом томе Лутца не встречал чтоб такое поясняли или был не внимателен.
Если можно чуть более конкретнее.
4kpt_V
Да легко.

Смотрим сюда:

 #
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()

Фактически получается, что мы создали виждет из двух кнопок. Он вообще может быть размещен где угодно как обычная кнопка или любой другой виджет. Упаковывать его можно теперь тоже как угодно любым методом. Frame “защищает” разграничивая внутренний упаковщик и внеший.
Feelgood
Чем плох такой импорт?
 from tkinter import *
from tkinter import ttk
4kpt_V
Еле нашел свой старый ответ…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB