小编Mat*_*ley的帖子

在调用函数时如何防止GUI冻结?(PyQT4,Python3)

问题背景:

我是PyQT4的新手.我正在开发一个程序,我正在网上抓取数据到我的程序.在信息下载时,我的GUI锁定.我想在一个单独的后台线程中调用这个函数,也许使用QThread,但是我很难绕过QThread,Qt,以及插槽/信号通信方式.

我已经读过关于创建一个泛型工作线程,它将调用传递给它的任何函数.我不知道如何在我的主文件中实现它,以便我可以将我的函数作为后台进程运行.如果可以显示任何示例代码,请详细解释每一行,因为我不了解该过程.

问题:

  1. 如何在函数运行时阻止GUI冻结?
  2. 我如何使用后台线程来运行我的类中的函数?

码:

我的ui是从Qt 4 Designer创建的外部文件中加载的.

Github上的完整文件

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
Run Code Online (Sandbox Code Playgroud)

main.py(主文件)

def connections():
    # If button is clicked, call summary(), which web scrapes 
    # for data. This could take 5-30 seconds, this freezes UI.
    ui.btnRefreshSummary.clicked.connect(lambda: summary())

# Refresh items in gui
def refresh_ui():
    if summary_data != []:
        ui.valWatching.setText(summary_data[0])
        ui.valBidding.setText(summary_data[1])
        ui.valWon.setText(summary_data[2])
        ui.valNotWon.setText(summary_data[3])
        ui.valPurchases.setText(summary_data[4])
        ui.valInvoices.setText(summary_data[5])

def login():
    # Scrape website and login while in background; 
    # This locks up GUI until it completes.
    # Pretend …
Run Code Online (Sandbox Code Playgroud)

python user-interface multithreading pyqt4 qthread

4
推荐指数
1
解决办法
3598
查看次数

标签 统计

multithreading ×1

pyqt4 ×1

python ×1

qthread ×1

user-interface ×1