How to use sleep() function to refresh text on a label?
-
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_())
-
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_())
Use a QTimer instead of sleep() and an infinite loop. https://pythonpyqt.com/qtimer/
-
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_())
Use QTimer and connect timeout signal to a slot that updates the text.
QObject::connect(*timer, &QTimer::timeout, *yourClass, yourClass::updateTextSlot); timer->start(6000);
-
Hey @strayaaaa
I just pushed a simple example of a digital clock usingQTimer
to clarify the usage from PySide https://codereview.qt-project.org/c/pyside/pyside-setup/+/424628 (soon to be merged)