我在PyQt4中进行测验应用程序,有3个主要的生成器:
Incorrect
,Correct
和Timeout
。
所有答案都连接到Scorecheck功能:
def scorecheck(self, sendercheck):
if ( sendercheck == self.answ ) or ( sendercheck == self.answ1 ) or ( sendercheck == self.answ5 ) or ( sendercheck == self.answ7 ) or ( sendercheck == self.answ8 ) or ( sendercheck == self.answ10 ):
self.wronganswers.append(1)
elif ( sendercheck == self.answ2 ) or ( sendercheck == self.answ4 ) or ( sendercheck == self.answ9 ):
self.correctanswers.append(1)
elif sendercheck == self.tmr3:
self.timeouts.append(1)
print "Worked"
print len(self.timeouts)
else:
pass
self.wronganswerlabel = QtGui.QLabel(str(len(self.wronganswers)), self)
self.wronganswerlabel.setGeometry(220, 40, 200, 200)
self.wronganswerlabel.setObjectName('wronganswercount')
self.wronganswerlabel.setStyleSheet("#wronganswercount { font-size: 31pt; color: white; border: none; }")
self.timeoutlabel = QtGui.QLabel(str(len(self.timeouts)), self)
self.timeoutlabel.setGeometry(480, 80, 200, 200)
self.timeoutlabel.setObjectName('timeoutlabel')
self.timeoutlabel.setStyleSheet("#timeoutlabel { font-size: 31pt; color: white; border: none; }")
self.correctanswerlabel = QtGui.QLabel(str(len(self.correctanswers)), self)
self.correctanswerlabel.setGeometry(1050, 40, 200, 200)
self.correctanswerlabel.setObjectName('correctanswercount')
self.correctanswerlabel.setStyleSheet("#correctanswercount { font-size: 31pt; color: white; border: none }")
summary = len(self.correctanswers) + 100 - len(self.wronganswers) - len(self.timeouts) % 10
if summary < 0:
while summary < 0:
summary += 1
self.summarylabel = QtGui.QLabel(str(summary), self)
self.summarylabel.setGeometry(850, 222, 200, 200)
self.summarylabel.setObjectName('summary')
self.summarylabel.setStyleSheet("#summary { font-size: 40pt; color : white; border: none }")
当丢失计数达到3时,它将激活游戏切换功能,其中将显示标签。
wronganswerslabel和correctanswerslabel正常显示所有内容,但timeoutlabel显示为0。
但我在得分检查和配对功能的一般部分添加了print len(timeouts)
,所有结果都等于1.
我试过这个:
self.timeouts.append(1)
self.timeouts.append(1)
奇怪的是它在标签中显示了2。
我还尝试过多处理记分检查功能,认为这是性能问题,但没有更新。
问题可能是什么?为什么timeoutlabel显示0而其他所有显示正确的数字?这是因为表现还是输入不正确?
答案 0 :(得分:0)
我已经修复了问题:
功能顺序:
2 3 2 3 1 2 3 4 5
2
位于标签定义的顶部。
3
位于标签定义的底部。
1
是sendercheck超时声明。 (重要)
4
位于显示标签的顶部。
5
。
定义了计时器:
self.tmr3 = QtCore.QTimer(self)
self.tmr3.setSingleShot(True)
self.tmr3.timeout.connect(partial(self.Timeout, self.tmr3)) # It connects to timeout first, thats why sequence is going wrong.
self.tmr3.timeout.connect(partial(self.scorecheck, self.tmr3))
self.tmr3.timeout.connect(partial(self.checkifout, self.tmr3))
通过在第一个超时信号处添加scorecheck来修复它:
self.tmr3 = QtCore.QTimer(self)
self.tmr3.setSingleShot(True)
self.tmr3.timeout.connect(partial(self.scorecheck, self.tmr3))
self.tmr3.timeout.connect(partial(self.Timeout, self.tmr3))
self.tmr3.timeout.connect(partial(self.checkifout, self.tmr3))