【问题标题】:PySide / wait or sleepPySide / 等待或睡眠
【发布时间】:2013-08-19 15:37:43
【问题描述】:

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

【问题讨论】:

    标签: pyside


    【解决方案1】:

    不要使用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_())
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 2012-10-29
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      相关资源
      最近更新 更多