簡體   English   中英

如何在pyQt4 python中將QTextedit的輸入轉換為int

[英]How to convert QTextedit's input to int in pyQt4 python

當我從 tkinter 過渡時,我對 pyqt 相當陌生。 我只想詢問兩個數字,然后單擊“SUM”按鈕將兩個數字相加並在 gui 上顯示輸出,但我不斷收到諸如“無法將 str 轉換為 int”之類的錯誤,或者有時它根本不輸出任何內容。 我覺得我必須將從 QTextedit 獲得的輸入轉換為 int 或 float 但我已經嘗試了我知道的所有可能的方法。 我錯過了什么?

代碼如下

import sys
from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Form(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.setupUi(self)
        QtGui.QApplication.setStyle(QtGui.QStyleFactory.create("Plastique"))
    def setupUi(self, Form):
        Form.setObjectName(_fromUtf8("Form"))
        Form.resize(400, 300)
        self.sum_button = QtGui.QPushButton(Form)
        self.sum_button.setGeometry(QtCore.QRect(10, 20, 75, 23))
        self.sum_button.setObjectName(_fromUtf8("sum_button"))
        self.sum_button.clicked.connect(self.action)

        self.text1 = QtGui.QTextEdit(Form)
        self.text1.setGeometry(QtCore.QRect(110, 10, 104, 71))
        self.text1.setObjectName(_fromUtf8("text1"))
        self.texxt1 = self.text1.toPlainText()

        self.text2 = QtGui.QTextEdit(Form)
        self.text2.setGeometry(QtCore.QRect(110, 140, 104, 71))
        self.text2.setObjectName(_fromUtf8("text2"))
        self.texxt2 = self.text2.toPlainText()

        self.clear = QtGui.QPushButton(Form)
        self.clear.setGeometry(QtCore.QRect(20, 140, 75, 23))
        self.clear.setObjectName(_fromUtf8("clear"))

        self.retranslateUi(Form)
        QtCore.QObject.connect(self.clear, QtCore.SIGNAL(_fromUtf8("clicked()")), self.text2.clear)
        QtCore.QObject.connect(self.clear, QtCore.SIGNAL(_fromUtf8("clicked()")), self.text1.clear)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def action(self):
        self.tex = self.texxt1
        self.ij = self.texxt2
        self.l = self.tex + self.ij
        QtGui.QLabel(self.l,self)

    def retranslateUi(self, Form):
        Form.setWindowTitle(_translate("Form", "Form", None))
        self.sum_button.setText(_translate("Form", "sum", None))
        self.clear.setText(_translate("Form", "clear", None))

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    ex = Ui_Form()
    ex.show()
    sys.exit(app.exec_())

你有這個:

self.texxt1 = self.text1.toPlainText()
# ...
self.texxt2 = self.text2.toPlainText()

然后,在你的動作處理程序中,你有這個:

def action(self):
    self.tex = self.texxt1
    self.ij =  self.texxt2
    self.l = self.tex + self.ij
    QtGui.QLabel(self.l,self)

首先,不是嘗試將字符串相加,而是需要將值轉換為整數。 例如:

total = int(self.texxt1) + int(self.texxt2)

您應該檢查異常,以防輸入不是數字。

然后,您的處理程序中有這一行:

QtGui.QLabel(self.l,self)

此行創建一個新標簽。 無需創建新標簽,只需在您的 GUI 中獲取一個預先存在的標簽,並使用它的setText方法來顯示結果。 例如:

self.result_lbl.setText('{:,}'.format(total))

如果您有一個名為result_lblQLabel小部件,則會顯示結果。


更新

它仍然沒有輸出任何結果

您的問題的根源在於以下幾行:

self.texxt1 = self.text1.toPlainText()
# ...
self.texxt2 = self.text2.toPlainText()

請注意,您試圖在 UI 初始化期間獲取QTextEdit小部件的內容,這是用戶有機會輸入任何內容之前。 然后您嘗試使用空字符串進行計算,這將永遠無法工作。 (順便說一句,我認為有更好的小部件選擇,例如QLineEdit

相反,您需要等到用戶按下“求和”按鈕才能完成工作。 只有在這一點上,可以合理地預期用戶會輸入某些內容。

例如,假設您已按照我的建議添加了結果標簽result_lbl ,您會看到如下內容:

def action(self):
    val1 = int(self.text1.toPlainText())
    val2 = int(self.text2.toPlainText())
    self.result_lbl.setText(_fromUtf8("<b>Result:</b> {:,}".format(val1 + val2)))

要添加QLabel ,請將此代碼片段添加到您的setupUi方法中:

self.result_lbl = QtGui.QLabel(Form)
self.result_lbl.setGeometry(QtCore.QRect(20, 250, 75, 23))
self.result_lbl.setObjectName(_fromUtf8("result_lbl"))
self.result_lbl.setText(_fromUtf8("<b>Result:</b>"))

這已經過測試(使用 Python3)作為對您最初發布的代碼的修改,並且可以正常工作。 如果它不適合你,你需要重新檢查你的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM