pyQT4

PyQT4, quelques trucs et astuces

Après avoir suivi précisément le tutoriel de kib2 : http://kib2.free.fr/pyqt4/pyqt4.html sur l’utilisation de QTDesigner et son intégration dans un projet PyQT4, je me suis trouvé confronté à un certain nombre de problèmes. Voici quelques unes des solutions trouvées

Trouver le système permettant de récupérer les coordonnées du survol de la souris dans un widget.

Mots clefs pour google : hover, onmousehover

En fait, ceci ce fait très simplement pourvu que l’on ait le bon mot clef, il suffit de créer un widget (un QLabel par exemple) qui possède la propriété setMouseTracking. Ensuite, les coordonnées sont gérés par l’évènement MouseMoveEvent.

class Survol(QtGui.QLabel):
def __init__(self, parent, app):
QtGui.QLabel.__init__(self,parent)
self.setMouseTracking(1)
def mouseMoveEvent(self, event):
print self.pos().x(), self.pos().y()

et voilà

Autre truc : Dbus et pyqt4.
objectif : repérer quand un appareil photo est branché et afficher son nom. (350D, powershot etc.)

import dbus, sys
import dbus.mainloop.qt

puis dans la boucle principale :
if __name__ == « __main__ »:

app = QApplication(sys.argv) #il faut absolument le faire avant !! sinon le loop dbus ne foncitonne pas
dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True)
windows = StartQT4()
windows.show()
sys.exit(app.exec_())

ensuite, il faut, dans un objet, faire un appel :
self.bus = dbus.SystemBus()
self.bus.add_signal_receiver(self.handle_signal, None, None, None)

ici la fonction appelée s’appelle handle_signal mais on peut la changer.

def handle_signal(self,*args):
#print ‘received signal:’, args
hal_manager_obj = self.bus.get_object(« org.freedesktop.Hal », « /org/freedesktop/Hal/Manager »)
hal_manager = dbus.Interface(hal_manager_obj, « org.freedesktop.Hal.Manager »)

#récupération de TOUS les devices connectés
device_names = hal_manager.GetAllDevices()
for name in device_names:
device_dbus_obj = self.bus.get_object(« org.freedesktop.Hal » ,name)
properties = device_dbus_obj.GetAllProperties(dbus_interface= »org.freedesktop.Hal.Device »)

#repère si il y a une « camera » dedans
if « camera » in properties[« info.capabilities »] :
# On peut voir grace à hal-device que c’est le parent qui a les attributs des noms
parent = properties[« info.parent »]
print parent
parent_obj = self.bus.get_object(« org.freedesktop.Hal » ,parent)
prop_parent = parent_obj.GetAllProperties(dbus_interface= »org.freedesktop.Hal.Device »)
self.name = prop_parent[« usb_device.product »]
self.connection = prop_parent[‘linux.subsystem’]