如何使Qt(PyQt)代码按顺序运行?

2024-04-27 00:24:42 发布

您现在位置:Python中文网/ 问答频道 /正文


大家好。我正在Windows7上使用PyQt5制作一个桌面GUI应用程序。你知道吗

在我的应用程序中,工作量很大。如果文件哈希码与ftps文件不相等,它将对指定目录中的所有文件生成哈希码,并从ftp下载。在我的系统中,这大约需要5-6分钟。你知道吗

在我看来。。。你知道吗

  1. 先显示小部件。(当然,这是自我表现()'在比较哈希的代码之前。)

  2. 比较哈希代码并下载文件。

代码正常工作,但小部件在2.结束后显示。这是个问题。
我希望我的应用程序先运行步骤1,然后再运行步骤2。我该怎么办?你知道吗

任何帮助都是非常感激的

代码:

class showUI(QWidget):
  # make menu, toolbar, buttons, etc..
  self.show()

class compareHashAndDownload:
  # compare hash and download the files.

if __name__ == '__main__':
  app = QApplication(sys.argv)
  ex = showUI()
  mainProcess = compareHashAndDownload()
  sys.exit(app.exec_())

Tags: 文件代码app应用程序部件sys步骤gui
2条回答

解决这个问题的最佳方法是在单独的QThread中运行compareHashAndDownload。这还允许与小部件进行交互,甚至在长时间运行的函数完成之前。您还可以稍后重新运行该函数,而不必在此期间挂断GUI。你知道吗

使用线程相当复杂。例如,您需要安排GUI操作,以便它们在执行compareHashAndDownload函数之前、期间或之后被调用时能够正确运行。你知道吗

这里有一些很好的例子here,如果你决定沿着这条路走下去,它们会对你有所帮助。你知道吗

然而,一个廉价而令人愉快的选择是展示一个闪屏 执行compareHashAndDownload时。下面是一个简单的例子:

class showUI(QWidget):
  splash = QtGui.QSplashScreen(QtGui.QPixmap(splashFileName))
  splash.show()
  # make menu, toolbar, buttons, etc..
  mainProcess = compareHashAndDownload()
  self.show()
  splash.finish(self)

class compareHashAndDownload:
  # compare hash and download the files.

if __name__ == '__main__':
  app = QApplication(sys.argv)
  ex = showUI()

  sys.exit(app.exec_())

您可以直接从showUI小部件本身调用compareHashAndDownload。 但是如果compare方法花费的时间太长,那么ui将等待它完成,这不是一个好方法经验。所以呢记住这一点。你知道吗

class showUI(QWidget):
  # make menu, toolbar, buttons, etc..
  mainProcess = compareHashAndDownload()
  self.show()

class compareHashAndDownload:
  # compare hash and download the files.

if __name__ == '__main__':
  app = QApplication(sys.argv)
  ex = showUI()

  sys.exit(app.exec_())

这个方法不会花那么长时间,如果用qt自己的QThread在单独的线程上运行这个方法(不是最优雅的解决方案,但可以很好地运行)。你知道吗

相关问题 更多 >