PyQt:标签没有显示正确的长度

时间:2016-05-09 08:14:28

标签: python pyqt pyqt4

我在PyQt4中进行测验应用程序,有3个主要的生成器:

IncorrectCorrectTimeout

所有答案都连接到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而其他所有显示正确的数字?这是因为表现还是输入不正确?

1 个答案:

答案 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))