⼀个pyqt5动态加载ui+多线程+信号刷新界⾯的例⼦⼀个pyqt5动态加载ui+多线程+信号刷新界⾯的例⼦
ui代码(⽤designer设计⽣成即可)
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>全国富婆通讯录</string>
</property>
<widget class="QWidget" name="formLayoutWidget">
<property name="geometry">
<rect>
<x>90</x>
<y>40</y>
<width>211</width>
<height>141</height>
</rect>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="1">
<widget class="QLineEdit" name="lineEdit"/>难受的近义词
</item>
大同大学学报
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>开始寻找富婆:</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>开始</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>停⽌</string>
中老年人奶粉
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>
将ui⽂件转换成py类后如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'main.ui'
#发财语录
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def tupUi(lf, Form):
Form.tObjectName("Form")
案牍
lf.formLayoutWidget = QtWidgets.QWidget(Form)
lf.formLayoutWidget.tGeometry(QtCore.QRect(90, 40, 211, 141))
lf.formLayoutWidget.tObjectName("formLayoutWidget")
lf.formLayout = QtWidgets.QFormLayout(lf.formLayoutWidget)
lf.formLayout.tContentsMargins(0, 0, 0, 0)
lf.formLayout.tObjectName("formLayout")
lf.lineEdit = QtWidgets.QLineEdit(lf.formLayoutWidget)
lf.lineEdit.tObjectName("lineEdit")
lf.formLayout.tWidget(0, QtWidgets.QFormLayout.FieldRole, lf.lineEdit)
取消的英文lf.label = QtWidgets.QLabel(lf.formLayoutWidget)
lf.label.tObjectName("label")眼角痒是什么原因
lf.formLayout.tWidget(0, QtWidgets.QFormLayout.LabelRole, lf.label)
lf.pushButton = QtWidgets.QPushButton(lf.formLayoutWidget)
lf.pushButton.tObjectName("pushButton")
lf.formLayout.tWidget(2, QtWidgets.QFormLayout.LabelRole, lf.pushButton)
lf.pushButton_2 = QtWidgets.QPushButton(lf.formLayoutWidget)
lf.pushButton_2.tObjectName("pushButton_2")
潮英文lf.formLayout.tWidget(2, QtWidgets.QFormLayout.FieldRole, lf.pushButton_2)
tSlotsByName(Form)
def retranslateUi(lf, Form):
_translate = anslate
Form.tWindowTitle(_translate("Form", "全国富婆通讯录"))
lf.label.tText(_translate("Form", "开始寻找富婆:"))
lf.pushButton.tText(_translate("Form", "开始"))
lf.pushButton_2.tText(_translate("Form", "停⽌"))
运⾏代码如下:
import random
import time
from threading import Thread
import null as null
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget
from ui.main import Ui_Form
class MainWindow(QWidget):
signal1 = pyqtSignal(str, str) # 定义带类型参数信号
stopSign = 0
thread = null
woman = ["桂花", "翠花", "桂英", "桂凤", "翠芬", "桂兰", "红梅", "腊梅", "⽉红", "⽉英", "⽟兰", "⽟芝", "⼩兰", "蓉芳", "兰芳", "彩凤", "嫦娟", "招娣", "引娣"]
def__init__(lf):
super().__init__()
lf.ui = Ui_Form()
lf.ui.tupUi(lf)
str = "string"
lf.ui.t(lambda: lf.startThread(str))
lf.ui.pushButton_t(lf.stopThread)
t(lf.updateview)
def startThread(lf, str):
lf.stopSign = 0 # 关闭线程关闭标识
print(str)
text = lf.()
if (lf.thread != null and lf.thread.isAlive()):
return# 不重复开启线程
lf.thread = Thread(target=lf.threadSend,
args=(text,) # 元组
)
lf.thread.start()
def stopThread(lf): # 停⽌⼦线程
# lf.thread.join() #这个⽅法的意思是阻塞其他线程包括主线程,专注于运⾏⼦线程的任务,直⾄⼦线程完成 lf.stopSign = 1 # 打开线程关闭标识
lf.thread.join()
def threadSend(lf, text): # 开启⼦线程,不阻塞主线程
while (lf.stopSign == 0):
time.sleep(0.1)
item = lf.woman[random.randint(0, 18)]
it(item, text) # ⼦线程不直接更新页⾯,发送信号让主线程去更新
def updateview(lf, item, text): # 更新页⾯执⾏
lf.ui.lineEdit.tText(text + "+" + item)
app = QApplication([])
stats = MainWindow()
stats.show()
<_()
运⾏效果如下: