Python中__init__中声明的实例出现"AttributeError

-1 投票
2 回答
2066 浏览
提问于 2025-04-17 19:06

我正在用Python和Qt开发一个应用程序,有些事情我想弄清楚。来看这个代码示例:

import serial

from PySide.QtGui import QMainWindow
from PySide import QtCore, QtGui
from PySide.QtCore import QTimer
from ZumaUI import Ui_MainWindow

class MainWindow(QMainWindow, Ui_MainWindow):
    '''
    MainWindow: this is the class that manages all the functionality.
    '''
    def __init__(self, parent = None):
        '''
        Default Constructor. It can receive a top window as parent. 
        '''
        QMainWindow.__init__(self, parent)
        self.setupUi(self)

        self.serial = serial.Serial()
        self.serial.port = 'COM1'
        self.serial.baudrate = 19200
        self.serial.timeout = 0.5   #make sure that the alive event can be checked from time to time

        self.on_PortSettings()

        self.timer = QTimer(self)            
        self.timer.timeout.connect(self.OnRefresh)
        self.timer.start(150)

        self.on_PortSettings()

    def OnRefresh(self):
        pass

    def on_PortSettings(self):
        self.serial.close()
        self.timer.stop()

当我运行我的代码时,我得到了

"AttributeError: 'MainWindow' object has no attribute 'timer'"

但是我在类里面到处调用的self.serial却没有出现这种错误。那这两个实例有什么区别呢?我应该怎么调用timer,才能让它在整个类中都能访问到呢?

2 个回答

0

这样做:

def __init__(self, parent = None):
    self.timer = None

...

def on_PortSettings(self):
    self.serial.close()
    if self.timer is not None:
        self.timer.stop()
2

你在设置 timer 之前就调用了 onPortSettings

    self.on_PortSettings() <-- here

    self.timer = QTimer(self)            

撰写回答