在控制台上运行其他命令时,如何在没有冻结GUI的情况下运行PyQt ?



我目前正在使用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事件循环。因此,如果你想运行一些耗时的任务,那么你应该在另一个线程中运行它。

相关内容

  • 没有找到相关文章

最新更新