pyqt4 button-Klick-handler
Ich habe ein problem usin pyqt4:
hier ist der code, den ich verwende, der Punkt ist, dass, wenn in der Ereignis-handler für das pushOk button geklickt wurde, ich nenne chiedi_numeri() es nicht zeigen Sie mir eine form zu bringen, und wenn ich rufe, chiedi_numeri() er sagt, dass argument 3 og QObjectConnect hat einen ungültigen Typ. wie kann ich es lösen?
Dank
class Ui_dialog(object):
def setupUi(self, dialog):
dialog.setObjectName("dialog")
dialog.resize(400, 300)
self.pushOk = QtGui.QPushButton(dialog)
self.pushOk.setGeometry(QtCore.QRect(200, 150, 75, 23))
self.pushOk.setObjectName("pushOk")
self.radioButton = QtGui.QRadioButton(dialog)
self.radioButton.setEnabled(True)
self.radioButton.setGeometry(QtCore.QRect(60, 40, 261, 18))
self.radioButton.setChecked(True)
self.radioButton.setObjectName("radioButton")
self.radioButton_2 = QtGui.QRadioButton(dialog)
self.radioButton_2.setGeometry(QtCore.QRect(60, 70, 281, 18))
self.radioButton_2.setObjectName("radioButton_2")
self.radioButton_3 = QtGui.QRadioButton(dialog)
self.radioButton_3.setGeometry(QtCore.QRect(60, 100, 281, 18))
self.radioButton_3.setObjectName("radioButton_3")
self.labelRisultato = QtGui.QLabel(dialog)
self.labelRisultato.setGeometry(QtCore.QRect(70, 200, 261, 51))
self.labelRisultato.setObjectName("labelRisultato")
self.retranslateUi(dialog)
QtCore.QMetaObject.connectSlotsByName(dialog)
def retranslateUi(self, dialog):
dialog.setWindowTitle(QtGui.QApplication.translate("dialog", "Fibonacci", None, QtGui.QApplication.UnicodeUTF8))
self.pushOk.setText(QtGui.QApplication.translate("dialog", "Ok", None, QtGui.QApplication.UnicodeUTF8))
self.radioButton.setText(QtGui.QApplication.translate("dialog", "Calcola la serie di Fibonacci", None, QtGui.QApplication.UnicodeUTF8))
self.radioButton_2.setText(QtGui.QApplication.translate("dialog", "Calcola la serie di Fibonacci in un intervallo", None, QtGui.QApplication.UnicodeUTF8))
self.radioButton_3.setText(QtGui.QApplication.translate("dialog", "Calcola l\'ennesimo elemento della serie di Fibonacci", None, QtGui.QApplication.UnicodeUTF8))
def fibonacci():
a , b = 0, 1
while 1:
a, b = b, a + b
yield a
def chiedi_numeri():
try:
max_ = int(raw_input("Inserisci un numero: "))
if max_ <= 0 :
print "Il numero", max_, "non e' positivo!"
else:
start = 0
for i in fibonacci():
if start > max_:
break
else:
start += 1
if start == max_:
print "Il", max_, "numero della sequenza di Fibonacci e'", i
except ValueError:
print "Non hai inserito un numero!"
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
dialog = QtGui.QDialog()
ui = Ui_dialog()
ui.setupUi(dialog)
app.connect(ui.pushOk, Qt.SIGNAL("clicked()"), chiedi_numeri())
dialog.show()
sys.exit(app.exec_())
InformationsquelleAutor andrea | 2011-05-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine Verbindung ein Signal an eine python-Funktion übergeben Sie die function-Objekt. In anderen Worten, Sie weglassen nachgestellten Klammern, da Sie auf der Durchreise sind, die Funktion nicht aufrufen. Versuchen Sie, die Linie zu Lesen
app.connect(ui.pushOk, Qt.SIGNAL("clicked()"), chiedi_numeri)
InformationsquelleAutor Stephen Terry
Eine Sache, die Sie tun falsch ist, ist in dieser Zeile:
Möchten Sie diese Funktion ausführen, wenn der button geklickt wird, nicht wenn die Verbindung hergestellt ist. Um das zu tun, entfernen Sie die Klammern nach
chiedi_numeri
:Sollte, dann verbinden Sie Ihre Schaltfläche korrekt.
Allerdings bin ich mir nicht sicher, was du meinst mit dem folgenden:
Was meinst du mit "form"? Erwarten Sie ein weiteres Fenster, um pop-up und bitten Sie um eine Zahl? Im moment ist Ihr Programm fragt nach einer Zahl in das terminal/shell/Konsole Fenster, von dem Sie die Anwendung gestartet.
InformationsquelleAutor Luke Woodward
from PyQt4 import QtCore, QtGui
von PyQt4.QtCore import *
von PyQt4.QtGui import *
versuchen:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
_fromUtf8 = lambda s: s
Klasse Ui_Dialog(object):
def setupUi(self, dialog):
dialog.setObjectName(_fromUtf8("dialog"))
dialog.resize(600, 400)
selbst.pushOk = QtGui.QPushButton(dialog -)
selbst.pushOk.setGeometry(QtCore.QRect(200, 150, 75, 23))
selbst.pushOk.setObjectName("pushOk")
Klasse StaxQT4(QtGui.QDialog):
def init(self):
def fibonacci(self):
a , b = 0, 1
beim 1:
a, b = b, a + b
die Ausbeute eines
def chiedi_numeri(self):
versuchen:
measure_name = int(self.ui.das Eingabefeld.text())
wenn measure_name <= 0 :
selbst.ui.das Eingabefeld.setText( "Il numero %s non e' positivo!" % str(measure_name) )
sonst:
start = 0
for i in self.fibonacci():
wenn start - > measure_name:
Pause
sonst:
start += 1
wenn start == measure_name:
selbst.ui.textEdit.setText("Il %s numero della sequenza di Fibonacci-e'" % str(measure_name))
selbst.ui.textEdit.append(str(i))
except ValueError:
selbst.ui.das Eingabefeld.settext("Non hai inserito un numero!")
wenn Namen == "main":
import sys
app = QtGui.QApplication(sys.argv)
InformationsquelleAutor dero