Форум сайта python.su
12
Все десктоп приложения, которые я написал и где есть работа с SQL базами написаны на ней. Хотя раз не актуальна, значит не актуальна 
Офлайн
88
Использую подпиленную Camelot, которая пользуется алхимией. Работает.
https://www.youtube.com/watch?v=HZ5i257N6cc
Офлайн
0
Собственно очередная ошибка, предполагаю что-то с супер классом. Подскажите или помогите создать конструкцию/шаблон (если можно с комментариями), может на моём примере, с использованием всех канонов ООП и со стороны специалиста, чтоб было основное окно и дочернее. Изучая этот вопрос, я увидел что многие начинающие как я - интересуются и пытаются найти ответ на данный вопрос. Думаю это будет полезно не только мне, но и поможет остальным иметь готовый шаблон, конструкцию для собственной реализации.
import tkinter as tk class Main(tk.Frame): def __init__(self, root, *attr, **kwargs): super().__init__(self, root, *attr, **kwargs) self.init_main() def init_main(self): toolbar = tk.Frame() toolbar.pack(side=tk.TOP, fill=tk.X) toolbar.config(bg='#d7d8e0', bd=2) btnOpenDialog = tk.Button(toolbar, text='Добавить позицию', command=self.open_dialog) btnOpenDialog.pack(side=tk.LEFT) btnOpenDialog.config(bg='#d7d8e0', bd=0, compound=tk.TOP) def open_dialog(self): Child(self) class Child(tk.Toplevel): def __init__(self): tk.Toplevel.__init__(self) self.title('Добавить доходы/расходы') self.geometry('400x220+400+300') self.resizable(False, False) if __name__ == "__main__": root = tk.Tk() app = Main(root) app.pack() root.title("Домашние финансы") root.geometry("650x450+300+200") root.resizable(False, False) root.mainloop()
Traceback (most recent call last):
File "C:/Users/DANNY/PycharmProjects/test/test.py", line 31, in <module>
app = Main(root)
File "C:/Users/DANNY/PycharmProjects/test/test.py", line 6, in __init__
super().__init__(self, root, *attr, **kwargs)
File "C:\Python35\lib\tkinter\__init__.py", line 2593, in __init__
Widget.__init__(self, master, 'frame', cnf, {}, extra)
File "C:\Python35\lib\tkinter\__init__.py", line 2141, in __init__
BaseWidget._setup(self, master, cnf)
File "C:\Python35\lib\tkinter\__init__.py", line 2119, in _setup
self.tk = master.tk
AttributeError: 'Main' object has no attribute 'tk'
Офлайн
8
4kpt_VЯ этого не говорил однозначно
Хотя раз не актуальна, значит не актуальна
Просто пока, не доконца понимаю, для меня сейчас ощущения, что при ее использовании теряешь все фишки sql (хранимые процедуры, генераторы и прочее), но думаю это от не понимания ее роли, но буду разбираться.Отредактировано MrViktor (Март 19, 2017 19:44:50)
Офлайн
88
Офлайн
12
super().__init__(self, root, *attr, **kwargs)
Офлайн
0
Хех, заработало. А в целом по коду что скажите? Я учёл Ваши рекомендации?
Офлайн
12
Близко, но пока не совсем
super().__init__(self, root, *attr, **kwargs)
tk.Toplevel.__init__(self)
toolbar.config(bg='#d7d8e0', bd=2)

Офлайн
0
tk.Toplevel.__init__(self)
import tkinter as tk class Main(tk.Frame): def __init__(self, root, *attr, **kwargs): super().__init__(root, *attr, **kwargs) self.init_main() def init_main(self): toolbar = tk.Frame(bg='#d7d8e0', bd=2) toolbar.pack(side=tk.TOP, fill=tk.X) btnOpenDialog = tk.Button(toolbar, text='Добавить позицию', command=self.open_dialog, bg='#d7d8e0', bd=0, compound=tk.TOP) btnOpenDialog.pack(side=tk.LEFT) def open_dialog(self): Child() class Child(tk.Toplevel): def __init__(self): tk.Toplevel.__init__(self) self.title('Добавить доходы/расходы') self.geometry('400x220+400+300') self.resizable(False, False) if __name__ == "__main__": root = tk.Tk() app = Main(root) app.pack() root.title("Домашние финансы") root.geometry("650x450+300+200") root.resizable(False, False) root.mainloop()
Отредактировано Feelgood (Март 19, 2017 22:29:11)
Офлайн
12
Ну вы же для рута применили super(), а тут нет. Почему? Отвыкайте копипастить! У Вас своя голова не менее светлая… Ну PEP8. Если лень читать, то рекомендую поставить PyCharm. Он сразу все подсветит.
P.S. Попробуйте посмотреть, что же там в переменной модуля tk.X 
Офлайн