PyQt5使用QTimer.singleShot实现标签切换仅显示第二个标签问题求助
问题根因
- 绿色标签
label1创建完成后未调用show()方法,Qt控件默认创建后为隐藏状态,无法直接显示 QTimer.singleShot为异步非阻塞API,调用后不会阻塞当前代码执行,你把切换标签的逻辑直接写在了singleShot之后,代码会立刻执行切换操作,2秒延迟完全没有生效- 需要延迟执行的标签切换逻辑没有绑定到
singleShot的回调槽函数中,空的empty函数没有任何实际作用
修正后完整代码
import sys from PyQt5 import QtCore, QtGui, QtWidgets labelList = [None, None] def firstLabel(frame): label1 = QtWidgets.QLabel(window) label1.setGeometry(240, 80, 40, 40) label1.setStyleSheet("background-color: rgb(20, 87, 30)") labelList[0] = label1 label1.show() # 新增:显示绿色标签 secondLabel(frame) def switchLabel(frame): # 延迟2秒后执行的切换逻辑 label2 = QtWidgets.QLabel(window) label2.setGeometry(20, 40, 200, 120) label2.setStyleSheet("background-color: rgb(255, 75, 20);") label2.show() labelList[1] = label2 labelList[0].hide() def secondLabel(frame): # 把切换逻辑绑定到定时器回调,2秒后自动触发 QtCore.QTimer.singleShot(2000, lambda: switchLabel(frame)) def myFunc(frame): firstLabel(frame) app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setFixedWidth(300) window.setFixedHeight(200) window.setWindowTitle("Window") window.move(100, 50) frame = QtWidgets.QFrame(window) frame.setGeometry(0, 0, 300, 200) frame.setStyleSheet("background-color: rgb(208, 208, 208);") myFunc(frame) window.show() sys.exit(app.exec_())
内容的提问来源于stack exchange,提问作者GrantWard101
相关产品推荐
相关产品推荐

