2016-04-06 10 views
1

Ich habe pyQt4 verwendet. Ich möchte pyQt5 konvertieren. aber ich konnte nicht old-style signal and slot in pyQt5 verwenden, weil pyQt5 nur new-style signal and slot unterstützt. Daher konnte ich keine Ereignisse von ActiveX empfangen.Wie erhalten Sie ActiveX-Ereignisse in pyQt5?

Bitte geben Sie mir eine Lösung.

Dieser Code ist pyQt4 Version.

from PyQt4.QtCore import SIGNAL, QObject 
from PyQt4.QAxContainer import QAxWidget 

class ActiveXExtend(QObject): 
    def __init__(self, view): 
     super().__init__() 
     self.view = view 
     self.ocx = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1") 

     # receive ActiveX event. 
     self.ocx.connect(self.ocx, SIGNAL("OnReceiveMsg(QString, QString, QString, QString)"), self._OnReceiveMsg) 

    # event handler 
    def _OnReceiveMsg(self, scrNo, rQName, trCode, msg): 
     print("receive event") 

Ich versuche, pyQt5 zu konvertieren.

from PyQt5.QtCore import QObject 
from PyQt5.QAxContainer import QAxWidget 

class ActiveXExtend(QObject): 

    def __init__(self, view): 
     super().__init__() 
     self.view = view 
     self.ocx = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1") 
     # receive ActiveX event. 
     # old-style is not supported. 
     # self.ocx.connect(self.ocx, SIGNAL("OnReceiveMsg(QString, QString, QString, QString)"), self._OnReceiveMsg) 

    # event handler 
     def _OnReceiveMsg(self, scrNo, rQName, trCode, msg): 
      print("receive event") 
+0

nur ein bisschen zu raten, aber würden Sie [verbinden Slots nach Name] in der Lage sein (http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html#connecting-slots-by-name) ? – ekhumoro

Antwort

2

Ich fand schließlich die Lösung. pyQt5 unterstützt Signale von ActiveX-Ereignissen.

Wenn ActiveX das Ereignis 'OnReceiveMsg' hat, unterstützt die QAxWidget-Instanz das Signal 'OnReceiveMsg'. Daher fixiere ich Code wie folgt.

from PyQt5.QtCore import QObject 
from PyQt5.QAxContainer import QAxWidget 

class ActiveXExtend(QObject): 

    def __init__(self, view): 
     super().__init__() 
     self.view = view 
     self.ocx = QAxWidget("KHOPENAPI.KHOpenAPICtrl.1") 
     # receive ActiveX event. 
     self.ocx.OnReceiveMsg[str,str,str,str].connect(self._OnReceiveMsg) 

    # event handler 
     def _OnReceiveMsg(self, scrNo, rQName, trCode, msg): 
      print("receive event")