Найти - Пользователи
Полная версия: Выпадающий список в PyQt
Начало » GUI » Выпадающий список в PyQt
1
BlOr
Приложение выводит в трей иконку и меню. Нужно реализовать подменю с возможностью выбирать пункты как radiobutton. т.е. одновременно активен только один пункт.
Можно вручную проставлять и стирать иконки, но не понял как вызывать иконки стандартных контролов.
self.menu = QMenu()
self.printerMenu = QMenu()

printerDesc = dict()
printerList = QPrinterInfo.availablePrinters()
for x in printerList:
printerDesc[x] = self.printerMenu.addAction(QPrinterInfo.printerName(x))
#Проверка вызова стандартной иконки темы оформления. Не работает :(
printerDesc[x].setIcon(QIcon.fromTheme("view-refresh"))

self.printerAction = self.menu.addMenu(self.printerMenu)
self.printerAction.setText(u"Выбрать принтер")
self.printerAction.setIcon(QIcon('icon/printer.png'))

## Иконка в трее
self.tray_icon = QSystemTrayIcon()
self.tray_icon.setIcon(QIcon('icon/printer.png'))
self.tray_icon.setContextMenu(self.menu)
self.tray_icon.show()
dartNNN
Не до конца понял, что вы хотите. Если прочитать только первое предложение, то есть отличная папка
C:\Python31\Lib\site-packages\PyQt4\examples\
Там лежит столько всего полезного)
Например
C:\Python31\Lib\site-packages\PyQt4\examples\mainwindows\menus.pyw
В котором есть такой код
        self.leftAlignAct = QtGui.QAction("&Left Align", self, checkable=True,
shortcut="Ctrl+L", statusTip="Left align the selected text",
triggered=self.leftAlign)

self.rightAlignAct = QtGui.QAction("&Right Align", self,
checkable=True, shortcut="Ctrl+R",
statusTip="Right align the selected text",
triggered=self.rightAlign)

self.justifyAct = QtGui.QAction("&Justify", self, checkable=True,
shortcut="Ctrl+J", statusTip="Justify the selected text",
triggered=self.justify)

self.centerAct = QtGui.QAction("&Center", self, checkable=True,
shortcut="Ctrl+C", statusTip="Center the selected text",
triggered=self.center)

self.alignmentGroup = QtGui.QActionGroup(self)
self.alignmentGroup.addAction(self.leftAlignAct)
self.alignmentGroup.addAction(self.rightAlignAct)
self.alignmentGroup.addAction(self.justifyAct)
self.alignmentGroup.addAction(self.centerAct)
self.leftAlignAct.setChecked(True)
А потом вот так используется
        self.editMenu = self.menuBar().addMenu("&Edit")

self.formatMenu = self.editMenu.addMenu("&Format")
self.formatMenu.addAction(self.leftAlignAct)
self.formatMenu.addAction(self.rightAlignAct)
.....
А про иконки я честно не понял: куда и зачем? И что значит
BlOr
вызывать иконки стандартных контролов.
BlOr
Объясню немного по другому.
В трее есть иконка приложения. Под правой кнопкой на нём есть контекстное меню, где есть пункт “Выбрать принтер”. При наведении на этот пункт открывается субменю со списком принтеров доступных в системе. В списке должен быть выделен один! принтер - который в данный момент назначен активным (его название хранится в переменной). Пользователь кликом по названиям может выбирать какой будет назначен активным, остальные же переводятся в неактивные.
Вот не могу найти описаниях как сделать такой “радио-переключатель”, слабоват в английском. Или можно написать свою логику, но тогда нужна стандартная иконка активного элемента (В winXP это bull - жирная такая точка, можно в любом окне эксплорера посмотреть, меню Вид).
dartNNN
Ну вот я именно это и написал) вы бы все же посмотрели примеры, включенные в PyQt
Вот так создается ActionGroup
self.alignmentGroup = QtGui.QActionGroup(self)
self.alignmentGroup.addAction(self.leftAlignAct)
Которая как раз и позволяет держать только один пункт меню “чекнутым”:)
Вот так нужный элемент задается “чекнутым”:)
self.leftAlignAct.setChecked(True)
Ну а в меню они добавляются как обычные Action. И вы получите именно необходимый вам функционал.
BlOr
Ага, спасибо. Разобрался :)
Даже и не знал что в комплекте примеры идут. А то в QtAssistant всё на Си.
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