Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Qt for Python
  4. How to use sleep() function to refresh text on a label?
QtWS25 Last Chance

How to use sleep() function to refresh text on a label?

Scheduled Pinned Locked Moved Unsolved Qt for Python
4 Posts 4 Posters 2.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    strayaaaa
    wrote on last edited by
    #1

    Hi all :)

    I am trying to display the current time in a label. The below code works, but it is only a static display of the time, and the time does not change every second.

    from asyncio import current_task
    from PyQt5 import QtCore, QtGui, QtWidgets
    import time
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(329, 93)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.label = QtWidgets.QLabel(self.centralwidget)
            self.label.setGeometry(QtCore.QRect(20, 20, 291, 51))
            font = QtGui.QFont()
            font.setPointSize(30)
            self.label.setFont(font)
            self.label.setFrameShape(QtWidgets.QFrame.Box)
            self.label.setAlignment(QtCore.Qt.AlignCenter)
            self.label.setObjectName("label")
            MainWindow.setCentralWidget(self.centralwidget)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
            t = time.localtime()
            current_time = time.strftime("%H:%M:%S", t)
            self.label.setText(str(current_time))
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "Clock"))
    
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        MainWindow = QtWidgets.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    
    

    So I had tried to use the sleep() function to rerun the time function, but that doesn't open a GUI window at all, even though there are no error messages, so the program is running, but a GUI window with the time doesn't appear on the screen.

    Any help would be appreciated. Thanks in advance. :)

    from asyncio import current_task
    from PyQt5 import QtCore, QtGui, QtWidgets
    import time
    
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(329, 93)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.label = QtWidgets.QLabel(self.centralwidget)
            self.label.setGeometry(QtCore.QRect(20, 20, 291, 51))
            font = QtGui.QFont()
            font.setPointSize(30)
            self.label.setFont(font)
            self.label.setFrameShape(QtWidgets.QFrame.Box)
            self.label.setAlignment(QtCore.Qt.AlignCenter)
            self.label.setObjectName("label")
            MainWindow.setCentralWidget(self.centralwidget)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
            while True:
                t = time.localtime()
                current_time = time.strftime("%H:%M:%S", t)
                self.label.setText(str(current_time))
                time.sleep(1)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "Clock"))
    
    if __name__ == "__main__":
        import sys
        app = QtWidgets.QApplication(sys.argv)
        MainWindow = QtWidgets.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    
    
    M 0 2 Replies Last reply
    0
    • S strayaaaa

      Hi all :)

      I am trying to display the current time in a label. The below code works, but it is only a static display of the time, and the time does not change every second.

      from asyncio import current_task
      from PyQt5 import QtCore, QtGui, QtWidgets
      import time
      
      class Ui_MainWindow(object):
          def setupUi(self, MainWindow):
              MainWindow.setObjectName("MainWindow")
              MainWindow.resize(329, 93)
              self.centralwidget = QtWidgets.QWidget(MainWindow)
              self.centralwidget.setObjectName("centralwidget")
              self.label = QtWidgets.QLabel(self.centralwidget)
              self.label.setGeometry(QtCore.QRect(20, 20, 291, 51))
              font = QtGui.QFont()
              font.setPointSize(30)
              self.label.setFont(font)
              self.label.setFrameShape(QtWidgets.QFrame.Box)
              self.label.setAlignment(QtCore.Qt.AlignCenter)
              self.label.setObjectName("label")
              MainWindow.setCentralWidget(self.centralwidget)
              self.statusbar = QtWidgets.QStatusBar(MainWindow)
              self.statusbar.setObjectName("statusbar")
              MainWindow.setStatusBar(self.statusbar)
      
              self.retranslateUi(MainWindow)
              QtCore.QMetaObject.connectSlotsByName(MainWindow)
      
              t = time.localtime()
              current_time = time.strftime("%H:%M:%S", t)
              self.label.setText(str(current_time))
      
          def retranslateUi(self, MainWindow):
              _translate = QtCore.QCoreApplication.translate
              MainWindow.setWindowTitle(_translate("MainWindow", "Clock"))
      
      
      if __name__ == "__main__":
          import sys
          app = QtWidgets.QApplication(sys.argv)
          MainWindow = QtWidgets.QMainWindow()
          ui = Ui_MainWindow()
          ui.setupUi(MainWindow)
          MainWindow.show()
          sys.exit(app.exec_())
      
      

      So I had tried to use the sleep() function to rerun the time function, but that doesn't open a GUI window at all, even though there are no error messages, so the program is running, but a GUI window with the time doesn't appear on the screen.

      Any help would be appreciated. Thanks in advance. :)

      from asyncio import current_task
      from PyQt5 import QtCore, QtGui, QtWidgets
      import time
      
      
      class Ui_MainWindow(object):
          def setupUi(self, MainWindow):
              MainWindow.setObjectName("MainWindow")
              MainWindow.resize(329, 93)
              self.centralwidget = QtWidgets.QWidget(MainWindow)
              self.centralwidget.setObjectName("centralwidget")
              self.label = QtWidgets.QLabel(self.centralwidget)
              self.label.setGeometry(QtCore.QRect(20, 20, 291, 51))
              font = QtGui.QFont()
              font.setPointSize(30)
              self.label.setFont(font)
              self.label.setFrameShape(QtWidgets.QFrame.Box)
              self.label.setAlignment(QtCore.Qt.AlignCenter)
              self.label.setObjectName("label")
              MainWindow.setCentralWidget(self.centralwidget)
              self.statusbar = QtWidgets.QStatusBar(MainWindow)
              self.statusbar.setObjectName("statusbar")
              MainWindow.setStatusBar(self.statusbar)
      
              self.retranslateUi(MainWindow)
              QtCore.QMetaObject.connectSlotsByName(MainWindow)
      
              while True:
                  t = time.localtime()
                  current_time = time.strftime("%H:%M:%S", t)
                  self.label.setText(str(current_time))
                  time.sleep(1)
      
          def retranslateUi(self, MainWindow):
              _translate = QtCore.QCoreApplication.translate
              MainWindow.setWindowTitle(_translate("MainWindow", "Clock"))
      
      if __name__ == "__main__":
          import sys
          app = QtWidgets.QApplication(sys.argv)
          MainWindow = QtWidgets.QMainWindow()
          ui = Ui_MainWindow()
          ui.setupUi(MainWindow)
          MainWindow.show()
          sys.exit(app.exec_())
      
      
      M Offline
      M Offline
      mchinand
      wrote on last edited by
      #2

      Use a QTimer instead of sleep() and an infinite loop. https://pythonpyqt.com/qtimer/

      1 Reply Last reply
      2
      • S strayaaaa

        Hi all :)

        I am trying to display the current time in a label. The below code works, but it is only a static display of the time, and the time does not change every second.

        from asyncio import current_task
        from PyQt5 import QtCore, QtGui, QtWidgets
        import time
        
        class Ui_MainWindow(object):
            def setupUi(self, MainWindow):
                MainWindow.setObjectName("MainWindow")
                MainWindow.resize(329, 93)
                self.centralwidget = QtWidgets.QWidget(MainWindow)
                self.centralwidget.setObjectName("centralwidget")
                self.label = QtWidgets.QLabel(self.centralwidget)
                self.label.setGeometry(QtCore.QRect(20, 20, 291, 51))
                font = QtGui.QFont()
                font.setPointSize(30)
                self.label.setFont(font)
                self.label.setFrameShape(QtWidgets.QFrame.Box)
                self.label.setAlignment(QtCore.Qt.AlignCenter)
                self.label.setObjectName("label")
                MainWindow.setCentralWidget(self.centralwidget)
                self.statusbar = QtWidgets.QStatusBar(MainWindow)
                self.statusbar.setObjectName("statusbar")
                MainWindow.setStatusBar(self.statusbar)
        
                self.retranslateUi(MainWindow)
                QtCore.QMetaObject.connectSlotsByName(MainWindow)
        
                t = time.localtime()
                current_time = time.strftime("%H:%M:%S", t)
                self.label.setText(str(current_time))
        
            def retranslateUi(self, MainWindow):
                _translate = QtCore.QCoreApplication.translate
                MainWindow.setWindowTitle(_translate("MainWindow", "Clock"))
        
        
        if __name__ == "__main__":
            import sys
            app = QtWidgets.QApplication(sys.argv)
            MainWindow = QtWidgets.QMainWindow()
            ui = Ui_MainWindow()
            ui.setupUi(MainWindow)
            MainWindow.show()
            sys.exit(app.exec_())
        
        

        So I had tried to use the sleep() function to rerun the time function, but that doesn't open a GUI window at all, even though there are no error messages, so the program is running, but a GUI window with the time doesn't appear on the screen.

        Any help would be appreciated. Thanks in advance. :)

        from asyncio import current_task
        from PyQt5 import QtCore, QtGui, QtWidgets
        import time
        
        
        class Ui_MainWindow(object):
            def setupUi(self, MainWindow):
                MainWindow.setObjectName("MainWindow")
                MainWindow.resize(329, 93)
                self.centralwidget = QtWidgets.QWidget(MainWindow)
                self.centralwidget.setObjectName("centralwidget")
                self.label = QtWidgets.QLabel(self.centralwidget)
                self.label.setGeometry(QtCore.QRect(20, 20, 291, 51))
                font = QtGui.QFont()
                font.setPointSize(30)
                self.label.setFont(font)
                self.label.setFrameShape(QtWidgets.QFrame.Box)
                self.label.setAlignment(QtCore.Qt.AlignCenter)
                self.label.setObjectName("label")
                MainWindow.setCentralWidget(self.centralwidget)
                self.statusbar = QtWidgets.QStatusBar(MainWindow)
                self.statusbar.setObjectName("statusbar")
                MainWindow.setStatusBar(self.statusbar)
        
                self.retranslateUi(MainWindow)
                QtCore.QMetaObject.connectSlotsByName(MainWindow)
        
                while True:
                    t = time.localtime()
                    current_time = time.strftime("%H:%M:%S", t)
                    self.label.setText(str(current_time))
                    time.sleep(1)
        
            def retranslateUi(self, MainWindow):
                _translate = QtCore.QCoreApplication.translate
                MainWindow.setWindowTitle(_translate("MainWindow", "Clock"))
        
        if __name__ == "__main__":
            import sys
            app = QtWidgets.QApplication(sys.argv)
            MainWindow = QtWidgets.QMainWindow()
            ui = Ui_MainWindow()
            ui.setupUi(MainWindow)
            MainWindow.show()
            sys.exit(app.exec_())
        
        
        0 Offline
        0 Offline
        0x4D6F652E51
        wrote on last edited by
        #3

        Use QTimer and connect timeout signal to a slot that updates the text.

        QObject::connect(*timer, &QTimer::timeout, *yourClass, yourClass::updateTextSlot);
        timer->start(6000);
        
        1 Reply Last reply
        1
        • CristianMaureiraC Offline
          CristianMaureiraC Offline
          CristianMaureira
          wrote on last edited by
          #4

          Hey @strayaaaa
          I just pushed a simple example of a digital clock using QTimer to clarify the usage from PySide https://codereview.qt-project.org/c/pyside/pyside-setup/+/424628 (soon to be merged)

          1 Reply Last reply
          2

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved