比赛倒计时小部件

时间:2016-11-17 07:33:57

标签: python pyqt

我是python的新手,我真的希望得到一些帮助。

我正在尝试为自动槽车圈计数/计时器创建一个应用程序。 比赛开始前我需要一些倒计时,我正在使用QLabel。

我希望使用' update_label()'更新此内容。功能,但它似乎不起作用。
我做错了什么?

#!/usr/bin/python3
# -*- coding: utf-8 -*-


import sys, time
from PyQt5.QtWidgets import QWidget, QPushButton, QLabel, QLineEdit, QGridLayout, QApplication, QLCDNumber, QSlider
from PyQt5.QtCore import QCoreApplication, Qt



class race(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        lane1 = QLabel('READY?')

        grid = QGridLayout()
        grid.setSpacing(10)

        grid.addWidget(lane1, 1, 0, 1, 1)

        self.setLayout(grid)


        self.setGeometry(400, 300, 600, 300)
        self.setWindowTitle('Race')
        self.showMaximized()

        self.update_label()

    def update_label(self):
        count = 3
        while count>1:
            time.sleep(1)
            counter = count

            Label = self.lane1.setText(counter)
            timer = QtCore.QTimer()      
            timer.timeout.connect(Label)
            timer.start(10000)

            count = count - 1



if __name__ == '__main__':

    raceApp = QApplication(sys.argv)
    racePanel = race()
    sys.exit(raceApp.exec_())

但是抛出了这个错误:

Traceback (most recent call last):
  File "./race.py", line 58, in <module>
    racePanel = race()
  File "./race.py", line 16, in __init__
    self.initUI()
  File "./race.py", line 35, in initUI
    self.update_label()
  File "./race.py", line 45, in update_label
    Label = self.lane1.setText(counter)
AttributeError: 'race' object has no attribute 'lane1'

1 个答案:

答案 0 :(得分:0)

先生,您的代码是一团糟hahaha ..发生此错误是因为您在下面的方法中没有此标签,应将其声明为“self”。所以这将是全球性的,你可以访问它。

在你定义事物的方式中还有许多其他奇怪的事情。

有一些提示:

  1. 查看python API
  2. 还要查看Qt API
  3. 下载一些简单的代码示例并了解这些工作原理:D 。例如here。如果您愿意,您只需将导入更改为PyQt5。
  4. 反正,

    尝试这样的事情。我做了一些修改......

    #!/usr/bin/python3
    # -*- coding: utf-8 -*-
    
    
    import sys, time
    
    from PyQt5.QtCore import QTimer
    from PyQt5.QtWidgets import QWidget,  QLabel, QGridLayout, QApplication
    
    
    
    class race(QWidget):
        lane1 = None
    
        timer = None
    
        def __init__(self):
            super().__init__()
            self.initUI()
    
    
        def initUI(self):
    
            self.lane1 = QLabel('READY?')
    
            self.timer = QTimer()
    
            self.grid = QGridLayout()
            self.grid.setSpacing(10)
    
            self.grid.addWidget(self.lane1, 1, 0, 1, 1)
    
            self.setLayout(self.grid)
    
    
            self.setGeometry(400, 300, 600, 300)
            self.setWindowTitle('Race')
            self.showMaximized()
    
            self.update_label()
    
        def update_label(self):
    
    
    
            self.timer.start(99999999)
            self.timer.setInterval(999999)
            self.lane1.setText(str(self.timer.remainingTime()))
    
        def paintEvent(self, q_painter_event):
            self.lane1.setText(str(self.timer.remainingTime()))
            super(race, self).paintEvent(q_painter_event)
    
    
    
    if __name__ == '__main__':
    
        raceApp = QApplication(sys.argv)
        racePanel = race()
        sys.exit(raceApp.exec_())
    

    你必须适应你想要的:p