gpt4 book ai didi

python - Quamash 和 PyQt5 - 在进程结束时出现额外的窗口

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:07 24 4
gpt4 key购买 nike

美好的一天,我目前正在使用 Quamash 和 PyQt 学习异步进程。我正在尝试转换 https://github.com/harvimt/quamash 中的示例作为一个类(class)。我似乎做错了什么,因为在过程结束时出现了一个额外的窗口。我希望有人能指引我走向正确的方向。

谢谢!

同时使用 Python 3.4、PyQt5。

import sys
import asyncio
import time

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QProgressBar, QMessageBox
from quamash import QEventLoop, QThreadExecutor


class QuamashTrial(QWidget):

def __init__(self):
super(QuamashTrial, self).__init__()

self.initialize_widgets()
loop.run_until_complete(self.master())
QMessageBox.information(self, " ", 'It is done.')

def initialize_widgets(self):
vbox = QVBoxLayout()
self.progress = QProgressBar()
self.progress.setRange(0, 99)
self.progress.show()

self.setLayout(vbox)

@asyncio.coroutine
def master(self):
yield from self.first_50()
with QThreadExecutor(1) as exec:
yield from loop.run_in_executor(exec, self.last_50)

@asyncio.coroutine
def first_50(self):
for i in range(50):
self.progress.setValue(i)
yield from asyncio.sleep(.05)

def last_50(self):
for i in range(50,100):
loop.call_soon_threadsafe(self.progress.setValue, i)
time.sleep(.05)


if __name__ == "__main__":
app = QApplication(sys.argv)
loop = QEventLoop(app)
asyncio.set_event_loop(loop)

with loop:
q = QuamashTrial()
q.show()
loop.run_forever()

最佳答案

首先,调用 show() 函数两次 - 在 __main__ 函数和 initialize_widgets() 函数中。所以这就是你看到额外窗口的原因。其次,如果你使用 loop.run_until_complete(self.master()) 你不需要调用 loop.run_forever() 因为循环在 self 之后停止.master() 完成。

我认为你的主要功能应该是这样的:

if __name__ == "__main__":
app = QApplication(sys.argv)
loop = QEventLoop(app)
asyncio.set_event_loop(loop)

with loop:
q = QuamashTrial()

关于python - Quamash 和 PyQt5 - 在进程结束时出现额外的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43220944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com