PyQt --> connect() --> TypeError: Argumente, die nicht mit irgendeinem überladenen nennen
Habe ich Probleme mit der Verbindung() from PyQt4. Zum Beispiel hier .UI konvertiert pyuic4.
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(382, 258)
self.btnClearText = QtGui.QPushButton(Dialog)
self.btnClearText.setGeometry(QtCore.QRect(80, 220, 75, 23))
self.btnClearText.setObjectName(_fromUtf8("btnClearText"))
self.btnSetText = QtGui.QPushButton(Dialog)
self.btnSetText.setGeometry(QtCore.QRect(220, 220, 75, 23))
self.btnSetText.setObjectName(_fromUtf8("btnSetText"))
self.textEdit = QtGui.QTextEdit(Dialog)
self.textEdit.setGeometry(QtCore.QRect(10, 20, 361, 41))
self.textEdit.setObjectName(_fromUtf8("textEdit"))
self.textEdit_2 = QtGui.QTextEdit(Dialog)
self.textEdit_2.setGeometry(QtCore.QRect(10, 80, 361, 41))
self.textEdit_2.setObjectName(_fromUtf8("textEdit_2"))
self.label = QtGui.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(160, 170, 46, 13))
self.label.setObjectName(_fromUtf8("label"))
self.retranslateUi(Dialog)
QtCore.QObject.connect(self.btnSetText, QtCore.SIGNAL(_fromUtf8("released()")), self.textEdit_2.paste)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.btnClearText.setText(QtGui.QApplication.translate("Dialog", "Copy", None, QtGui.QApplication.UnicodeUTF8))
self.btnSetText.setText(QtGui.QApplication.translate("Dialog", "Paste", None, QtGui.QApplication.UnicodeUTF8))
self.textEdit.setHtml(QtGui.QApplication.translate("Dialog", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'MS Shell Dlg 2\'; font-size:8.25pt; font-weight:400; font-style:normal;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:8pt;\">ABC</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Dialog", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
Und .PY Datei-Auflistung. Bitte beachten Sie Doppel-kommentierte Zeile. Es gibt Fehler, aber theoretisch sollte es funktionieren.
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from simple import *
class MyApp(QtGui.QMainWindow, Ui_Dialog):
def __init__(self):
QtGui.QMainWindow.__init__(self)
Ui_Dialog.__init__(self)
self.setupUi(self)
## self.connect(self.btnClearText, QtCore.SIGNAL('clicked()'), self.label.setText('ABC'))
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
Was ich habe ist:
TypeError: arguments did not match any overloaded call:
QObject.connect(QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 3 has unexpected type 'NoneType'
Jede mögliche Hilfe würde geschätzt.
Vielen Dank Luke Woodward, hier ist eine richtige Variante.
class MyApp(QtGui.QMainWindow, Ui_Dialog):
def __init__(self):
QtGui.QMainWindow.__init__(self)
Ui_Dialog.__init__(self)
self.setupUi(self)
self.connect(self.btnClearText, QtCore.SIGNAL('clicked()'), self.setLabelText)
def setLabelText(self):
self.label.setText('ABC')
InformationsquelleAutor asv | 2011-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Fehler ist auf der Doppel-auskommentierte Zeile:
Sieht es aus wie Sie wollen, dass der text des Labels gesetzt
ABC
wenn der button angeklickt wird. Jedoch, der obigen code-Zeile wird nicht erreicht. Das problem ist, dass das Dritte argumentself.label.setText('ABC')
, der ausgewertet wird, wenn der Aufrufself.connect
gemacht wird, nicht, wenn das signal ausgelöst wird.Was du geschrieben hast, hat den gleichen Effekt wie
Den
setText
Methode wird immer wiederNone
, da gibt es nichts zu kehren. Die Fehlermeldung, die Sie erhalten, entsteht, weil PyQt nicht finden können, eine geeigneteconnect
Methode zu nennen, mit dem argument 3 eingestelltNone
- in der Tat, die letzten drei Zeilen in der Fehlermeldung alle erwähnen, die ein problem mit argument 3 undNoneType
- der 'Typ' derNone
.Was könnten Sie stattdessen tun ist, um Ihren code in einer Methode, z.B.:
Dann verwenden Sie diese Methode als argument 3 in der Aufforderung zur
self.connect
:Beachten Sie, dass, weil es keine
()
nach den Namen der Methode, wir nicht, das die Methode aufruft. Wir vorbei die Methode selbst zuself.connect
.Danke für den link - ich wusste nicht, über, die.
Vielen Dank! Ich habe post-Lösung in der zweiten Nachricht.
InformationsquelleAutor Luke Woodward