运行一个函数直到完成另一个函数

2024-04-26 04:01:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是在创建label2之前使label1(绿色)可见,并将其隐藏在secondLabel的末尾,但当我运行此代码时,它只显示label2(橙色)。 (在我的实际代码中,加载第二个函数需要很长时间,这就是我添加singleshot的原因)

只有绿色标签可见->;(大约两秒钟)——>;只有橙色标签可见

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

labelList = [None, None]

def empty():
    pass

def firstLabel(frame):
    label1 = QtWidgets.QLabel(window)
    label1.setGeometry(240, 80, 40, 40)
    label1.setStyleSheet("background-color: rgb(20, 87, 30)")
    labelList[0] = label1
    secondLabel(frame)

def secondLabel(frame):
    timer = QtCore.QTimer(window)
    timer.singleShot(2000, empty)
    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 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_())

Tags: defsysrgbwindowframecolorbackground绿色
1条回答
网友
1楼 · 发布于 2024-04-26 04:01:42

我设法用时间模块解决了这个问题。这并不理想,但适用于这种情况

import time
import threading
import sys
from PyQt5 import QtCore, QtGui, QtWidgets

labelList = [None, None]

def empty():
    pass

def firstLabel(frame):
    label1 = QtWidgets.QLabel(window)
    label1.setGeometry(240, 80, 40, 40)
    label1.setStyleSheet("background-color: rgb(20, 87, 30)")
    labelList[0] = label1
    secondLabel(frame)

def secondLabel(frame):
    time.sleep(2)
    labelList[1].show()
    labelList[0].hide()

def myFunc(frame):
    timer.singleShot(2000, empty)

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);")

timer = QtCore.QTimer(window)
label1 = QtWidgets.QLabel(window)
label1.setGeometry(240, 80, 40, 40)
label1.setStyleSheet("background-color: rgb(20, 87, 30)")
labelList[0] = label1

label2 = QtWidgets.QLabel(window)
label2.setGeometry(20, 40, 200, 120)
label2.setStyleSheet("background-color: rgb(255, 75, 20);")
label2.hide()
labelList[1] = label2

threading.Thread(target = secondLabel, args = (frame,), daemon = True).start()

window.show()
sys.exit(app.exec_())

相关问题 更多 >