Найти - Пользователи
Полная версия: Вопрос про импорт своих классов из модулей
Начало » Python для новичков » Вопрос про импорт своих классов из модулей
1
WhatEver
Добрый день.

Подскажите пож-та на примере этого кода:
https://github.com/g0t0wasd/python/blob/master/programs/gui/PyPaint.py
Можно ли как-то написать функцию (например SetUI) в отдельном модуле и импортировать потом оттуда?

Недавно начал изучать python и захотел написать свою десктопную программу по аналогии с примером выше, но в моем случае setUI получается очень громоздким.
Захотел для каждой группы элементов интерфейса написать отдельные классы и функции и потом собрать их в условном main.py.
Если я как-то неправильно думаю, то помогите, пож-та разобраться в “структурировании” кода при написании подобных (но с значительно бОльшим функционалом) программ.
Спасибо.
PEHDOM
WhatEver
Можно ли как-то написать функцию (например SetUI) в отдельном модуле и импортировать потом оттуда?
Можно, но ИМХО не нужно, хотябы потому что 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()                                         #  # помещаем его на форму
   .......
WhatEver
del
doza_and
Немного не по теме
 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]

Если это 4 строчки то вроде и в другой файл не надо выносить?
FishHook
        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

WhatEver
doza_and
Если это 4 строчки то вроде и в другой файл не надо выносить?
И правда, упс..
Ну, я не догадался…
PEHDOM
WhatEver
Спасибо, это понял, но, к сожалению, не понял что делать в случае более функциональных программ.
Думать , думать и еще раз думать над архитектурой вашей программы, а не просто кучу if-ов повставлять. Например есть такая штука как MVC , вот небольшой туториал на примере сапера.. http://itnotesblog.ru/note.php?id=10#sthash.IJX64k9D.dpbs с блекжеком и шлюхами пайтоном и tkinter. Почитайте может пригодиться.
WhatEver
Допустим у нас есть указанный выше пейнт и мы захотим к нему, например где-то справа, прикрутить вот такую ерунду…
Как правильно создать класс и импортировать его в тот пейнт, чтобы все работало? (Так можно вообще?)
Конечно можно, выше я уже писал как. Пишете класс, в нем определяете методы атрибуты, поведение при нажатии мышы/клавиатуры etc.. Описываете какие он может выполнять или отдавать “комманды”, через каллбек функции или систему сигналов\слотов, это уж как вам удобнее. Потом импортируете, создаете экземпляр класса, и связваете соответвующие сигналы/слоты (выполняемые\ отдаваемые “комманды”) с соответвующими функциями вашей программы.
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