我用PyQt5编写了一个Hangman游戏。
玩家有10次机会猜出这个秘密单词。在此游戏中,当他们猜错时,计数器将递增,并加载下一张图像。
当我运行python hangman.py
时,游戏将按预期运行。但是,当我使用PyInstaller并生成二进制文件时,显示最后一个图像时出现间歇性问题。当计数器达到9时,s9.jpg
图像应该被加载,但是看起来好像没有(或者确实加载了,但是很快消失了)。在其他时候,它会按预期工作。我很困惑。
编辑: 我正在使用Ubuntu 18.04
我试图使用QEventLoop
来给一些时间来清除屏幕之前的图像。
我的项目结构:
hangman.py
hangman
/img
s0.jpg
s1.jpg
...
s8.jpg
s9.jpg
还有我的一些代码。希望这是所需的最低数量:
def buttonClick(self):
letter = self.sender().text()
if letter in self.secret:
...
else:
self.lostCount+=1
self.setHanger(self.lostCount)
if self.lostCount == 9:
# empty loop for showing the hidden word AND the last image
self.emptyLoop(2000)
self.word.setText(self.secret)
self.emptyLoop(2000)
self.gameOver(False)
def setHanger(self, elements):
pixmap = QPixmap('img/{}.jpg'.format(elements))
self.hanger.setPixmap(pixmap)
def emptyLoop(self, duration):
loop = QEventLoop()
QTimer.singleShot(duration, loop.quit)
loop.exec_()
我希望在调用gameOver(False)
之前加载最后一个图像。但是有时它根本不加载。而且我在行为上没有任何规律性。我也很好奇为什么脚本运行的程序运行良好,而二进制运行的却不是。我想这都是关于使用PyInstaller的。但为什么?以及将来如何避免这种问题?