文章目录
- 1.1 打开软件design.exe
- 1.2 界面设计
- 1.3 ui转.py类
写在前面
不知道干啥, 所以想起本科的时候常常使用Qt-C++做上位机还有趣, 想着现在全都是用python罗列代码, 能不能结合python跟Qt界面做上位机或者开发界面软件, 找了一下还真有
本文目的是为了了解Qt+python结合开发界面软件的技巧,不是为了完成计算器的算法,所以希望读者注重重点
搬山道人登场
吐槽一下,python的那个xx界面实在是太丑了,仿佛回到xp时代
- 环境
win10, python3.6 - python包安装
pip install PyQt5
- qt design.exe
这个需要安装Anconda, 自带的一个插件, 当然不想安装的话可以直接上网下载独立的design.exe软件
1 界面ui设计
1.1 打开软件design.exe

1.2 界面设计


保存后是个这

1.3 ui转.py类
注意这时候python包中的pyuic5.exe能够将ui转化为对应的py文件类


2 代码
这里就要了解Qt的知识了, Qt的核心是信号与槽, 其实就是一个控件被操作了点啥, 触发了一系列的操作
pushButton_add.pressed.connect(function) 表示按钮被按下,激活函数function
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import operator # python内置包, 包含各类计算
from MainWindow import Ui_Dialog # 刚设计的UI
# Calculator state.
class MainWindow(QMainWindow, Ui_Dialog): # 类继承于ui
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setupUi(self) # 这是初始化ui上的控件
self.show() # 显示UI, 可以在主函数中加入window.show()
# Setup numbers.
for n in range(0, 10): # 与10个数字按键建立联系, 每次按一个按键, 连接到输入的显示当中
getattr(self, 'pushButton_%s' % n).pressed.connect(lambda v=n:self.input_number(v))
# getattr(类, 属性值) 获取属性值 , 按钮%s的属性值按下后连接到对应的值
#
# Setup operations.
self.pushButton_add.pressed.connect(lambda: self.operation(operator.add))
self.pushButton_sub.pressed.connect(lambda: self.operation(operator.sub))
self.pushButton_mul.pressed.connect(lambda: self.operation(operator.mul))
self.pushButton_div.pressed.connect(lambda: self.operation(operator.truediv))
#
self.pushButton_equ.pressed.connect(self.equals)
self.pushButton_re.pressed.connect(self.project_init)
self.project_init()
def input_number(self, v):
self.input_numb[self.state] = self.input_numb[self.state]*10+v
self.display(self.input_numb[self.state])
def display(self, number):
self.lcdNumber.display(number)
def project_init(self):
self.state = 0 # 0是第一个值, 1是第二个值, 2是第三个值 2+596 =
self.display_number = 0 # 数码管显示部分
self.last_operation = None
self.current_op = None
self.input_numb = [0,0] # 保存计算的两个值
self.display("0")
def operation(self, op): # 输入加减乘除
self.state = 1 # 标识有计算标识符
self.current_op = op
# self.display("0")
self.input_numb[1]=0 # 操作数2清零
def equals(self):
self.state = 0
self.display(self.current_op(self.input_numb[0], self.input_numb[1]))
self.input_numb[0]=0
self.input_numb[1]=0
pass
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
app.setApplicationName("zjq")
window = MainWindow()
# window.show()
sys.exit(app.exec_())
2.1代码流程
MainWindow类继承了我们刚设计的ui
然后使用在主程序中实例类
初始化时将数据跟界面初始化,
当有数据输入,保存到input_numb第一个空间
当有操作符输入时, 开始将接下来输入的数据保存到input_numb第二个空间
当有=
输入, 将input_numb两个数进行计算
本文主要了解ui控件使用, 按钮的press方法和lcd的display方法,
其他控件的其他方法需要阅读Qt使用手册,不多赘述, 设计流程如上, ui的设计注重细节排版,同时Qt的系统开发有很多前景,尤其是嵌入式方面的开发,当然桌面软件其实也可胜任, 如桌面QQ即可由QQ设计