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...
pyqt5 点击开始执行_pyqt5实现开始按钮开始一个循环,结束按钮结束循环相关推荐
- Java程序开发一个窗体有两个按钮,一个是“开始”按钮,一个是“结束”按钮,当用户点击“开始”按钮时就在控制台打印一句话,反之则结束打印。
package javase18;import javax.swing.*; import java.awt.*; import java.awt.event.*;public class javas ...
- pyqt5 点击开始执行_《快速掌握PyQt5》第一章 PyQt5的起点
1.1 开始安装PyQt5 就跟安装其他库的方法一样,非常简单: Windows上安装: pip install pyqt5 Linux上安装: sudo apt-get install pyqt5- ...
- pyqt5切换python版本_PyQt5每天必学之切换按钮_python
这篇文章主要为大家详细介绍了PyQt5每天必学之切换按钮的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 切换按钮是QPushButton的特殊模式.它是一个具有两种状态的按钮:按压和未按 ...
- pyqt5+qt desiger实例教程(1)创建含有三个按钮的窗口,点击按钮2输出消息、按钮3可退出
pyqt5+qt desiger实例教程(1)创建含有三个按钮的窗口,点击按钮三可退出 目标:设计一个含有三个按钮的窗口,点击按钮2弹出消息,点击按钮3退出 如果是使用的anacoda那么自带qtde ...
- android 不可点击状态,Android系统.如何使用setClickable同时设置所有按钮可点击或不可点击?...
屏幕显示四个按钮.按下按钮时,媒体播放器播放声音.我遇到的问题是同时为所有按钮实现setClickable. 单击一个按钮后,我希望所有按钮都不可点击,直到媒体播放器播放完与按钮单击相关的声音.然后我 ...
- 多库共存 包装集的问题 点击按钮创建一个p 几个属性介绍 jQuery的插件
多库共存 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...
- 点击按钮创建一个表格 点击按钮创建一个表格 权限选择 元素的value属性操作
点击按钮创建一个表格 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...
- PyQt5点击菜单栏弹出新窗口,解决新窗口闪退的实现方法
PyQt5点击菜单栏弹出新窗口,解决新窗口闪退的实现方法 参考文章: (1)PyQt5点击菜单栏弹出新窗口,解决新窗口闪退的实现方法 (2)https://www.cnblogs.com/aziji/ ...
- 【微信小程序】随机点名系统(点击开始滚动名字点击结束按钮结束滚动)
[微信小程序]随机点名系统(点击开始滚动名字点击结束按钮结束滚动) 1.效果图: 2.js代码 {Page({data:{condition: Math.floor(Math.random()*7+1 ...
最新文章
- Swift 字面量表达
- SQL 解决从分组数据中总是挑选第一条数据的问题
- mysql中用户管理_mysql 中用户管理小结
- 大话云计算——认识云——“瑞友杯”虚拟化征文
- 小米、360、京东之后 阿里联手美的杀入智能家居市场
- CSS面试总结(大致)
- 用汇编的眼光看C++(之判断流程)
- 可太惨了吧!乐视网临时股东大会仅两位董事会成员出席,6分钟内结束
- WPF Logical Tree vs. Visual Tree
- java hashset 实现原理_深入Java集合学习系列:HashSet的实现原理
- 推荐算法之用户推荐(UserCF)和物品推荐(ItemCF)对比
- 【转】EntityFramework之领域驱动设计实践(三)
- spring boot 教程(三)配置详解
- UG10.0塑胶模具设计从入门到精通全套视频教程500讲
- axure 调整中继器列宽_Axure RP 8教程 - 中继器功能改进
- matlab无法打开wps的xls文件,wps表格无法打开xls文件相关解决方法
- 真正优秀的人,更懂得尊重别人
- 计算机一级考试文件夹移动怎么操作,怎么用键盘移动文件夹而不用鼠标?电脑老师下的任务、、、...
- 拿好这份踏青攻略,智慧出游领略大好河山!
- Word章节自动编号+题注自动编号+公式编号+交叉引用