-1

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しかし、クラス内で呼び出されるこの種のエラーはありません。これら 2 つのインスタンスの違いとtimer、クラス全体でアクセスできるように呼び出す方法を教えてください。

4

2 に答える 2

2

onPortSettingsを設定する前に電話をかけていますtimer

    self.on_PortSettings() <-- here

    self.timer = QTimer(self)            
于 2013-03-14T15:25:08.267 に答える
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()
于 2013-03-14T15:27:12.590 に答える