PyQt5 显示窗口后运行函数

las*_*hon 5 python pyqt python-3.x pyqt5

我想在 GUI 显示后调用一个函数。如果我在init中运行函数,它会阻止 gui 在完成之前显示。

class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.setupUi(self)
        self.function() #waits for this to finish until gui displayed
    def function(self):
        self.guiBox.setValue(initData)
        #inits stuff, takes 5 seconds
Run Code Online (Sandbox Code Playgroud)

该函数通过串口初始化一个设备...需要几秒钟的时间,它获取gui属性并更新gui显示框。

小智 5

添加单次定时器1毫秒和呼叫后功能

  class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
      QtWidgets.QMainWindow.__init__(self)
      Ui_MainWindow.__init__(self)
      self.setupUi(self)
      QTimer.singleShot(1,self.function) #waits for this to finish until gui displayed
    def function(self):
      self.guiBox.setValue(initData)
      #inits stuff, takes 5 seconds
Run Code Online (Sandbox Code Playgroud)


eyl*_*esc 3

耗时的任务是阻塞的,这违背了 GUI 上的自然工作方式,一个选项是使用qApp.processEvents(),例如:

def function(self):
    self.guiBox.setValue(initData)
    code1
    QtWidgets.qApp.processEvents()
    code2
    QtWidgets.qApp.processEvents()
    ...
Run Code Online (Sandbox Code Playgroud)