PyQt5多线程的输出内容显示到窗口

当PyQt在代码中执行某些操作时,窗口通信和GUI交互将被阻塞。因此,需要用多线程的方式解决出现的视窗卡住的问题。本文完整代码实现:PyQt5多线程的输出内容显示到窗口。
摘要由CSDN通过智能技术生成

    PyQt的事件循环通过在QApplication对象上调用.exec_()开始,这个事件循环的线程称为GUI线程——也处理与主机操作系统的所有窗口通信。事件触发的任何执行也将在这个线程中运行,这意味着当PyQt在代码中执行某些操作时,窗口通信和GUI交互将被阻塞。因此,需要用多线程的方式解决出现的视窗卡住的问题。

    直接上代码,有2个py文件,一个是PyQt5的视窗部分,一个是主体代码。把视窗部分的代码保存为PyQtTestGUI.py后,可以直接运行主体代码。

一、PyQt5的视窗部分

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1203, 626)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(11)
        MainWindow.setFont(font)
        MainWindow.setToolTip("")
        MainWindow.setStyleSheet("")
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tabWidget = QtWidgets.QTabWidget(self.centralwidget)
        self.tabWidget.setGeometry(QtCore.QRect(0, 0, 580, 600))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(11)
        self.tabWidget.setFont(font)
        self.tabWidget.setObjectName("tabWidget")
        self.tab1 = QtWidgets.QWidget()
        self.tab1.setObjectName("tab1")
        self.tabWidget.addTab(self.tab1, "")
        self.tab2 = QtWidgets.QWidget()
        self.tab2.setObjectName("tab2")
        self.btn_tab1_test2 = QtWidgets.QPushButton(self.tab2)
        self.btn_tab1_test2.setGeometry(QtCore.QRect(410, 120, 111, 25))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(9)
        self.btn_tab1_test2.setFont(font)
        self.btn_tab1_test2.setObjectName("btn_tab1_test2")
        self.btn_tab1_test1 = QtWidgets.QPushButton(self.tab2)
        self.btn_tab1_test1.setGeometry(QtCore.QRect(380, 60, 168, 33))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.btn_tab1_test1.setFont(font)
        self.btn_tab1_test1.setObjectName("btn_tab1_test1")
        self.spb_tab1_1 = QtWidgets.QSpinBox(self.tab2)
        self.spb_tab1_1.setGeometry(QtCore.QRect(90, 500, 61, 22))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(10)
        self.spb_tab1_1.setFont(font)
        self.spb_tab1_1.setProperty("value", 88)
        self.spb_tab1_1.setObjectName("spb_tab1_1")
        self.cbx_tab1_1 = QtWidgets.QCheckBox(self.tab2)
        
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5是一个强大的Python GUI框架,可以用于创建多窗口应用程序。同时,它也提供了多线程的支持,可以在应用程序中同时执行多个任务。 对于多窗口应用程序,可以使用PyQt5中的QMainWindow类创建主窗口,并使用其他QWidget类创建额外的子窗口。主窗口是整个应用程序的主要界面,而子窗口可以用于显示其他视图或执行其他任务。 使用多线程可以使应用程序具有更好的响应性能,特别是在处理复杂的或耗时的任务时。可以使用PyQt5中的QThread类创建线程,然后将任务分配给这些线程进行并行执行,以避免主线程被阻塞。 在多窗口应用程序中使用多线程时,需要注意以下几点。首先,应该避免使用全局变量,而应该使用线程间通信机制进行数据传递。PyQt5提供了信号与槽机制和队列等线程间通信的方式。 其次,需要注意线程安全性。多个线程共享相同的数据时,可能会引起数据竞争和不一致性。可以使用互斥锁等同步机制来保证数据的一致性。 此外,还需要注意界面的更新。在多线程中进行的任务会影响到界面的显示,但需要注意将界面的更新操作放在主线程中进行,以避免多个线程同时更新界面而导致的冲突。 总之,PyQt5提供了多窗口多线程的支持,可以帮助我们创建功能强大的应用程序,提升用户体验和性能。但在使用过程中,需要注意线程间通信、线程安全性和界面更新等问题,以保证应用程序的稳定和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值