Python中__init__中声明的实例出现"AttributeError
我正在用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)