Как я могу скрыть statusBar за 5 секунд в PyQt5? - PullRequest
0 голосов
/ 18 марта 2020
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QMainWindow 
from PyQt5.QtGui import QIcon

class App(QMainWindow):
       def __init__(self):
              super().__init__()
              self.title='Hello, world!'
              self.left=10
              self.top=10
              self.width=640
              self.height=480
              self.initUI()

       def initUI(self):
             self.setWindowTitle(self.title)
             self.setGeometry(self.left,self.top,self.width,self.height)
             self.statusBar().showMessage('In progress')
             self.show()

if __name__=='__main__':
       app=QApplication(sys.argv)
       ex=App()
       sys.exit(app.exec_())

Привет, в этом примере кода я пытаюсь скрыть statusBar через 5 секунд. Я предполагаю, что использование self.statusBar (). Hide () - логичный способ, но мне это не удалось. Может ли кто-нибудь помочь мне, пожалуйста, ??

1 Ответ

0 голосов
/ 18 марта 2020

QStatusBar :: showMessage (const QString & message, int timeout = 0)

Скрывает показания нормального состояния и отображает данное сообщение в течение указанного количества миллисекунд (время ожидания). Если время ожидания равно 0 (по умолчанию), сообщение будет отображаться до тех пор, пока не будет вызван слот clearMessage () или пока не будет вызван слот showMessage () для изменения сообщения.

import sys
from PyQt5.QtWidgets import QApplication,QWidget,QMainWindow 
from PyQt5.QtGui import QIcon

class App(QMainWindow):
       def __init__(self):
              super().__init__()
              self.title='Hello, world!'
              self.left=10
              self.top=10
              self.width=640
              self.height=480
              self.initUI()

       def initUI(self):
             self.setWindowTitle(self.title)
             self.setGeometry(self.left,self.top,self.width,self.height)
             self.statusBar().showMessage('In progress', 5000)                  # <<<---
             self.show()

if __name__=='__main__':
       app=QApplication(sys.argv)
       ex=App()
       sys.exit(app.exec_())

enter image description here


Обновление

Я хочу скрыть строку состояния через 5 секунд.


void QTimer :: singleShot (int mse c, const QObject * receive, const char * member)

Эта функция stati c вызывает слот через заданный интервал времени.

Очень удобно использовать эту функцию, потому что вам не нужно беспокоиться о timerEvent или создавать локальный объект QTimer.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QStatusBar 
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QTimer

class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.title='Hello, world!'
        self.setStyleSheet('background: #ff0;')
        self.left=10
        self.top=10
        self.width=640
        self.height=480
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left,self.top,self.width,self.height)
#        self.statusBar().showMessage('In progress', 5000)                  

        self.main_statusbar = QStatusBar()
        self.main_statusbar.setStyleSheet('background: #f00;')
        self.main_statusbar.showMessage('In progress') 
        self.setStatusBar(self.main_statusbar)

        QTimer.singleShot(5000, self.main_statusbar.hide)             # <<<-----


if __name__=='__main__':
    app = QApplication(sys.argv)
    ex = App()
    ex.show()
    sys.exit(app.exec_())
...