[英]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.