Je souhaite avoir une icône de barre d'état pour me dire si mon port COM est branché ou non. Il devrait changer toutes les 5 secondes en fonction de l'état du port COM. Je veux aussi la possibilité de tuer le programme en utilisant le menu contextuel de l'icône de la barre d'état. J'ai compris comment avoir le rafraîchissement ou le menu, mais je ne sais pas comment avoir les deux.Filetage pour l'application de l'icône de la barre d'état
import sys
import glob
import serial
import time
from PyQt4 import QtGui, QtCore
import sys
import threading
from multiprocessing import Process, Queue
#script needing python 3.4 , pyserial (via pip) and pyqt4 (via .exe available online)
def serial_ports():
if sys.platform.startswith('win'):
ports = ['COM' + str(i + 1) for i in range(256)]
result = []
for port in ports:
try:
s = serial.Serial(port)
s.close()
result.append(port)
except (OSError, serial.SerialException):
pass
return result
class SystemTrayIcon(QtGui.QSystemTrayIcon):
def __init__(self, icon, parent=None):
QtGui.QSystemTrayIcon.__init__(self, icon, parent)
menu = QtGui.QMenu(parent)
changeicon = menu.addAction("Update")
exitAction = menu.addAction("Exit")
self.setContextMenu(menu)
exitAction.triggered.connect(QtGui.qApp.quit)
changeicon.triggered.connect(self.updateIcon)
def updateIcon(self):
resultats = serial_ports()
icone = "red.ico"
for resultat in resultats:
if "COM3" in resultat:
icone = "green.ico"
break
self.setIcon(QtGui.QIcon(icone))
#update the icon (its color) according to the content of "resultat"
#missing code; purpose : wait 5 seconds while having the contextual menu of the tray icon still available
def main():
app = QtGui.QApplication(sys.argv)
w = QtGui.QWidget()
trayIcon = SystemTrayIcon(QtGui.QIcon("red.ico"), w)
#always starts with red icon
trayIcon.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Vous pouvez essayer un 'QTimer' et peut-être éviter de filetage tout à fait. – 101
Salut, j'ai du mal à l'implémenter, je suis venu avec ça jusqu'à maintenant: 'timer. = QtCore.QTimer() ' ' timer.timeout.connect (self.updateIcon) ' ' timer.start (5000) ' Je ne sais pas où le mettre ou comment je devrais" l'activer ". Bonne avance cependant. –
nvm, j'ai découvert –