私のアプリケーションが終了するだけで右クリックしてトレイアイコンを、そして「終了」を押すことによって:以下問題 - SLOT、aboutToQuit()
class DialogUIAg(QDialog):
...
self.quitAction = QAction("&Quit", self, triggered=qApp.quit)
モジュールは、アプリケーションの出発点である:
#!/usr/bin/env python
import imgAg_rc
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import appLogger
from runUIAg import *
class Klose:
""" Not sure if i need a Class for it to work"""
def closingStuff(self):
print("bye")
@pyqtSlot()
def noClassMethod():
print("bye-bye")
app = QApplication(sys.argv)
QApplication.setQuitOnLastWindowClosed(False)
k = Klose()
app.connect(app, SIGNAL("aboutToQuit()"), k,SLOT("closingStuff()")) #ERROR
app.connect(app, SIGNAL("aboutToQuit()"), k.closingStuff) # Old-Style
app.connect(app, SIGNAL("aboutToQuit()"), noClassMethod) # Old-Style
app.aboutToQuit.connect(k.closingStuff) # New-Style
app.aboutToQuit.connect(noClassMethod) # New-Style
winUIAg = DialogUIAg()
winUIAg.show()
app.exec_()
私の意図は、アプリケーションがaboutToQuitであるときに、コードのブロックを実行することです。
これは私が取得していますエラーです:
$ ./rsAg.py
Traceback (most recent call last):
File "./rsAgent.py", line 20, in <module>
app.connect(app, SIGNAL("aboutToQuit()"), k,SLOT("closingStuff()"))
TypeError: arguments did not match any overloaded call:
QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'Klose'
QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'Klose'
QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'Klose'
私は、PythonとQtに新しいですし、私はあなたの助けをいただければ幸いです。
EDIT:私たちは、スロットを定義するクラスを必要といけない
- 。任意の方法は、
@pyqtSlot()
デコレータを使用して、Slotにすることができます。 - コードにnoClassMethod()を追加しました。
- @Mat、あなたの提案は私がさらに助けになりました。今私はそれをやっている3つの方法を見つけた。私は約旧スタイル対新しいスタイルを推測する。
- 将来の可能性のある読者のために、エラーメッセージは削除しません。
PyQtは信号/スロット構文はC++ものと全く同じではありません
、スロットは、Python関数(クラスは必要ではない)とすることができます。ドキュメント:http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/old_style_signals_slots.html#connecting-signals-and-slots – pedrotech