2016-11-20 21 views
1

私はPyQt5を使って電卓を書いて​​いますが、ユーザーインターフェイスは終了しましたが、QLineEditの内容を変更するときに質問があります。変更する詳細な方法は、ユーザーがボタンを押したときにQLineEdit.setText()メソッドを呼び出すことです。プログラムの実行中にQPyLineEditの内容を変更するにはどうすればよいですか?

しかし、プッシュボタンを押すと、プログラムは終了し、「プロセスは終了コード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の属性を設定する必要があります。

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

を:

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

はまた、あなたはとてもdealDataは次のようになり、アペンド新しいテキストに必要どうもありがとうございました。しかし、私はコードを変更した後、問題がまだ発生しました。そして、 "self.numberEdit.setReadOnly(True)"を "self.numberEdit.setReadOnly(False)"に変更しようとしましたが、問題はまだ発生しました。 – user7102471

+0

@ user7102471これは 'setText'の代わりに' SetText'をタイプしたからです。とにかく、私は私の答えにもっと良い解決策を入れました。 – ekhumoro

+0

素晴らしい!できます!ご協力ありがとうございました! – user7102471

関連する問題