gpt4 book ai didi

python - QDialog.show()方法有延迟 react

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

我有一个问题,我有一段时间无法弄清楚。我有一个主窗口应用程序和一个 QDialog,单击其中一个按钮后应该弹出,但 QDialog 上的 show() 方法似乎正在等待连接到“clicked()”信号的函数结束!我希望对话框在调用 QDialog.show() 方法之后立即显示,而不是在该函数中的所有其他代码指令之后显示...

当然,在我的代码中,我将用更复杂的代码替换 sleep(5) 部分,但这说明了问题,我认为我放在那里的代码与问题无关(数据库连接和更新)更具体地说:

# -*- coding: utf-8 -*-
import sys

import PyQt4
from PyQt4 import QtCore, QtGui
from twython import Twython, TwythonError
from project import Ui_MainWindow
from time import sleep
import psycopg2, globalvals, updater
import updating, noconnection

class UpWindow(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent, QtCore.Qt.WindowStaysOnTopHint)
self.ui = updating.Ui_updating()
self.ui.setupUi(self)

class NoConnection(QtGui.QDialog):
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent, QtCore.Qt.WindowStaysOnTopHint)
self.ui = noconnection.Ui_noConnection()
self.ui.setupUi(self)

QtCore.QObject.connect(self.ui.noConnectionClose, QtCore.SIGNAL("clicked()"), self.close)

class MyCounter(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.noConn = NoConnection(self)
self.upWin = UpWindow(self)

QtCore.QObject.connect(self.ui.refreshButton,QtCore.SIGNAL("clicked()"), self.refresh)
QtCore.QObject.connect(self.ui.manageButton,QtCore.SIGNAL("clicked()"), self.manage)

def refresh(self):
self.upWin.show()
self.upWin.show
self.upWin.setVisible(True)
self.setEnabled(False)
self.upWin.setEnabled(True)
#Thats the issue - the sleep instruction is being held
#BEFORE the showing of upWin QDialog
sleep(5)

def manage(self):
print 'ok'



if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
myapp = MyCounter()
myapp.upcontent()
myapp.show()
sys.exit(app.exec_())

最佳答案

将任何 Qt 程序视为协作多任务系统。图形和事件一般由主循环处理。您不想在任何插槽中停留很长时间,因为库不会同时处理信号(例如按钮单击、重新绘制以及其他内容)。

如果您想要进行一些繁重的处理,或者需要在程序的其余部分正常运行时等待资源,请使用QThread

另一个选择是使用 qApp.processEvents() 强制事件处理(您可以在 QtGui 中找到 qApp),就在您的sleep(5) (或者您要放置的任何代码)。

编辑:现在,请记住,强制事件处理只会显示您尝试弹出的QDialog。如果不再次调用 qApp.processEvents() 或从插槽返回,您将无法使用它执行任何操作(请记住,没有事件处理)。

关于python - QDialog.show()方法有延迟 react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21592202/

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