大家好。我在Windows 7上使用PyQt5制作桌面GUI应用程序。
在我的应用程序中,工作量很大。它正在制作指定目录中所有文件的哈希码,如果文件哈希码与ftps文件不相同,则从ftp下载。在我的系统上,这需要大约5-6分钟。
在我的想法中......
首先显示小部件。 (当然,'self.show()'优先于比较哈希的代码。)
比较哈希码并下载文件。
代码正常运行,但在2.
结束后显示小部件。这是一个问题
我想我的应用程序首先执行步骤1然后执行步骤2.我该怎么办?
任何帮助都是apreciated
代码:
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_())
答案 0 :(得分:1)
解决此问题的最佳方法是在单独的compareHashAndDownload
中运行QThread
。即使在长时间运行功能完成之前,这也允许小部件与之交互。您也可以稍后重新运行该功能,而不是在那段时间挂起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_())
答案 1 :(得分:0)
您可以直接从compareHashAndDownload
窗口小部件中调用showUI
。
但是如果你的比较方法花费的时间太长,那么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
在单独的线程上运行该方法(不是最优雅的解决方案,但会正常工作)。