Форум сайта python.su
0
Добрый день.
Подскажите пож-та на примере этого кода:
https://github.com/g0t0wasd/python/blob/master/programs/gui/PyPaint.py
Можно ли как-то написать функцию (например SetUI) в отдельном модуле и импортировать потом оттуда?
Недавно начал изучать python и захотел написать свою десктопную программу по аналогии с примером выше, но в моем случае setUI получается очень громоздким.
Захотел для каждой группы элементов интерфейса написать отдельные классы и функции и потом собрать их в условном main.py.
Если я как-то неправильно думаю, то помогите, пож-та разобраться в “структурировании” кода при написании подобных (но с значительно бОльшим функционалом) программ.
Спасибо.
Отредактировано WhatEver (Июль 16, 2017 10:55:25)
Офлайн
294
WhatEverМожно, но ИМХО не нужно, хотябы потому что SetUI это метод классав вашем конкретном случае. И выносить методы класса в отдельный модуль это, как по мне, дичь. Выносите весь класс, это будет более правильно.
Можно ли как-то написать функцию (например SetUI) в отдельном модуле и импортировать потом оттуда?
def setUI(self): import UI # наш модуль с вынесеными элементами self.brushColor = UI.BrushColor(parent, defColor) # создаем инстанс инструмента выбора цвета self.brushColor.pack() # помещаем его на форму self.brushStyle = UI.BrushStyle(parent, defStyle) # создаем инстанс инструмента выбора формы кисти self.brushStyle.pack() # # помещаем его на форму .......
[code python][/code]
Отредактировано PEHDOM (Июль 16, 2017 17:21:57)
Офлайн
0
del
Отредактировано WhatEver (Авг. 8, 2017 22:00:59)
Офлайн
253
Немного не по теме
M ="AQRETY..." cell_letter = [M[row_id], M[col_id]] i0,i1 = 0,1 if row_id > col_id else 1,0 self.cell_text = cell_letter[i0]+cell_letter[i1]
Офлайн
568
if row_id == 0: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 1 and column_id >= 2: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 2 and column_id >= 3: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 3 and column_id >= 4: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 4 and column_id >= 5: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 5 and column_id >= 6: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 6 and column_id >= 7: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 7 and column_id >= 8: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 8 and column_id >= 9: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 9 and column_id >= 10: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 10 and column_id >= 11: self.cell_text = self.cell_letter_1 + self.cell_letter_2 elif row_id == 11 and column_id == 12: self.cell_text = self.cell_letter_1 + self.cell_letter_2
Офлайн
0
doza_andИ правда, упс..
Если это 4 строчки то вроде и в другой файл не надо выносить?
Офлайн
294
WhatEverДумать , думать и еще раз думать над архитектурой вашей программы, а не просто кучу if-ов повставлять. Например есть такая штука как MVC , вот небольшой туториал на примере сапера.. http://itnotesblog.ru/note.php?id=10#sthash.IJX64k9D.dpbs с
Спасибо, это понял, но, к сожалению, не понял что делать в случае более функциональных программ.
WhatEverКонечно можно, выше я уже писал как. Пишете класс, в нем определяете методы атрибуты, поведение при нажатии мышы/клавиатуры etc.. Описываете какие он может выполнять или отдавать “комманды”, через каллбек функции или систему сигналов\слотов, это уж как вам удобнее. Потом импортируете, создаете экземпляр класса, и связваете соответвующие сигналы/слоты (выполняемые\ отдаваемые “комманды”) с соответвующими функциями вашей программы.
Допустим у нас есть указанный выше пейнт и мы захотим к нему, например где-то справа, прикрутить вот такую ерунду…
Как правильно создать класс и импортировать его в тот пейнт, чтобы все работало? (Так можно вообще?)
[code python][/code]
Отредактировано PEHDOM (Июль 17, 2017 11:12:22)
Офлайн