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实现开始按钮开始一个循环,结束按钮结束循环相关推荐

  1. Java程序开发一个窗体有两个按钮,一个是“开始”按钮,一个是“结束”按钮,当用户点击“开始”按钮时就在控制台打印一句话,反之则结束打印。

    package javase18;import javax.swing.*; import java.awt.*; import java.awt.event.*;public class javas ...

  2. pyqt5 点击开始执行_《快速掌握PyQt5》第一章 PyQt5的起点

    1.1 开始安装PyQt5 就跟安装其他库的方法一样,非常简单: Windows上安装: pip install pyqt5 Linux上安装: sudo apt-get install pyqt5- ...

  3. pyqt5切换python版本_PyQt5每天必学之切换按钮_python

    这篇文章主要为大家详细介绍了PyQt5每天必学之切换按钮的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 切换按钮是QPushButton的特殊模式.它是一个具有两种状态的按钮:按压和未按 ...

  4. pyqt5+qt desiger实例教程(1)创建含有三个按钮的窗口,点击按钮2输出消息、按钮3可退出

    pyqt5+qt desiger实例教程(1)创建含有三个按钮的窗口,点击按钮三可退出 目标:设计一个含有三个按钮的窗口,点击按钮2弹出消息,点击按钮3退出 如果是使用的anacoda那么自带qtde ...

  5. android 不可点击状态,Android系统.如何使用setClickable同时设置所有按钮可点击或不可点击?...

    屏幕显示四个按钮.按下按钮时,媒体播放器播放声音.我遇到的问题是同时为所有按钮实现setClickable. 单击一个按钮后,我希望所有按钮都不可点击,直到媒体播放器播放完与按钮单击相关的声音.然后我 ...

  6. 多库共存 包装集的问题 点击按钮创建一个p 几个属性介绍 jQuery的插件

    多库共存 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...

  7. 点击按钮创建一个表格 点击按钮创建一个表格 权限选择 元素的value属性操作

    点击按钮创建一个表格 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  8. PyQt5点击菜单栏弹出新窗口,解决新窗口闪退的实现方法

    PyQt5点击菜单栏弹出新窗口,解决新窗口闪退的实现方法 参考文章: (1)PyQt5点击菜单栏弹出新窗口,解决新窗口闪退的实现方法 (2)https://www.cnblogs.com/aziji/ ...

  9. 【微信小程序】随机点名系统(点击开始滚动名字点击结束按钮结束滚动)

    [微信小程序]随机点名系统(点击开始滚动名字点击结束按钮结束滚动) 1.效果图: 2.js代码 {Page({data:{condition: Math.floor(Math.random()*7+1 ...

最新文章

  1. Swift 字面量表达
  2. SQL 解决从分组数据中总是挑选第一条数据的问题
  3. mysql中用户管理_mysql 中用户管理小结
  4. 大话云计算——认识云——“瑞友杯”虚拟化征文
  5. 小米、360、京东之后 阿里联手美的杀入智能家居市场
  6. CSS面试总结(大致)
  7. 用汇编的眼光看C++(之判断流程)
  8. 可太惨了吧!乐视网临时股东大会仅两位董事会成员出席,6分钟内结束
  9. WPF Logical Tree vs. Visual Tree
  10. java hashset 实现原理_深入Java集合学习系列:HashSet的实现原理
  11. 推荐算法之用户推荐(UserCF)和物品推荐(ItemCF)对比
  12. 【转】EntityFramework之领域驱动设计实践(三)
  13. spring boot 教程(三)配置详解
  14. UG10.0塑胶模具设计从入门到精通全套视频教程500讲
  15. axure 调整中继器列宽_Axure RP 8教程 - 中继器功能改进
  16. matlab无法打开wps的xls文件,wps表格无法打开xls文件相关解决方法
  17. 真正优秀的人,更懂得尊重别人
  18. 计算机一级考试文件夹移动怎么操作,怎么用键盘移动文件夹而不用鼠标?电脑老师下的任务、、、...
  19. 拿好这份踏青攻略,智慧出游领略大好河山!
  20. Word章节自动编号+题注自动编号+公式编号+交叉引用

热门文章

  1. 误操作,U盘被dispart命令删除分区了怎么恢复?
  2. c语言头文件包含嵌套问题和包含原则
  3. Vimium-chrome操作神器
  4. 达州市公安局探索IT运维新领域 北塔软件BTSO支撑“金盾工程”高效运转
  5. 电脑经常报app crashed-writeminidump问题
  6. 微信支付sdk详细使用
  7. DOSBOX窗口、字体小的解决办法
  8. 安川5系7系伺服 电路 驱动器原理图
  9. 武汉公交车司机的技术真NB
  10. 智能仓储物流系统的魂---数字化信息管理系统WMS,WCS……