gpt4 book ai didi

python - 初始化后调用方法不显示应用程序

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:20 25 4
gpt4 key购买 nike

我有一个简单的 PySide Gui,我想展示它,但是当前有一个阻塞任务,这是一个漫长的过程,用项目填充下拉列表。这意味着在下拉列表填充完成之前,UI 不会显示。我想知道有没有办法在尝试填充列表之前强制显示用户界面。我更喜欢显示对话框,这样用户就知道他们在假设工具崩溃或发生其他情况之前打开了该工具。

enter image description here

我正在使用 Qt,因为我的应用程序需要在 PySide 和 PySide2 中运行。我最初尝试使用 qApp.processEvents() 但它似乎在 Qt 包装器中不可用,或者我可能遗漏了一些东西。如果您知道等效项是什么,我很乐意将流程事件作为解决方案。或者,如果有一种优雅的方法可以以某种方式从后台线程填充列表......

from Qt import QtGui, QtCore, QtWidgets


class Form(QtWidgets.QWidget):

def __init__(self, parent=None):
super(Form, self).__init__(parent)
self.resize(200,50)

self.items = QtWidgets.QComboBox()
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.items)
self.setLayout(layout)

# init
self.long_process()

def long_process(self):
for i in range(30000):
self.items.addItem('Item {}'.format(i))


if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
form = Form()
form.show()
sys.exit(app.exec_())

最佳答案

对于这些情况,一个好的选择始终是使用QTimer:

class Form(QtWidgets.QWidget):

def __init__(self, parent=None):
super(Form, self).__init__(parent)
[...]

# init
timer = QtCore.QTimer(self)
timer.timeout.connect(self.on_timeout)
timer.start(0)

def on_timeout(self):
self.items.addItem('Item {}'.format(self.counter))
self.counter += 1
if self.counter == 30000:
self.sender().stop()

关于python - 初始化后调用方法不显示应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48633868/

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