事件循环是否继续运行 PyQt/PySide 中的程序代码?

问题描述 投票:0回答:1

我知道在创建QApplication时,会创建一个evet循环。 这是否意味着应用程序将永远运行代码直到其终止? 我试图在主类构造函数中调用一个槽,我想知道该槽是否会继续执行,因为存在事件循环,因此主类将永远被实例化。 我怎么错了?为什么构造函数只运行一次?

python pyqt pyside event-loop
1个回答
2
投票

事件循环只是一个无限循环,它将事件从队列中拉出并处理它们。

def exec_():
    while True:
        event = event_queue.get()
        process_event(event)

当您调用“exec_()”方法时,事件循环就会运行。当您单击 GUI 或与 GUI 交互时,您会将事件放入事件队列中。 Qt 在内部处理该事件。

您还会注意到,长时间单击按钮将停止 GUI。一切都在同步运行。当单击按钮时,正在处理该事件。该事件运行时不会处理其他事件。

import time
from PySide2 import QtWidgets

app = QtWidgets.QApplication([])

def halt_10_sec():
    time.sleep(10)  # Stay here for 10 seconds

btn = QtWidgets.QPushButton('Halt')
btn.clicked.connect(halt_10_sec)
btn.show()

app.exec_()  # Run forever until app.quit()

# You will not get here until all windows are closed and the application is exiting.
print('Here')

一旦单击按钮,您将无法在按钮事件运行时调整窗口大小、移动窗口、突出显示悬停按钮或任何其他事件。

插槽只是一个函数。您应该能够在构造函数中调用插槽。

© www.soinside.com 2019 - 2024. All rights reserved.