pyqt5 点击开始执行_pyqt5实现开始按钮开始一个循环,结束按钮结束循环

part 1

初学pyqt,折腾了好久才把功能实现,功能是按开始按钮循环输出数字在textBrowser控件中,按结束按钮停止输出,再按开始按钮重新开始循环

part 2

技术点与其中遇到的坑

1、遇到的坑:一开始想实现按结束按钮停止循环,结果按了开始就一直结束不了,开始是在Ui_Dialog里写了个函数弄了个标志位想要结束,结果那个标志位根本作用不了开始循环的标志位,所以想到用线程来实现,就是界面这个主线程开始一个循环的子线程,按停止按钮结束循环的子线程。百度了好多,用threading和QThread都可以实现,重点是要用信号槽机制才能将标识位的值改变。

2、将thread中的输出显示在界面主线程中的textBrowser中

Ui_Dialog相关代码self.myThread1.strsin.connect(self.updateText)

def updateText(self,text):

self.textBrowser.append(text)

myThread相关代码strsin = pyqtSignal(str)

self.strsin.emit(str(i))

3、通过信号槽机制使线程停止

Ui_Dialog相关代码sin = pyqtSignal()

self.myThread1 = myThread()

self.sin.connect(self.myThread1.stop)

myThread相关代码def stop(self):

self.flag = 0

4、点击按钮传参

实现将按钮的text传入函数self.startButton.clicked.connect(lambda:self.startOrstop(self.startButton.text()))

part 3# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'myWindow.ui'

#

# Created by: PyQt5 UI code generator 5.13.1

#

# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtWidgets

from PyQt5.QtCore import QThread,pyqtSignal,QObject

from PyQt5.QtWidgets import QApplication,QMainWindow

import time,sys

class Ui_Dialog(QObject):

sin = pyqtSignal()

def __init__(self):

super(Ui_Dialog,self).__init__()

self.myThread1 = myThread()

self.sin.connect(self.myThread1.stop)

self.myThread1.strsin.connect(self.updateText)

def setupUi(self, Dialog):

Dialog.setObjectName("Dialog")

Dialog.resize(593, 415)

self.startButton = QtWidgets.QPushButton(Dialog)

self.startButton.setGeometry(QtCore.QRect(410, 80, 75, 23))

self.startButton.setObjectName("pushButton")

self.stopButton = QtWidgets.QPushButton(Dialog)

self.stopButton.setGeometry(QtCore.QRect(410, 140, 75, 23))

self.stopButton.setObjectName("pushButton_2")

self.textBrowser = QtWidgets.QTextBrowser(Dialog)

self.textBrowser.setGeometry(QtCore.QRect(50, 120, 256, 192))

self.textBrowser.setObjectName("textBrowser")

self.retranslateUi(Dialog)

QtCore.QMetaObject.connectSlotsByName(Dialog)

self.update_tag = 1

self.startButton.clicked.connect(lambda:self.startOrstop(self.startButton.text()))

self.stopButton.clicked.connect(lambda:self.startOrstop(self.stopButton.text()))

def retranslateUi(self, Dialog):

_translate = QtCore.QCoreApplication.translate

Dialog.setWindowTitle(_translate("Dialog", "Dialog"))

self.startButton.setText(_translate("Dialog", "start"))

self.stopButton.setText(_translate("Dialog", "stop"))

def startOrstop(self,text):

try:

print(text)

myThread1 = myThread()

self.sin.connect(myThread1.stop)

if text =='start':

self.update_tag = 0

self.textBrowser.clear()

self.myThread1.flag = 1

self.myThread1.start()

elif text == 'stop':

self.update_tag = 1

self.sin.emit()

except Exception as e:

print(e)

def updateText(self,text):

self.textBrowser.append(text)

class myThread(QThread):

strsin = pyqtSignal(str)

def __init__(self,parent=None):

super(myThread,self).__init__(parent)

self.flag = 1

def run(self):

try:

for i in range(100):

if self.flag == 1:

self.strsin.emit(str(i))

time.sleep(0.1)

QtWidgets.QApplication.processEvents()

elif self.flag == 0:

self.strsin.emit("stop thread")

break

self.strsin.emit("please restart")

except Exception as e:

print(e)

def stop(self):

self.flag = 0

if __name__ == "__main__":

app = QApplication(sys.argv)

MainWindow = QMainWindow()

ui_dialog = Ui_Dialog()

ui_dialog.setupUi(MainWindow)

MainWindow.show()

sys.exit(app.exec_())

part 4

功能展示

用pyqt实现的小工具,可以实现zip和rar压缩文件的密码爆破,

欢迎来的我github查看:https://github.com/lynngeo/zi...

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值