2

我是 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()
4

1 回答 1

3

不要使用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_())
...
于 2013-08-19T16:00:40.380 回答