2016-11-20 30 views
1

我正在用PyQt5編寫一個計算器,用戶界面已經完成,但是當我改變QLineEdit的內容時有一個問題。改變它的細節方法是當用戶按下按鈕時調用QLineEdit.setText()方法。如何在程序運行時更改QPyLineEdit的內容?

但是當我按下PushButton時,程序結束並顯示如下消息:「Process completed with exit code 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_()) 

我在哪裏犯了一個錯誤?

回答

0

您必須設置一個屬性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. 
+0

非常感謝你。但是,當我更改代碼後,問題仍然發生。而且我試圖將代碼「self.numberEdit.setReadOnly(True)」更改爲「self.numberEdit.setReadOnly(False)」,問題仍然存在。 – user7102471

+0

@ user7102471。那是因爲你輸入了「SetText」而不是「setText」。無論如何,我已經在我的回答中提出了更好的解決方案。 – ekhumoro

+0

太棒了!有用!感謝您的幫助! – user7102471

相關問題