Уведомления

Группа в Telegram: @pythonsu

#1 Июль 4, 2010 22:47:53

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Pyqt4, menubar через dict

Меньше кода – не значит лучше.
В данном случае, я бы написао маленькую локальную функцию, которая делает всю ту фиговерть, расположенную в цикле, написал бы пару строк докстрина и дальше просто вызвал бы её нужное количество раз с нужными аргументами. Код был бы куда читаемее.
А такие сложные многоуровневые структуры, как menu_list трудно читаются и правятся.

P.S. И никогда такие структуры нельзя писать в одну строчку…

menu_list=o_d([
('Файл', o_d([
('Создать...',['','Ctrl+N', 'Создание нового документа.',False,False,False]),
('Открыть...',['','Ctrl+O','Открытие существующего документа.',False,False,False]),
('Сохранить',['','Ctrl+S','Сохранение активного документа.',False,False,False]),
('Сохранить как...',['','','Сохранение активного документа под новым именем.',False,False,True]),
('Печать',['','Ctrl+P','Печать активного документа.',False,False,True]),
('Выход',['','','Завершение работы с приложением; сохранение документов.',False,False,False])])
),
('Правка',o_d([
('Отменить',['','Ctrl+Z','Отмена последнего действия.',False,False,True]),
('Вырезать',['','Ctrl+X','Удаление выделенного фрагмента в буфер обмена.',False,False,False])])
),
('Вид',o_d([
('Панель инструментов',['','','Вывод и скрытие панели инструментов.',True,True,False]),
('Панель форматирования',['','','Вывод и скрытие панели форматирования.',True,True,False])])
),
('Вставка',o_d([
('Дата и время...',['','','Вставка в текст текущих даты и/или времени.',False,False,False]),
('Объект',['','','Вставка в документ нового объекта.',False,False,False])])
),
('Формат',o_d([
('Шрифт...',['','','Выбор шрифта для выделенного фрагмента текста.',False,False,False]),
('Абзац...',['','','Форматирование текущего либо выделенных абзацев.',False,False,False])])
),
('Справка',o_d([
('Вызов справки',['','','Вывод содержания встроенной справки.',False,False,True]),
('О программе',['','','Вывод сведений о программе, ее версии и авторских правах.',False,False,False])])
)])
Лично я запутался в скобочках… Это не лисп!

P.P.S. Обрати внимание на PEP-8.



Отредактировано (Июль 4, 2010 23:46:10)

Офлайн

#2 Июль 5, 2010 07:00:35

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

Pyqt4, menubar через dict

В данном случае, я бы написао маленькую локальную функцию, которая делает всю ту фиговерть, расположенную в цикле, написал бы пару строк докстрина и дальше просто вызвал бы её нужное количество раз с нужными аргументами. Код был бы куда читаемее.
Да спасибо!, я сначала тоже думал на счет функции, но потом отказался)). Что же попробую.
А такие сложные многоуровневые структуры, как menu_list трудно читаются и правятся.
И никогда такие структуры нельзя писать в одну строчку…
Обрати внимание на PEP-8.
Да тут я пожалуй и в правду перегнул палку)))
Спасибо за советы.



Офлайн

#3 Июль 9, 2010 18:03:50

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

Pyqt4, menubar через dict

В общем кому интересно!
набрел, в примерах к PyQt4, на такую тему:
imageviewer
и там посмотрел как реализовали меню:лично мне понравилось.
теперь буду знать и пользоваться))

......................
def createActions(self):
self.openAct = QtGui.QAction("&Open...", self, shortcut="Ctrl+O",
triggered=self.open)

self.printAct = QtGui.QAction("&Print...", self, shortcut="Ctrl+P",
enabled=False, triggered=self.print_)

self.exitAct = QtGui.QAction("E&xit", self, shortcut="Ctrl+Q",
triggered=self.close)

self.zoomInAct = QtGui.QAction("Zoom &In (25%)", self,
shortcut="Ctrl++", enabled=False, triggered=self.zoomIn)

self.zoomOutAct = QtGui.QAction("Zoom &Out (25%)", self,
shortcut="Ctrl+-", enabled=False, triggered=self.zoomOut)

self.normalSizeAct = QtGui.QAction("&Normal Size", self,
shortcut="Ctrl+S", enabled=False, triggered=self.normalSize)

self.fitToWindowAct = QtGui.QAction("&Fit to Window", self,
enabled=False, checkable=True, shortcut="Ctrl+F",
triggered=self.fitToWindow)

self.aboutAct = QtGui.QAction("&About", self, triggered=self.about)

self.aboutQtAct = QtGui.QAction("About &Qt", self,
triggered=QtGui.qApp.aboutQt)

def createMenus(self):
self.fileMenu = QtGui.QMenu("&File", self)
self.fileMenu.addAction(self.openAct)
self.fileMenu.addAction(self.printAct)
self.fileMenu.addSeparator()
self.fileMenu.addAction(self.exitAct)

self.viewMenu = QtGui.QMenu("&View", self)
self.viewMenu.addAction(self.zoomInAct)
self.viewMenu.addAction(self.zoomOutAct)
self.viewMenu.addAction(self.normalSizeAct)
self.viewMenu.addSeparator()
self.viewMenu.addAction(self.fitToWindowAct)

self.helpMenu = QtGui.QMenu("&Help", self)
self.helpMenu.addAction(self.aboutAct)
self.helpMenu.addAction(self.aboutQtAct)

self.menuBar().addMenu(self.fileMenu)
self.menuBar().addMenu(self.viewMenu)
self.menuBar().addMenu(self.helpMenu)
.................
P.S. А вообще теперь надо все примеры посмотреть в PyQt, я смотрю там много интересного и полезного, вдруг что-то еще полезное попадется))



Отредактировано (Июль 9, 2010 18:09:47)

Офлайн

#4 Июль 9, 2010 18:30:23

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Pyqt4, menubar через dict

Вот это самое правильное решение, потому что оно простое и читаемое.

P.S. Ууу… С этого начинать надо! :-)



Офлайн

#5 Июль 9, 2010 18:49:12

apologize828
От:
Зарегистрирован: 2010-02-13
Сообщения: 223
Репутация: +  1  -
Профиль   Отправить e-mail  

Pyqt4, menubar через dict

P.S. Ууу… С этого начинать надо! :-)
Не спорю! что же наверстаю)))
Если бы не посмотрел пример, никогда бы и не узнал, что в QAction можно столько именнованных аргументов передавать.)
Просто до этого не встречал таких примеров,везде в основном QAction демонстрируется без именнованных аргументов.
А тут ни фига себе оказывается почти все что выставляем как set…
можно заталкнуть, как именнованный аргумент в сам QAction.
Даже в доках такого не встречал.



Офлайн

#6 Июль 10, 2010 09:43:21

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Pyqt4, menubar через dict

apologize828
и там посмотрел как реализовали меню:лично мне понравилось.
Блин, так я думал вас это решение не устроило :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version