2010-07-14 4 views
2

J'essaie de faire ma première application python. Je veux faire un simple formulaire d'expéditeur d'email. Dans concepteur qt créer un dialog.ui, puis générer dialog.py de dialog.ui et écrire il fonctionnepython Qt4 Comment lier l'action sur le bouton cliquez sur

def SendEmail(self,efrom,eto,esubj,ebody): 
    msg = MIMEText(ebody.encode('UTF-8'),'html', 'UTF-8') 
    msg['Subject'] = esubj 
    msg['From'] = efrom 
    msg['To'] = eto 
    s = smtplib.SMTP() 
    s.connect("mail.driversoft.net", 25) 
    s.login("[email protected]", "1234567") 
    s.sendmail(efrom, [eto], msg.as_string()) 
    s.quit() 

et essayez connecter à l'emplacement

QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.SendEmail("[email protected]", "[email protected]", "subject", "bodytext")) 

lorsque je tente commencer cette application , je ne vois pas une forme, sur mon e-mail un message relancer, et dans la console

Traceback (most recent call last): 
File "C:\Documents and Settings\a.ivanov\My Documents\Aptana Studio Workspace\test1\src\wxtest.py", line 61, in <module> 
ui.setupUi(Dialog) 
File "C:\Documents and Settings\a.ivanov\My Documents\Aptana Studio Workspace\test1\src\wxtest.py", line 33, in setupUi 
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.SendEmail("[email protected]", "[email protected]", "subject", "bodytext")) 
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 2 has unexpected type 'bytes' 

Comment puis-je faire une forme i wich j'ai écrit sujet et le texte puis appuyez sur le bouton Envoyer et recevoir un message par email? Merci!

code complet

from PyQt4 import QtCore, QtGui 
import smtplib 
from email.mime.text import MIMEText 

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(400, 330) 
     self.textEdit = QtGui.QTextEdit(Dialog) 
     self.textEdit.setGeometry(QtCore.QRect(10, 70, 381, 221)) 
     self.textEdit.setObjectName("textEdit") 
     self.subjEdit = QtGui.QLineEdit(Dialog) 
     self.subjEdit.setGeometry(QtCore.QRect(10, 30, 371, 20)) 
     self.subjEdit.setObjectName("subjEdit") 
     self.pushButton = QtGui.QPushButton(Dialog) 
     self.pushButton.setGeometry(QtCore.QRect(100, 300, 75, 23)) 
     self.pushButton.setObjectName("pushButton") 
     self.pushButton_2 = QtGui.QPushButton(Dialog) 
     self.pushButton_2.setGeometry(QtCore.QRect(210, 300, 75, 23)) 
     self.pushButton_2.setObjectName("pushButton_2") 
     self.label = QtGui.QLabel(Dialog) 
     self.label.setGeometry(QtCore.QRect(10, 10, 46, 13)) 
     self.label.setObjectName("label") 
     self.label_2 = QtGui.QLabel(Dialog) 
     self.label_2.setGeometry(QtCore.QRect(11, 53, 46, 13)) 
     self.label_2.setObjectName("label_2") 

     self.retranslateUi(Dialog)   
     QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL("clicked()"), Dialog.close)   
     QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.SendEmail("[email protected]", "[email protected]", "subject", "bodytext")) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

#this is my function 
    def SendEmail(self,efrom,eto,esubj,ebody): 
     msg = MIMEText(ebody.encode('UTF-8'),'html', 'UTF-8') 
     msg['Subject'] = esubj 
     msg['From'] = efrom 
     msg['To'] = eto 
     s = smtplib.SMTP() 
     s.connect("mail.driversoft.net", 25) 
     s.login("[email protected]", "1234567") 
     s.sendmail(efrom, [eto], msg.as_string()) 
     s.quit() 
     #print("done") 

    def retranslateUi(self, Dialog): 
     Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) 
     self.pushButton.setText(QtGui.QApplication.translate("Dialog", "Send", None, QtGui.QApplication.UnicodeUTF8)) 
     self.pushButton_2.setText(QtGui.QApplication.translate("Dialog", "Close", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label.setText(QtGui.QApplication.translate("Dialog", "Subject", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label_2.setText(QtGui.QApplication.translate("Dialog", "Email text", 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_()) 

Répondre

6
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.SendEmail("[email protected]", "[email protected]", "subject", "bodytext")) 

Il est comment le système fonctionne SIGNAL-SLOT. Votre signal "clicked()" n'a pas de paramètres - donc votre slot ne doit pas avoir de paramètres. Et vous devez passer une référence à callback, ne pas appeler cette fonction dans connect.

QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.pushButtonClicked) 

def pushButtonClicked(self): 
    self.SendEmail("[email protected]", "[email protected]", "subject", "bodytext") 
+1

merci beaucoup! maintenant ça marche bien! – driver

Questions connexes