Python-PyQt界面开发入门-计算器例子

在编程过程中,为了程序代码的保密性或者程序的易用性,我们通常需要对编制的程序进行封装,同时,程序也需要提供用户界面,用于用户输入关键参数,或者导入关键文件,又或者是程序计算结果的输出。这篇文章将介绍一个简单的计算器的例子的开发,旨在提供一个简单的界面开发框架的例子。

一、软件配置

用PyQt5设计主题界面。所有的操作,代码编写均在pycharm下完成。首先安装配置环境:

(1)安装pycharm

https://www.jetbrains.com.cn/en-us/pycharm/download/?section=windows

对于初学者,选择社区版即可满足大部分的应用。

(2)相关Python库安装(加速可配置国内镜像)

pip install pyqt5

pip install pyqt5-tools

pip install pyqt5designer

(3)pycharm中引入外部工具

QtDesigner工具,用于编写ui文件,设计GUI界面(个人不喜欢调用,直接放桌面快捷方式)

pyuic配置,用于转换ui文件为py文件,配置方法如下:

File -> settings -> External tools -> :

Name:可以根据喜好自拟,示例定义为PyUIC.

Program:Pyuic5的安装路径,一般为Pyuic5库安装路径下的Scripts\pyuic5.exe

Arguments:FileName -o FileNameWithoutExtension.py

Working directory:FileDir

(4)designer.exe的路径:

D:\15python\00_library\venv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

上面的路径与开发者的项目文件夹路径相关,根据实际情况查找designer.exe的路径。最好是将上面的可执行文件在桌面建立一个快捷方式。

二、用 designer 设计一个简单的计算器界面

(1)在pycharm中建立一个项目,用来进行计算器的编程

(2)在designer中进行界面设计,对于一个典型的计算器,我们要实现+ - * /,还要有显示的,还要有清除功能和计算结果的按钮,统计如下:

数字键:0-9共10个,操作符:+ - * / = C共6个,则需要的PushButton控件为16个,LineEdit为1个。

(3)保存ui文件,此时,回到pycharm界面,进行如下的操作,将ui界面信息,转换为.py文件(选中UI文件,点击右键,外部工具pyUIC转换成py文件)

注意!注意!!请注意!!!------所有的UI操作、对UI的事件处理,都不能直接写到这个.py文件下,不能直接写!!!因为一旦你在designer.exe中对test.ui有任何的改变,都是需要重新使用pyuic才能将test.ui文件中的更改更新到.py文件中的,而更新后的.py会是一个新的.py文件,会将之前所有的,全部覆盖。如果一旦你在这里写了一些函数,或者是一些UI操作,全部都会被覆盖,消失不见。

这里我们需要对main.py文件进行修改,将ui的信息进行显示出来,代码如下:

class MyWindow(QMainWindow, Ui_MainWindow):

def init(self):

super(MyWindow, self).init()

self.setupUi(self)

####添加响应函数####

self.textEdit.append('1')

##################

if name == 'main':

app = QApplication(sys.argv)

win = MyWindow()

####添加信号槽####

win.pushButton.clicked.connect(win.ps_bt)

##################

win.show()

sys.exit(app.exec_())

二、添加计算器代码

(1)添加执行代码

def btnClear_clicked(self):

self.lineEdit.clear()

def btn1_clicked(self):

self.lineEdit.insert("1")

def btn2_clicked(self):

self.lineEdit.insert("2")

def btn3_clicked(self):

self.lineEdit.insert("3")

def btn4_clicked(self):

self.lineEdit.insert("4")

def btn5_clicked(self):

self.lineEdit.insert("5")

def btn6_clicked(self):

self.lineEdit.insert("6")

def btn7_clicked(self):

self.lineEdit.insert("7")

def btn8_clicked(self):

self.lineEdit.insert("8")

def btn9_clicked(self):

self.lineEdit.insert("9")

def btn0_clicked(self):

self.lineEdit.insert("0")

def btnPlus_clicked(self):

self.lineEdit.insert(" + ")

def btnSub_clicked(self):

self.lineEdit.insert(" - ")

def btnMul_clicked(self):

self.lineEdit.insert(" * ")

def btnDiv_clicked(self):

self.lineEdit.insert(" / ")

def btnEqual_clicked(self):

text = self.lineEdit.text()

self.lineEdit.insert(' = %.2f' % (eval(text))) ####计算字符串表达式

(2)响应button事件

win.btn_clear.clicked.connect(win.btnClear_clicked)

win.btn_1.clicked.connect(win.btn1_clicked)

win.btn_2.clicked.connect(win.btn2_clicked)

win.btn_3.clicked.connect(win.btn3_clicked)

win.btn_4.clicked.connect(win.btn4_clicked)

win.btn_5.clicked.connect(win.btn5_clicked)

win.btn_6.clicked.connect(win.btn6_clicked)

win.btn_7.clicked.connect(win.btn7_clicked)

win.btn_8.clicked.connect(win.btn8_clicked)

win.btn_9.clicked.connect(win.btn9_clicked)

win.btn_0.clicked.connect(win.btn0_clicked)

win.btn_plus.clicked.connect(win.btnPlus_clicked)

win.btn_sub.clicked.connect(win.btnSub_clicked)

win.btn_mul.clicked.connect(win.btnMul_clicked)

win.btn_div.clicked.connect(win.btnDiv_clicked)

win.btn_equal.clicked.connect(win.btnEqual_clicked)

阅读 197

相关推荐
小灰灰搞电子20 小时前
PyQt QDarkStyle详解-打造专业暗黑界面的瑞士军刀
pyqt·暗黑主题
懷淰メ2 天前
【AI加持】基于PyQt+YOLO+DeepSeek的车型检测系统(详细介绍)
yolo·目标检测·计算机视觉·pyqt·项目设计·deepseek·车型检测
淮北4943 天前
ubuntu22.04将mp4转换成gif
python·scrapy·flask·beautifulsoup·pyqt·matplotlib
懷淰メ4 天前
【AI加持】基于PyQt+YOLO+DeepSeek的口罩佩戴检测系统(详细介绍)
yolo·计算机视觉·pyqt·口罩检测·deepseek·ai加持
小灰灰搞电子6 天前
PyQt QWebChannel详解-C++与Web页面的无缝双向通信
前端·pyqt
小灰灰搞电子8 天前
PyQt QtAwesome详解:为Qt应用注入字体图标的魅力
pyqt·字体图标
DeepLearningYolo8 天前
基于PyQt的YOLOv5+DeepSORT可视化界面,可实现目标跟踪、模型更换、结果保存和轨迹隐藏等功能。
yolo·目标跟踪·pyqt
TRACER~8513 天前
项目实战:pyqt6实现拼豆图纸生成器
python·pyqt
龙腾AI白云22 天前
大模型Prompt实战:精准生成专业技术文档
plotly·pyqt·fastapi·tornado·dash