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