相关文章推荐
害羞的篮球  ·  RStudio 断点调试 ...·  1 年前    · 
沉稳的冰棍  ·  org.springframework.we ...·  1 年前    · 
时尚的蜡烛  ·  webSocket ...·  2 年前    · 
from PyQt5.Qt import (QApplication, QWidget, QPushButton, QThread,QMutex,pyqtSignal) import sys import time qmut_1 = QMutex() # 创建线程锁 qmut_2 = QMutex() # 继承QThread class Thread_1(QThread): # 线程1 def __init__(self): super().__init__() def run(self): qmut_1.lock() # 加锁 values = [1, 2, 3, 4, 5] for i in values: print(i) time.sleep(0.5) # 休眠 qmut_1.unlock() # 解锁 class Thread_2(QThread): # 线程2 _signal =pyqtSignal() def __init__(self): super().__init__() def run(self): # qmut_2.lock() # 加锁 values = ["a", "b", "c", "d", "e"] for i in values: print(i) time.sleep(0.5) # qmut_2.unlock() # 解锁 self._signal.emit() class MyWin(QWidget): def __init__(self): super().__init__() # 按钮初始化 self.btn_1 = QPushButton('按钮1', self) self.btn_1.move(120, 80) self.btn_1.clicked.connect(self.click_1) # 绑定槽函数 self.btn_2 = QPushButton('按钮2', self) self.btn_2.move(120, 120) self.btn_2.clicked.connect(self.click_2) # 绑定槽函数 def click_1(self): self.thread_1 = Thread_1() # 创建线程 self.thread_1.start() # 开始线程 def click_2(self): self.btn_2.setEnabled(False) self.thread_2 = Thread_2() self.thread_2._signal.connect(self.set_btn) self.thread_2.start() def set_btn(self): self.btn_2.setEnabled(True) if __name__ == "__main__": app = QApplication(sys.argv) myshow = MyWin() myshow.show() sys.exit(app.exec_()) 在使用 pyqt 5 时,程序运行时间过长可能会造成界面假死的情况,为了解决这个问题,可以采用 多线程 。将程序放到子 线程 中运行。     这里 pyqt 5 多线程 用的方法是继承Qthead类,然后重写run ( ) 函数实现。 # 多线程 的实现 class MyThread ( QThread ) : _signal = pyqt Signal ( object ) # 自定义信号,用于传递数据等 def __init__ ( self ) : super ( ) .__init__ ( ) b.使用 多线程 模块 QThread c.使用事件处理功能 QTimer相当于一个定时器,每当定时器时间溢出后,会执行相关的函数。这个时候程序会从主 线程 界面跳到QTimer函数中,如果QTimer函数中有延时或者处理时间较长,就会出现界面失去响应,造成界面卡顿的现象。 QThread 等于新开一个 线程 专门处理耗时间的程序,UI主 线程 显示界面,当子 线程 处理好数据后通过自定义的信号与槽,将数据交给主 线程 刷新界面。由于UI主 线程 一直运行,子 线程 的延时 from PyQt 5 .QtWidgets import QWidget, QPushButton , QApplication ,QListWidget, QGridLayout , QLabel from PyQt 5 .QtCore import ...
PyQT 5 多线程 在常规的界面软件中,需要将UI 线程 和工作 线程 加以区分,主要原因是某些工作 线程 很复杂且耗时,比如下载某个文件或者长时间的计算,当执行这些进程时,UI主进程会被阻塞,界面会出现未响应的状态,所以需要用到 多线程 来解决这个问题。 QThread QThread 是QT 线程 类中最核心的底层类。由于 PyQt 的跨平台特性, QThread 要隐藏所有与平台相关的代码,可以先创建它的子类,然后覆盖本身所有的 QThread .run ( ) 函数。 import time from PyQt 5 .QtCore impor
def compute_volume(self,height, radius): return height * self.compute_area(radius) #调用@staticmethod方法 def get_volume(self): return self.compute_volume(self.height, self.radius) d=Pizza(2,5) print(d.get_volume()) #,我把cls换成self,也可以呀,没理解 表情包