PySide /等待或睡眠

时间:2013-08-19 15:37:44

标签: pyside

我是python和pyside的新手。我会尝试成功运行以下代码。但现在我希望程序在显示窗口一段时间后等待用户无法使用它然后升级状态栏。我会尝试sleep()但不知道它必须在代码中放置正确的方式。谢谢你的帮助。

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
ZetCode PySide tutorial 

This program creates a statusbar.

author: Jan Bodnar
website: zetcode.com 
last edited: August 2011
"""

import sys, time
from PySide import QtGui

class Main(QtGui.QMainWindow):

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

        self.initUI()

    def initUI(self):               

    exitAction = QtGui.QAction(QtGui.QIcon('exit.png'), '&Exit', self)
    exitAction.setShortcut('Ctrl+Q')
    exitAction.setStatusTip('Exit application')
    exitAction.triggered.connect(self.close)        

    self.statusBar().showMessage('no connection')

    menubar = self.menuBar()
    fileMenu = menubar.addMenu('&File')
    fileMenu.addAction(exitAction)

    self.setGeometry(100, 100, 400,300)
        self.setWindowTitle('Main')    
        self.show() 

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Main()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:3)

请勿使用sleep。 Sleep只会阻止活动事件循环,用户仍然可以在GUI中的任何位置单击,并且在sleep返回后事件将被延迟传递。

如果要禁用用户交互,请禁用窗口小部件(并使用计时器重新启用它)。您案例中的一个简单示例可能如下所示:

...
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Main()
    ex.setEnabled(False)
    QtCore.QTimer.singleShot(4000, lambda: es.setEnabled(True))
    sys.exit(app.exec_())
...