剩下計算函數(self.calculator)未實現,有興趣的朋友可以實現它
【知識點】
1、利用循環添加按鈕部件,及給每個按鈕設置信號/槽
2、給按鈕設置固定大小:button.setFixedSize(QtCore.QSize(60,30))
3、取事件的的發送者(此例為各個按鈕)的文本: self.sender().text()
【效果圖】
【源代碼】
1 import sys 2 from PyQt5 import QtWidgets,QtCore,QtGui 3 4 5 class Example(QtWidgets.QWidget): 6 7 def __init__(self): 8 super(Example, self).__init__() 9 self.initUI() 10 11 self.reset() 12 13 def initUI(self): 14 self.setWindowTitle('簡易計算器') 15 grid = QtWidgets.QGridLayout() 16 17 self.display = QtWidgets.QLineEdit('0') 18 self.display.setFont(QtGui.QFont("Times", 20)) 19 self.display.setReadOnly(True) 20 self.display.setAlignment(QtCore.Qt.AlignRight) 21 self.display.setMaxLength(15) 22 grid.addWidget(self.display,0,0,1,4) 23 24 names = ['Clear', 'Back', '', 'Close', 25 '7', '8', '9', '/', 26 '4', '5', '6', '*', 27 '1', '2', '3', '-', 28 '0', '.', '=', '+'] 29 pos = [(0, 0), (0, 1), (0, 2), (0, 3), 30 (1, 0), (1, 1), (1, 2), (1, 3), 31 (2, 0), (2, 1), (2, 2), (2, 3), 32 (3, 0), (3, 1), (3, 2), (3, 3 ), 33 (4, 0), (4, 1), (4, 2), (4, 3)] 34 c = 0 35 for name in names: 36 button = QtWidgets.QPushButton(name) 37 button.setFixedSize(QtCore.QSize(60,30)) 38 button.clicked.connect(self.buttonClicked) # 給每個按鈕設置信號/槽 39 if c == 2: 40 pass 41 #grid.addWidget(QtWidgets.QLabel(''), 0, 2) #替換 第三個按鈕 為 文本標簽! 42 else: 43 grid.addWidget(button, pos[c][0]+1, pos[c][1]) 44 c = c + 1 45 46 self.setLayout(grid) 47 48 49 50 51 def buttonClicked(self): 52 #sender = self.sender(); # 確定信號發送者 53 #self.display.setText(sender.text()) 54 text = self.sender().text() 55 if text in '+-*/': 56 self.history.append(self.number) # 數字入棧 57 self.history.append(text) # 運算符入棧 58 self.operator = text # 設置當前運算符 59 self.number = "" # 數字清空 60 self.numberType = "int" 61 return 62 elif text == "=": 63 self.calculate() # 計算 64 elif text == "Back": 65 pass 66 elif text == "Clear": 67 self.reset() 68 elif text == "Close": 69 self.close() 70 elif text == ".": 71 if self.numberType == "int": 72 self.number += text 73 self.numberType = "float" 74 else: 75 self.number = self.number + text if self.number != "0" else text 76 77 self.display.setText(self.number) 78 79 def calculate(self): 80 pass 81 82 def reset(self): 83 self.number = "0" 84 self.result = 0 85 self.history = [] 86 self.operator = '' # +,-,*,/ 87 self.numberType = 'int' # int與float兩種,如果輸入了小數點則為實數 88 89 app = QtWidgets.QApplication(sys.argv) 90 ex = Example() 91 ex.show() 92 sys.exit(app.exec_())