目錄
一、環(huán)境配置:
二、代碼實現(xiàn)
三、主程序
四、總結(jié)
????????本文使用PyQt5設(shè)計一款簡單的計算器,可以通過界面交互實現(xiàn)加減乘除的功能,希望能夠給初學(xué)者一些幫助。主要涉及的知識點有類的定義與初始化、類的成員函數(shù)、pyqt5的信號與槽函數(shù)等。
具體界面如下:
一、環(huán)境配置:
使用pip指令安裝pyqt5,此處選擇5.12.0版本,因為筆者安裝的spyder版本為4.1.5,過高的版本不兼容:
pip install PyQt5==5.12.0 -i https://pypi.douban.com/simple
pip install PyQt5-tools -i https://pypi.douban.com/simple
pip install PyQt5designer -i https://pypi.douban.com/simple
二、代碼實現(xiàn)
1、引入依賴庫。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QLineEdit, QPushButton
from PyQt5.QtCore import Qt
2、定義計算器(Calculator)類,成員函數(shù)的功能如下表所示。
函數(shù)名稱 | 函數(shù)功能 |
__init__() |
初始化函數(shù),初始化窗口名稱、尺寸、按鈕名稱、位置、信號響應(yīng)函數(shù)等。 |
button_click(self, number) |
選擇數(shù)字與小數(shù)點 |
button_clear(self) |
實現(xiàn)屏幕以及緩存清空的功能 |
button_add(self) |
實現(xiàn)兩個數(shù)相加的功能 |
button_subtract(self) |
實現(xiàn)兩個數(shù)相減的功能 |
button_multiply(self) |
實現(xiàn)兩個數(shù)相乘的功能 |
button_divide(self) |
實現(xiàn)兩個數(shù)相除的功能 |
button_equal(self) |
首先判斷執(zhí)行的運算操作,調(diào)用對應(yīng)的函數(shù)進行計算,并將結(jié)果顯示在文本框中 |
class Calculator(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("計算器")
self.setFixedSize(300, 350) # 固定窗口大小
central_widget = QWidget(self)
self.setCentralWidget(central_widget)
main_layout = QGridLayout()
central_widget.setLayout(main_layout)
# 添加文本框
self.screen = QLineEdit()
self.screen.setFixedHeight(40)
self.screen.setAlignment(Qt.AlignRight)
self.screen.setReadOnly(True)
main_layout.addWidget(self.screen, 0, 0, 1, 4)
# 添加按鈕
button_1 = QPushButton("1", clicked=lambda: self.button_click("1"))
button_2 = QPushButton("2", clicked=lambda: self.button_click("2"))
button_3 = QPushButton("3", clicked=lambda: self.button_click("3"))
button_4 = QPushButton("4", clicked=lambda: self.button_click("4"))
button_5 = QPushButton("5", clicked=lambda: self.button_click("5"))
button_6 = QPushButton("6", clicked=lambda: self.button_click("6"))
button_7 = QPushButton("7", clicked=lambda: self.button_click("7"))
button_8 = QPushButton("8", clicked=lambda: self.button_click("8"))
button_9 = QPushButton("9", clicked=lambda: self.button_click("9"))
button_0 = QPushButton("0", clicked=lambda: self.button_click("0"))
button_add = QPushButton("+", clicked=self.button_add)
button_subtract = QPushButton("-", clicked=self.button_subtract)
button_multiply = QPushButton("*", clicked=self.button_multiply)
button_divide = QPushButton("/", clicked=self.button_divide)
button_clear = QPushButton("清除", clicked=self.button_clear)
button_equal = QPushButton("=", clicked=self.button_equal)
main_layout.addWidget(button_7, 1, 0)
main_layout.addWidget(button_8, 1, 1)
main_layout.addWidget(button_9, 1, 2)
main_layout.addWidget(button_divide, 1, 3)
main_layout.addWidget(button_4, 2, 0)
main_layout.addWidget(button_5, 2, 1)
main_layout.addWidget(button_6, 2, 2)
main_layout.addWidget(button_multiply, 2, 3)
main_layout.addWidget(button_1, 3, 0)
main_layout.addWidget(button_2, 3, 1)
main_layout.addWidget(button_3, 3, 2)
main_layout.addWidget(button_subtract, 3, 3)
main_layout.addWidget(button_0, 4, 0)
main_layout.addWidget(button_clear, 4, 1, 1, 2)
main_layout.addWidget(button_add, 4, 3)
main_layout.addWidget(button_equal, 5, 0, 1, 4)
# 初始化變量
self.first_num = None
self.operation = None
def button_click(self, number):
current = self.screen.text()
self.screen.setText(current + number)
def button_clear(self):
self.screen.clear()
self.first_num = None
self.operation = None
def button_add(self):
self.first_num = float(self.screen.text())
self.screen.clear()
self.operation = "add"
def button_subtract(self):
self.first_num = float(self.screen.text())
self.screen.clear()
self.operation = "subtract"
def button_multiply(self):
self.first_num = float(self.screen.text())
self.screen.clear()
self.operation = "multiply"
def button_divide(self):
self.first_num = float(self.screen.text())
self.screen.clear()
self.operation = "divide"
def button_equal(self):
second_num = float(self.screen.text())
self.screen.clear()
if self.operation == "add":
result = self.first_num + second_num
elif self.operation == "subtract":
result = self.first_num - second_num
elif self.operation == "multiply":
result = self.first_num * second_num
elif self.operation == "divide":
if second_num == 0:
result = "除數(shù)不能為 0"
else:
result = self.first_num / second_num
self.screen.setText(str(result))
三、主程序
主程序首先創(chuàng)建窗口對象,接著創(chuàng)建計算器對象并顯示窗口,最后設(shè)定終止條件。
if __name__ == "__main__":
app = QApplication(sys.argv)
calc = Calculator()
calc.show()
sys.exit(app.exec_())
四、總結(jié)
這個計算器的優(yōu)點:
- 采用了PyQt5模塊和Python語言進行設(shè)計,實現(xiàn)較為簡單,易于理解和修改。
- 可以進行基本運算操作,包括加、減、乘、除等。
這個計算器的缺點:文章來源:http://www.zghlxwxcb.cn/news/detail-434879.html
- 功能較為簡單,只能進行基礎(chǔ)的數(shù)學(xué)運算,無任何高級功能。
- 輸入輸出僅支持?jǐn)?shù)字和基本的加減乘除運算符號,不支持其他字符、函數(shù)或變量。
- 在除數(shù)為0時無法做出錯誤提示,故看起來好像可以除以0一樣。
綜上所述,該計算器適合作為一個小型的實驗項目或界面設(shè)計入門示例,但是并不夠強大,不能滿足更多復(fù)雜應(yīng)用場景的需求。文章來源地址http://www.zghlxwxcb.cn/news/detail-434879.html
到了這里,關(guān)于使用PyQt5設(shè)計一款簡單的計算器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!