PyQt4 如何从QTextEdit获取文本及无法创建消息框

-1 投票
2 回答
658 浏览
提问于 2025-04-18 12:55

我正在用Python制作一个邮件客户端。现在我遇到了以下错误:

def egonder(self):
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    usrnam=self.ad.text()
    passwds=self.sifre.text()
    if usrnam=="" or passwds=="":
         QtGui.QMessageBox.warning("Fill every blank.")
    else:
        server.login(usrnam,passwds)
        self.durum.setText("Logging in...")
        mytext=""
        self.mesaj.setPlainText(mytext)
        msg = self.konu.text(),"\n",mytext
        server.sendmail(self.kimden.text(), self.kime.text(), msg)
        self.durum.setText("Email sent.")

它给了我以下错误:

  File "eposta.py", line 105, in egonder
    server.sendmail(self.kimden.text(), self.kime.text(), msg)
  File "/usr/lib/python3.4/smtplib.py", line 793, in sendmail
    (code, resp) = self.data(msg)
  File "/usr/lib/python3.4/smtplib.py", line 532, in data
    q = _quote_periods(msg)
  File "/usr/lib/python3.4/smtplib.py", line 168, in _quote_periods
    return re.sub(br'(?m)^\.', b'..', bindata)
  File "/usr/lib/python3.4/re.py", line 175, in sub
    return _compile(pattern, flags).sub(repl, string, count)
TypeError: expected string or buffer

当我尝试让消息框显示时,它又给了我一个错误:

QtGui.QMessageBox.warning("Fill every blank.")
TypeError: arguments did not match any overloaded call:
  QMessageBox.warning(QWidget, str, str, QMessageBox.StandardButtons     buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton):  argument 1 has unexpected type 'str'
QMessageBox.warning(QWidget, str, str, int, int, int button2=0): argument 1 has unexpected type 'str'
QMessageBox.warning(QWidget, str, str, str, str button1Text='', str button2Text='', int defaultButtonNumber=0, int escapeButtonNumber=-1): argument 1 has unexpected type 'str'

谢谢你

2 个回答

-1

好的,下面是代码:

QtGui.QMessageBox.warning(None, "Invalid input", "Fill every blank.")
1

错误 1

你写的这一行代码:msg = self.konu.text(),"\n",mytext

这段代码实际上是在创建一个字符串列表。如果你用print打印出来,你会看到类似这样的内容:

('Something', '\n', 'Something More')

但是,SMTP.sendmail需要的是一个字符串作为消息。所以你可以试试这样:

msg = "{0}\n{1}".format(self.konu.text(), mytext)

请查看关于SMTP.sendmailstring.format的文档

错误 2

你没有给QMessageBox传递所有必需的参数。至少需要提供消息框的父级、标题和消息。所以如果没有父级的话:

QtGui.QMessageBox.warning(None, "Invalid input", "Fill every blank.")

请查看文档

撰写回答