Форум сайта python.su
Не могу разобраться как рисовать на иконке…
Вот кусок кода который я использую
...
self.trayIconPixmap = QtGui.QIcon('img.jpg')
painter = QtGui.QPainter()
painter.begin( self.trayIconPixmap.pixmap(16, 16, QtGui.QIcon.Normal, QtGui.QIcon.On) )
painter.drawText( QtCore.QRectF( QtCore.QRect(1, 1, 16, 16) ), QtCore.QString('11') )
painter.end()
self.trayIconPixmap.paint(painter, 1, 1, 16, 16)
self.trayIcon = QtGui.QSystemTrayIcon(self)
self.trayIcon.setContextMenu(self.trayIconMenu)
self.trayIcon.setIcon( self.trayIconPixmap )
StdErr: QPaintDevice: Cannot destroy paint device that is being painted. Be sure to QPainter::end() painters!
Офлайн
Привет.
Вот так у меня(в SUSE) рисует:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class Widget(QWidget):
def __init__ (self,*args):
QWidget. __init__ (self,*args)
def paintEvent(self,event=None):
painter=QPainter(self)
self.trayIconPixmap = QIcon('/home/mike/Desktop/lena.jpg') # полное имя
painter.begin( self.trayIconPixmap.pixmap(16, 16, QIcon.Normal,QIcon.On))
############################## рисуем #############################
painter.drawText( QRectF( QRect(1, 1, 16, 16) ), QString('11') )
self.trayIconPixmap.paint(painter, 16, 16, 16, 16)
self.trayIconPixmap.paint(painter, 32, 32, 16, 16)
self.trayIcon = QSystemTrayIcon(self)
#self.trayIcon.setContextMenu(self.trayIconMenu) # тут ошибка с атрибутами
self.trayIcon.setIcon( self.trayIconPixmap )
############################# закончили рисовать ############################
painter.end()
app = QApplication(sys.argv)
widget = Widget()
widget.show()
sys.exit(app.exec_())
Офлайн
Благодарю за помощь и за направление! Ваш пример у меня к сожалению рисовал только в окошке программы, а не на иконке в трее…
Во общем нашел я решение
class testTrayIcon(QtGui.QWidget):
BatteryLifePercent = 0
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.quitAction = QtGui.QAction(self.tr('&Quit'), self)
QtCore.QObject.connect(self.quitAction, QtCore.SIGNAL('triggered()'), QtGui.qApp, QtCore.SLOT('quit()'))
self.timer = QtCore.QTimer(self)
QtCore.QObject.connect(self.timer, QtCore.SIGNAL('timeout()'), self.show_level)
self.timer.start(5000)
self.trayIconMenu = QtGui.QMenu(self)
self.trayIconMenu.addAction(self.quitAction)
self.trayIconPixmap = QtGui.QPixmap('icon.jpg') #файл иконки
self.trayIcon = QtGui.QSystemTrayIcon(self)
self.trayIcon.setContextMenu(self.trayIconMenu)
self.trayIcon.setIcon(QtGui.QIcon(self.trayIconPixmap))
self.trayIcon.show()
self.resize(300, 200)
self.show()
def show_level(self):
self.BatteryLifePercent += 1
pixmap = QtGui.QPixmap(self.trayIconPixmap)
painter = QtGui.QPainter(pixmap)
textOption = QtGui.QTextOption()
textOption.setAlignment(QtCore.Qt.AlignCenter)
painter.drawText(QtCore.QRectF( pixmap.rect() ), QtCore.QString(str(self.BatteryLifePercent)), textOption)
self.trayIcon.setIcon(QtGui.QIcon(pixmap))
painter.end()
def closeEvent(self, event=None):
self.trayIcon.hide()
app = QtGui.QApplication(sys.argv)
main = testTrayIcon()
sys.exit(app.exec_())
Офлайн