繁体   English   中英

QLabel没有显示在小部件中

[英]QLabel not showing in widget

我正在为心理学实验编写程序。

向参与者显示了描绘三个对象碰撞的5种动画变体。 动画的显示顺序取决于确定顺序的不同函数的输出(这是每个参与者的动画顺序都不同)。

由于动画非常相似,它们是由单个函数触发的,该函数内部具有条件以控制对象的运动。 此功能是一个插槽,连接到5个按钮(每个按钮在不同的页面上)。 当按下按钮之一时,将显示适当的动画。

我遇到的问题是,对于第一个动画,对象完美地显示在窗口中。 但是,当我单击进入第二,第三,第四和第五个动画时,这些对象根本不会显示在屏幕上。

这是我在插槽中的代码:

trialWidgets = [ui.trialWidget_1, ui.trialWidget_2, ui.trialWidget_3, ui.trialWidget_4, ui.trialWidget_5]
print('trialwidgets=', trialWidgets)

trialWidget = trialWidgets[currentTrialIndex]
print('trialwidget=',trialWidget)

preTrialTimeMs = 1000
waitTimes = int(preTrialTimeMs/msPerFrame)

A = movingObject(startingPositionAx, startingPositionAy, diameter, 'blueCircleA.png', trialWidget)
B = movingObject(startingPositionAx + (horizontalDistance * 2), startingPositionAy, diameter, 'blueCircleB.png', trialWidget)
C = movingObject(startingPositionAx + (horizontalDistance), startingPositionAy - verticleDistance, diameter, 'blueCircleC.png', trialWidget)

print('parentOfA=', A.parent())

每次调用插槽时currentTrialIndex都会更新,以确保每次调用函数时都会更改放置对象的窗口小部件(通过读取excel文件来确定参与者所处的试用版来更新currentTrialIndex,这是在其他地方完成的在文件中)

我的程序中有打印语句,因此我可以检查每个试验的值是否正确更新...例如,这是显示第一个动画时的打印输出(此动画正确显示)。 如您所见,试用窗口小部件列表中第一个对象的编号与打印的试用窗口小部件和A的父代相匹配。

index= 0
trialwidgets= [<PyQt5.QtWidgets.QWidget object at 0x115e37708>, 
<PyQt5.QtWidgets.QWidget object at 0x115e3d3a8>, 
<PyQt5.QtWidgets.QWidget object at 0x115e40048>, 
<PyQt5.QtWidgets.QWidget object at 0x115e42ca8>, 
<PyQt5.QtWidgets.QWidget object at 0x1176a6948>]

trialwidget= <PyQt5.QtWidgets.QWidget object at 0x115e37708>
parentOfA= <PyQt5.QtWidgets.QWidget object at 0x115e37708>

当第二个动画应该显示时她是我的打印输出,但不显示。 如您所见,试用版窗口小部件列表中第二个对象的编号与打印的试用版窗口小部件和A的父代相匹配,这是我所期望的,并且鉴于值似乎正确,我认为我的程序可以运行。

index= 1
trialwidgets= [<PyQt5.QtWidgets.QWidget object at 0x115e37708>, 
<PyQt5.QtWidgets.QWidget object at 0x115e3d3a8>, 
<PyQt5.QtWidgets.QWidget object at 0x115e40048>, 
<PyQt5.QtWidgets.QWidget object at 0x115e42ca8>, 
<PyQt5.QtWidgets.QWidget object at 0x1176a6948>]
trialwidget= <PyQt5.QtWidgets.QWidget object at 0x115e3d3a8>
parentOfA= <PyQt5.QtWidgets.QWidget object at 0x115e3d3a8>

我尝试了一些不同的操作,包括将其他对象直接分配给第2-5个窗口小部件。 它们出现了,所以我知道这与小部件无关。

为什么小部件仅在第一次试用时显示?

如果有帮助,这里有一些动画代码。 我不确定它是否相关,但是当我评论以下内容时,这些对象仍然没有出现在屏幕上

window.timerCount = 0

def moveObjects():
    window.timerCount += 1

    if currentCondition == 'incongruent':
        incHorC = incHorTouch
        incVerC = incVerTouch
    elif currentCondition == 'congruent':
        incHorC = -incHorTouch
        incVerC = incVerTouch
    elif currentCondition == 'indiscriminate':
        incHorC = 0
        incVerC = verticleDistance / noOfTimes
    elif currentCondition == 'nearIncongruent':
        incHorC = incHorN
        incVerC = incVerN
    else:
        incHorC = -incHorN
        incVerC = incVerN

    if currentSide == 'collidesA':
        incHorA = incHorTouch
        incVerA = incVerTouch
        incHorB = incHorGap - 1
        incVerB = incVerGap - 1
        bCanMove = window.timerCount > waitTimes and B.y() - incVerB > gapVerEndPoint
        aCanMove = window.timerCount > waitTimes and window.timerCount <= noOfTimes + waitTimes


    else:
        incHorB = incHorTouch
        incVerB = incVerTouch
        incHorA = incHorGap - 1
        incVerA = incVerGap - 1
        incHorC = -incHorC
        bCanMove = window.timerCount > waitTimes and window.timerCount <= noOfTimes + waitTimes
        aCanMove = window.timerCount > waitTimes and A.y() - incVerA > touchVerEndPoint

    if window.timerCount >= noOfTimes + waitTimes:
        C.setGeometry(C.x() - incHorC, C.y() - incVerC, diameter, diameter)

    if aCanMove:
        A.setGeometry(A.x() + (incHorA), A.y() - (incVerA), diameter, diameter)

    if bCanMove:
        B.setGeometry(B.x() - (incHorB), B.y() - (incVerB), diameter, diameter)

    if window.timerCount > (noOfTimes * 2) + waitTimes:
        A.hide()
        B.hide()
        C.hide()

    if window.timerCount > (noOfTimes * 2) + (waitTimes*2):
        ui.experimentWindows.setCurrentIndex(ui.experimentWindows.currentIndex()+1)
        window.animationTimer.stop()

window.animationTimer = QTimer()
window.animationTimer.timeout.connect(moveObjects)
window.animationTimer.start(msPerFrame)

我现在已经解决了。 我已经将QLabels隐藏在动画功能中,但是忘记了以后再显示它们。

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM