Уведомления

Группа в Telegram: @pythonsu

#1 Июль 16, 2017 06:46:02

WhatEver
Зарегистрирован: 2017-07-16
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос про импорт своих классов из модулей

Добрый день.

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

Недавно начал изучать python и захотел написать свою десктопную программу по аналогии с примером выше, но в моем случае setUI получается очень громоздким.
Захотел для каждой группы элементов интерфейса написать отдельные классы и функции и потом собрать их в условном main.py.
Если я как-то неправильно думаю, то помогите, пож-та разобраться в “структурировании” кода при написании подобных (но с значительно бОльшим функционалом) программ.
Спасибо.

Отредактировано WhatEver (Июль 16, 2017 10:55:25)

Офлайн

#2 Июль 16, 2017 10:32:40

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Вопрос про импорт своих классов из модулей

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()                                         #  # помещаем его на форму
   .......



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июль 16, 2017 17:21:57)

Офлайн

#3 Июль 17, 2017 03:14:41

WhatEver
Зарегистрирован: 2017-07-16
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос про импорт своих классов из модулей

del

Отредактировано WhatEver (Авг. 8, 2017 22:00:59)

Офлайн

#4 Июль 17, 2017 07:22:08

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Вопрос про импорт своих классов из модулей

Немного не по теме

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



Офлайн

#5 Июль 17, 2017 07:50:39

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Вопрос про импорт своих классов из модулей

        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



Офлайн

#6 Июль 17, 2017 08:00:31

WhatEver
Зарегистрирован: 2017-07-16
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос про импорт своих классов из модулей

doza_and
Если это 4 строчки то вроде и в другой файл не надо выносить?
И правда, упс..
Ну, я не догадался…

Офлайн

#7 Июль 17, 2017 10:59:55

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Вопрос про импорт своих классов из модулей

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



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июль 17, 2017 11:12:22)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version