我目前正在使用ipython运行PyQt5应用程序,但是当我在ipython控制台上启动一些耗时的命令后,GUI被冻结了。
我能找到的最接近的答案是如何让Qt异步运行,以像Matplotlib's离子模式那样进行交互使用?。然而,这里提供的答案并不能解决我的问题。
我根据上一篇文章创建了一个类似的例子。
from PyQt5.QtWidgets import QApplication, QGraphicsRectItem, QGraphicsScene, QGraphicsView, QMainWindow
import time
%gui qt5
class Rect(QGraphicsRectItem):
def mousePressEvent(self, event):
print("foo")
window = QMainWindow()
window.setGeometry(100, 100, 400, 400)
view = QGraphicsView()
scene = QGraphicsScene()
rect = Rect(0, 0, 150, 150)
scene.addItem(rect)
view.setScene(scene)
window.setCentralWidget(view)
window.show()
time.sleep(1000) # Suppose we are running some other commands on ipython console, then the GUI freezes
看来你没有理解"%gui qt5"是,该命令表明ipython将使用Qt事件循环。因此,如果你想运行一些耗时的任务,那么你应该在另一个线程中运行它。