【Python】解决pyqt5界面运行时卡死

GUI编程常见问题

SeniorZ-PyQt5+socket编程界面卡住未响应

现象

在使用Qt Desinger设计gui界面后,在python中运行界面使用按钮时,界面出现假卡死。

原因

gui界面运行后会作为主线程,若在主线程中进行耗时操作,就会导致界面出现假死的情况

解决办法

使用多线程,将耗时操作放在其他线程进行,主线程就不会受到影响

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import threading

class MyMainForm(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyMainForm, self).__init__(parent)
self.setupUi(self)

#新线程
self.th = None
#耗时操作
self.musicSpider_Button.clicked.connect(self.musicSpider)

def musicSpider(self):
self.th = threading.Thread(target=self.ms)
# 设置线程为守护线程,防止退出主线程时,子线程仍在运行
self.th.setDaemon(True)
# 新线程启动
self.th.start()

def ms(self):
musicSpider(self.user_idEdit.text())