(1) 导入所需的库和模块。
(2) 创建一个名为`Calculator`的类,继承自`QMainWindow`。
(3) 在`Calculator`类的`__init__`方法中,调用`initUI`方法初始化界面。
(4) 在`initUI`方法中,设置窗口标题和大小,创建显示结果的文本框,并调用`create_buttons`方法创建按钮。
(5) 在`create_buttons`方法中,创建数字按钮、运算符按钮、清除按钮和等号按钮,并将它们添加到网格布局中。
(6) 为每个按钮设置信号槽,以便在点击按钮时执行相应的操作。
(7) 在`on_number_click`、`on_operator_click`、`on_clear_click`和`on_equal_click`方法中,分别处理数字按钮、运算符按钮、清除按钮和等号按钮的点击事件。
(8) 在主程序中,创建`Calculator`实例并运行应用。
- import sys
-
- from PyQt5.QtWidgets import QApplication, QMainWindow, QLineEdit, QPushButton, QGridLayout, QWidget
-
- class Calculator(QMainWindow):
- def __init__(self):
- super().__init__()
-
- # 初始化界面
- self.initUI()
-
- def initUI(self):
- # 设置窗口标题和大小
- self.setWindowTitle('简易计算器')
- self.setGeometry(300, 300, 300, 300)
- # 创建显示结果的文本框
- self.result_display = QLineEdit(self)
- self.result_display.setReadOnly(True) # 设置为只读
- self.result_display.move(10, 10)
- self.result_display.resize(280, 40)
-
- # 创建按钮并设置信号槽
- self.create_buttons()
- # 显示窗口
- self.show()
-
- def create_buttons(self):
- # 创建数字按钮
- self.num_buttons = []
- for i in range(10):
- button = QPushButton(str(i), self)
- button.clicked.connect(self.on_number_click)
- self.num_buttons.append(button)
- # 创建运算符按钮
- self.add_button = QPushButton('+', self)
- self.add_button.clicked.connect(self.on_operator_click)
- self.subtract_button = QPushButton('-', self)
- self.subtract_button.clicked.connect(self.on_operator_click)
- self.multiply_button = QPushButton('*', self)
- self.multiply_button.clicked.connect(self.on_operator_click)
- self.divide_button = QPushButton('/', self)
- self.divide_button.clicked.connect(self.on_operator_click)
-
- # 创建清除按钮
- self.clear_button = QPushButton('C', self)
- self.clear_button.clicked.connect(self.on_clear_click)
- # 创建等号按钮
- self.equal_button = QPushButton('=', self)
- self.equal_button.clicked.connect(self.on_equal_click)
- # 使用网格布局排列按钮
- grid = QGridLayout()
- grid.setSpacing(5)
- positions = [(i, j) for i in range(1, 5) for j in range(4)]
- for pos, button in zip(positions, self.num_buttons[1:] + [self.num_buttons[0], self.add_button, self.subtract_button, self.multiply_button, self.divide_button, self.clear_button, self.equal_button]):
- grid.addWidget(button, *pos)
- central_widget = QWidget(self)
- central_widget.setLayout(grid)
- central_widget.move(10, 60)
- central_widget.resize(280, 230)
-
- def on_number_click(self):
- # 数字按钮点击事件处理
- button = self.sender()
- self.result_display.setText(self.result_display.text() + button.text())
-
- def on_operator_click(self):
- # 运算符按钮点击事件处理
- button = self.sender()
- self.result_display.setText(self.result_display.text() + ' ' + button.text() + ' ')
-
- def on_clear_click(self):
- # 清除按钮点击事件处理
- self.result_display.clear()
-
- def on_equal_click(self):
- # 等号按钮点击事件处理
- try:
- result = eval(self.result_display.text())
- self.result_display.setText(str(result))
- except:
- self.result_display.setText('错误')
-
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- calculator = Calculator()
- sys.exit(app.exec_())