当前位置: 首页 > news >正文

手机网站源文件网站快速排名推荐

手机网站源文件,网站快速排名推荐,棋牌游戏网站模板,软文写作平台在PyQt中是不推荐使用UI主线程来处理耗时操作的#xff0c;会造成窗口组件阻塞。耗时操作一般放在子线程中。子线程处理完成后#xff0c;可能需要更新窗口组件#xff0c;但是PyQt不推荐使用子线程来更新主线程#xff08;也不是不能更新#xff09;#xff0c;这就用到…在PyQt中是不推荐使用UI主线程来处理耗时操作的会造成窗口组件阻塞。耗时操作一般放在子线程中。子线程处理完成后可能需要更新窗口组件但是PyQt不推荐使用子线程来更新主线程也不是不能更新这就用到了信号槽机制来更新主线程。 在QObject的一个子类中创建一个信号PyQt5.QtCore.pyqtSignal属性将这个信号属性和其他类中的函数绑定绑定的这个函数叫做整个信号的槽函数。一个信号可以和多个槽函数绑定。该信号发出时就会调用对应的槽函数 可能会有疑问槽函数被执行时所在的线程和发送信号的线程是不是同一个 需要注意信号一定义在QObject或其子类中。调用该属性的emit方法发出信号后和该信号绑定的槽函数都将要被调用但是调用的线程并不一定是发送信号的这个线程这和PyQt中的线程亲和性Thread Affinity有关。 线程亲和性Thread Affinity 在 PyQt 中一个对象可以被移动到不同的线程中但一个对象在同一时刻只能属于一个线程。这是因为 Qt 使用线程亲和性Thread Affinity的概念来管理对象所属的线程。 每个 Qt 对象都与一个特定的线程相关联即它的线程亲和性。对象的线程亲和性决定了该对象的槽函数是在哪个线程中执行。默认情况下对象在创建时会与创建它的线程相关联但可以使用 moveToThread 方法将对象移动到另一个线程中。 错误示例 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,QFileDialog from PyQt5.QtCore import QThread,pyqtSignal,QObject import sys, threadingclass MyWindow(QMainWindow):def __init__(self, parentNone):super(MyWindow, self).__init__(parent)self.button QPushButton(Hi)self.button.clicked.connect(self.on_click)self.setCentralWidget(self.button)def on_click(self):print(on_click,threading.current_thread().name)self.thread MyThread(self)self.thread.start()def set_text(self,file_name):print(setText,threading.current_thread().name)self.button.setText(file_name)class MyThread(QThread):def __init__(self,mv:QMainWindow) - None:super().__init__(None)self.mv mvdef run(self):print(run,threading.current_thread().name)QThread.sleep(5)self.mv.set_text(Hello World)if __name__ __main__:app QApplication([])window MyWindow()window.show()sys.exit(app.exec_()) 输出结果 on_click MainThread run Dummy-1 setText Dummy-1 //子线程更新UI不推荐使用信号槽机制 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,QFileDialog from PyQt5.QtCore import QThread,pyqtSignal,QObject import sys, threading class MyWindow(QMainWindow):def __init__(self, parentNone):super(MyWindow, self).__init__(parent)self.button QPushButton(Hi)self.button.clicked.connect(self.on_click)self.setCentralWidget(self.button)def on_click(self):print(on_click,threading.current_thread().name)self.thread MyThread(self)self.thread.pyqtSignal.connect(self.set_text)self.thread.start()def set_text(self,file_name):print(setText,threading.current_thread().name)self.button.setText(file_name)class MyThread(QThread):pyqtSignal pyqtSignal(str)def __init__(self,mv:QMainWindow) - None:super().__init__(None)self.mv mvdef run(self):print(run,threading.current_thread().name)QThread.sleep(5)self.pyqtSignal.emit(Hello World)if __name__ __main__:app QApplication([])window MyWindow()window.show()sys.exit(app.exec_()) 输出结果 on_click MainThread run Dummy-1 setText MainThread //更新UI时执行的线程为主线程setText槽函数为什么会被主函数执行就是因为线程亲和性槽函数所在对象和MainThread绑定当然会被主线程所执行。 但是这种将事务直接写在runPyQt5是不推荐的正确写法如下 创建一个类集成QObject来做业务的处理。并将这个对象和新创建的线程通过moveToThread绑定作为这个对象的亲和线程。将QThread的started信号和这个业务事件绑定。线程启动发送started信号业务对象开始处理业务完成之后发送信号给主线程槽函数。 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,QFileDialog from PyQt5.QtCore import QThread,pyqtSignal,QObject import sys, threading class MyWindow(QMainWindow):def __init__(self, parentNone):super(MyWindow, self).__init__(parent)self.button QPushButton(Hi)self.button.clicked.connect(self.on_click)self.setCentralWidget(self.button)def on_click(self):print(on_click,threading.current_thread().name)self.thread QThread()self.myHander MyHandler()self.myHander.moveToThread(self.thread)self.myHander.pyqtSignal.connect(self.set_text)self.thread.started.connect(self.myHander.handle)self.thread.start()def set_text(self,file_name):print(setText,threading.current_thread().name)self.button.setText(file_name) class MyHandler(QObject):pyqtSignal pyqtSignal(str)def handle(self):print(handle,threading.current_thread().name)self.pyqtSignal.emit(Hello World)if __name__ __main__:app QApplication([])window MyWindow()window.show()sys.exit(app.exec_()) 子线程中调用QFileDialog 如果在子线程中调用了QFileDialog窗口选择文件QFileDialog窗口出现后几秒后程序会崩溃代码如下 from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,QFileDialog from PyQt5.QtCore import QThread,pyqtSignal,QObject import sys, threading class MyWindow(QMainWindow):def __init__(self, parentNone):super(MyWindow, self).__init__(parent)self.button QPushButton(Hi)self.button.clicked.connect(self.on_click)self.setCentralWidget(self.button)def on_click(self):print(on_click,threading.current_thread().name)self.thread MyThread(self)self.thread.pyqtSignal.connect(self.set_text)self.thread.start()def set_text(self,file_name):print(setText,threading.current_thread().name)self.button.setText(file_name)class MyThread(QThread):pyqtSignal pyqtSignal(str)def __init__(self,mv:QMainWindow) - None:super().__init__(None)self.mv mvdef run(self):print(run,threading.current_thread().name)file_name QFileDialog.getOpenFileName(self.mv, 选择文件, ./, Excel files(*.xlsx , *.xls))print(file_name)self.pyqtSignal.emit(Hello World)if __name__ __main__:app QApplication([])window MyWindow()window.show()sys.exit(app.exec_()) 输出结果 on_click MainThread run Dummy-1 QObject::setParent: Cannot set parent, new parent is in a different thread CoCreateInstance failed (操作成功完成。) QObject: Cannot create children for a parent that is in a different thread. (Parent is QApplication(0x21fb451d190), parents thread is QThread(0x21fb443b430), current thread is MyThread(0x21fb8788df0) CoCreateInstance failed (操作成功完成。) QObject::startTimer: Timers cannot be started from another thread问题原因 PyQt中必须在主线程中来创建子对象。
http://www.zqtcl.cn/news/130818/

相关文章:

  • 锡盟网站建设做网站视频存储
  • 深圳博纳网站建设高端品牌护肤品排行榜
  • 百度爱采购优化排名软件宁波seo搜索平台推广专业
  • 门户网站的建设公司台山网站定制
  • 建设公司网站需要什么群辉nas怎么做网站
  • 广西自治区集约化网站建设要求坂田网站的建设
  • 网站后台不能编辑企业如何申请网站
  • 网站建设网站设计多少钱网站系统开发方式
  • 站长收录wordpress配置好后别人无法访问
  • 我国档案网站建设吉林网站建设制作
  • 手机网站底部导航网站视频链接怎么做
  • 企业门户网站属于什么层seo关键词排行优化教程
  • wordpress 演示站广东省南粤交通投资建设有限公司网站
  • 典型的企业网站张家港保税区建设规划局网站
  • 网站设计公司那个好网页设计登录界面模板
  • 做网站的厂家聚美优品网站设计
  • 哈尔滨网站建设效果好网站改版 影响google 404跳首页
  • 廊坊网站推广的公司如何做1个手机网站
  • 网站index.php被修改南京cms建站系统
  • 淘宝网站模板是什么做的北海建设厅网站
  • 我想建个网站想做电商应该怎么入门
  • 广州番禺网站制作推广网站建设徐州百度网络网站
  • 有没有个人做网站的新网站做seo 的效果
  • 做网站和app哪个简单旅游资讯网站建设方案
  • 网站建设考级百度怎样可以搜到自己的网站
  • 自助建站免费自助建站网站广州企业网站
  • 常德论坛尚一网唐山seo网络推广
  • 网站建设预付流程网站设计风格的关键词
  • 常德网站制作怎么做自己的网页
  • 做的网站为什么图片看不了wordpress循环该分类子分类