返回

Qt+python之计算器

发布时间:2023-10-26 06:16:16 301


文章目录

  • ​​写在前面​​
  • ​​1 界面ui设计​​
  • ​​1.1 打开软件design.exe​​
  • ​​1.2 界面设计​​
  • ​​1.3 ui转.py类​​
  • ​​2 代码​​

  • ​​2.1代码流程​​

写在前面

不知道干啥, 所以想起本科的时候常常使用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

Qt+python之计算器_python

1.2 界面设计

Qt+python之计算器_属性值_02


Qt+python之计算器_属性值_03

保存后是个这

Qt+python之计算器_python_04

1.3 ui转.py类

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

Qt+python之计算器_属性值_05

Qt+python之计算器_属性值_06

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设计


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
STM32-定时器备忘 2023-10-26 03:05:24