【问题标题】:How to change the content of QPyLineEdit when the program is running?程序运行时如何改变QPyLineEdit的内容?
【发布时间】:2016-11-20 23:43:14
【问题描述】:

我正在使用PyQt5编写一个计算器,用户界面已经完成,但是当我改变QLineEdit的内容时有一个问题。更改它的详细方法是在用户按下按钮时调用QLineEdit.setText() 方法。

但是当我按下按钮时,程序完成并显示如下消息:“进程完成,退出代码 1”。没有任何错误或警告信息。这是下面的完整程序:

# -*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import (QWidget, QGridLayout,
        QPushButton, QLineEdit, QVBoxLayout, QApplication, QMessageBox)


class Calculator(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # grid = QGridLayout()
        qvbox = QVBoxLayout()
        gridBar = QGridLayout()
        gridWidget = QWidget()

        numberEdit = QLineEdit()
        numberEdit.setReadOnly(True)

        names = ["Cls", "Bck", "", "Close",
                 "7", "8", "9", "/",
                 "4", "5", "6", "*",
                 "1", "2", "3", "-",
                 "0", ".", "=", "+"]

        position = [(i, j) for i in range(5) for j in range(4)]

        for position, name in zip(position, names):
            if name == "":
                continue
            button = QPushButton(name)
            gridBar.addWidget(button, *position)
            button.clicked.connect(self.buttonClicked)
        qvbox.addWidget(numberEdit)
        gridWidget.setLayout(gridBar)
        qvbox.addWidget(gridWidget)

        self.setLayout(qvbox)

        self.move(300, 150)
        self.setWindowTitle("Calculator")
        self.show()

    def buttonClicked(self):
        sender = self.sender()
        self.dealData(sender.text())

    def dealData(self, data):
        self.numberEdit.setText(data) # Here, the program exited!!!
        print(data) # The output in consle was right.

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Calculator()
    sys.exit(app.exec_())

我哪里做错了?

【问题讨论】:

    标签: python pyqt5 qlineedit


    【解决方案1】:

    您必须为numberEdit 设置一个属性,以便以后访问它:

    class Calculator(QWidget):
        ...    
        def initUI(self):
            ...
            self.numberEdit = QLineEdit()
            self.numberEdit.setReadOnly(True)
    

    另外,您需要追加新文本,所以dealData 应该如下所示:

        def dealData(self, data):
            self.numberEdit.end(False)
            self.numberEdit.insert(data)
            print(data) # The output in consle was right.
    

    【讨论】:

    • 非常感谢。但是我改了代码之后,问题还是出现了。我试着把代码“self.numberEdit.setReadOnly(True)”改成“self.numberEdit.setReadOnly(False)”,问题还是出现了。
    • @user7102471。那是因为您输入了 SetText 而不是 setText。无论如何,我在回答中提出了更好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多