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