[英]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_lbl
的QLabel
小部件,則會顯示結果。
它仍然沒有輸出任何結果
您的問題的根源在於以下幾行:
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.