python开发界面化软件:用PySide6做一个简单秒表

开发桌面软件,当然最牛逼的是QT。然而QT是基于C++的,C++是一种专业性极强的语言,业余玩家很难掌握。QT并没有放弃大部分业余玩家,他们做了PyQt和PySide两个包,让广大python玩家也可以用python语言来玩QT。

因为PyQt的开源策略没有PySide幅度大,不能做闭源软件,今天我们用PySide来做一个小项目,体验一下PySide。我这个人喜欢用最新的版本,于是选择的是PySide6。

第一步:安装PySide6

安装PySide6很简单,直接在终端执行:pip install PySide

如果你有使用 pycharm ,那么安装就更简单了,直接按照提示进行就可以了。

具体怎么安装就不详细说了,如果有什么问题可以在评论区讨论。

第二步:需求分析

如题所述,我们要做一个秒表。最简单的秒表是这样的,有一个界面,界面上有一个显示数字的地方,有两个按钮,一个是开始,一个是暂停。

基础知识回顾,老司机可以跳过。计算机显示一个界面,是不断地由上而下的刷新当前界面,因为这种刷新非常快,我们就会觉得界面是固定的。如果界面的部分地方发生了改变,比如按钮状态变成了不可操作,也是可以通过这种刷新来修改的。如果修改某个地方需要比较长的时间,那么界面就会卡顿,卡顿时间就是修改某个地方所需要的时间。为了界面的流畅,所以我们就要用子线程来操作一些比较耗时的操作。

第三步:实现逻辑

点击“开始”按钮,启动一个线程,这个线程会对一个数字n进行每秒加一的操作,操作完后会把这个数字传递给主界面,然后在主界面上显示出来。

点击“暂停”按钮,关闭线程,系统停止对n进行加一操作。再次点击“开始”,又启动线程,继续对n进行加一操作。

n这个数字是主界面上用来显示的数字,点击“开始”按钮时,要把这个数字传递给子线程,子线程每进行一次加一操作,就把n还给主界面,并修改主界面的数字,这样就实现了主界面秒表读数的效果。

第四步:代码实现

子线程向主线程传递数据,用Signal(),显示数字用QLCDNumber(),按钮用QPushButton(),子线程用QThread()(创建一个类继承它即可)。直接上代码:

import sys import time from PySide6.QtWidgets import * from PySide6.QtCore import * class Form(QDialog): def __init__(self, parent=None): super(Form, self).__init__(parent) self.setWindowTitle("秒表") self.resize(500,300) self.n=0 #用来显示的数字 self.led=QLCDNumber(self) self.led.resize(100,50) self.led.move(int(self.width()/2-self.led.width()/2),10) self.led.display(0) self.ok_button=QPushButton("确定",self) self.ok_button.resize(100,50) self.ok_button.move(int(self.width()/2-self.ok_button.width()/2),self.led.height()+30) self.ok_button.clicked.connect(lambda:self.start())#触发开始函数 self.stop_button=QPushButton("暂停",self) self.stop_button.resize(100,50) self.stop_button.move(self.ok_button.x(),self.ok_button.y()+40) self.stop_button.clicked.connect(lambda:self.stop()) #触发暂停函数 def start(self): self.ok_button.setEnabled(False) self.stop_button.setEnabled(True) self.th = Myth(self.n) #创建子线程 并向子线程传入self.n self.th.signalA.connect(self.change) #链接信号到槽函数 self.th.start() def stop(self): self.stop_button.setEnabled(False) self.ok_button.setEnabled(True) self.th.stop() def change(self,msg):#接受来自子线程的信号msg print("msg=",msg) self.n=msg self.led.display(self.n) #用来自子线程的数字修改主界面的显示数字 class Myth(QThread): signalA=Signal(int) def __init__(self,n): super(Myth,self).__init__() self.n=n self.ok=None def __del__(self): self.wait() def stop(self): self.ok=False def run(self): self.ok = True while self.ok: self.n=self.n+1 #给self.n加一操作 print(self.n) self.signalA.emit(self.n) time.sleep(1) #等待一秒钟 if __name__ == '__main__': # Create the Qt Application app = QApplication(sys.argv) # Create and show the form form = Form() form.show() # Run the main Qt loop sys.exit(app.exec())

第五步:效果展示

视频效果:

视频加载中…

python开发界面化软件:用PySide6做一个简单秒表

相关文章:

你感兴趣的文章:

标签云: