Форум сайта python.su
Добрый день.
Вот возникли вопросы, решил узнать как люди делают, чем руководствуются.
1. Чем вы руководствуетесь, когда решаете нужен ли новый класс. Разбиваете на логические элементы или отделяете логику от графики?
Правильный ли вариант описывать весь GUI отдельным модулем, классами, а потом использовать импорт?
Я не использую при создании GUI редакторов, пишу на pyGTK и соответственно код получается длинным и часто присутствует множество объектов. Из этого второй вопрос.
2. Допустим программа содержит однотипные (вернее похожие) части, как то диалоговые окна, модальные окна, всплывающие подсказки наполненные различным содержимым. Стоит ли использовать универсальные классы и наполнять их нужными элементами или писать для каждого момента свой класс/метод?
3. Что вы делаете когда класс получается объёмным (по количеству кода)? Ниже пример.
class Area:
def __init__(self):
self.x = 10
self.y = 10
self.obj = None
self.value_delete = False # для проверки при удалении объекта/метки
self.dictionary_obj = {} # Словарь для объектов (изображений) в Event Box
self.dictionary_lbl = {} # Словарь для объектов (меток) в Event Box
self.dictionary_handler_id = {} # Словарь для блокировки сигналов
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_resizable(False)
self.window.set_title('Редактирование')
screen = gtk.gdk.Screen()
self.window.set_size_request(screen.get_width(), screen.get_height())
self.window.fullscreen()
# self.window.maximize()
self.window.connect("destroy", lambda w: gtk.main_quit())
self.window.connect("key-press-event", self.keyboard_event)
self.t = gtk.Table(100, 100, True)
self.fixed = gtk.Fixed()
self.t.attach(self.fixed, 0,100,5,100)
self.window.add(self.t)
self.menu_items = (
( "/_Меню", None, None, 0, "<Branch>" ),
( "/Меню/Создать объект", "<control>N", self.great_obj, 0, None ),
( "/Меню/Создать метку", "<control>L", self.great_lbl, 0, None ),
# ( "/Меню/Сохранить", None, None, 0, None ),
( "/Меню/sep1", None, None, 0, "<Separator>" ),
( "/Меню/Выход", "<control>Q", gtk.main_quit, 0, None ),
( "/_Правка", None, None, 0, "<Branch>" ),
( "/Правка/Редактировать объект", None, self.edit_obj, 0, None ),
( "/Правка/Редактировать метку", None, self.edit_lbl, 0, None ),
( "/Правка/Удалить объект", None, self.delete_obj, 0, None ),
( "/Правка/Удалить метку", None, self.delete_lbl, 0, None ),
)
menubar = self.get_main_menu(self.window)
def great_obj(self, w, data): # Создать объект
#Вот здесь ~470 строк кода
def great_lbl(self, w, data): # Создание метки
#Вот здесь ~80 строк кода
def edit_obj(self, w, data): # Редактирование объекта
#Вот здесь ~300 строк кода
def edit_lbl(self, w, data): # Редактирование метки
#Вот здесь ~200 строк кода
Офлайн