2017-07-21 45 views
-1

我正在嘗試使用Python Tkinter創建應用程序。在第47行的這個程序中,我使用了布爾語句。但它給了我一個錯誤。我想使用布爾語句作爲內存位,並希望在程序中的任何地方使用。在Python中的布爾語句中給出錯誤

import serial 
import Tkinter 
from Tkinter import * 
class SerialViewer: 
    def __init__(self): 
     self.win = Tk() 
     self.ser = serial.Serial('com8',9600) 

    def bt1 (self): 
     self.ser.write('on') 

    def bt2 (self): 
     self.ser.write('off') 

    def bt3 (self): 
     self.ser.write(self.v.get()) 

    def makewindow (self): 
     frame1 = Frame(self.win) 
     frame1.pack(side = LEFT) 
     b1 = Button(frame1, text = "ON", command = self.bt1) 
     b2 = Button(frame1, text = "OFF", command = self.bt2) 
     b1.grid(row = 0, column = 0) 
     b2.grid(row = 0, column = 1) 

     frame2 = Frame(self.win) 
     frame2.pack() 
     self.v = StringVar() 
     r1 = Radiobutton(frame2,text = 'on', variable = self.v, value = 'on') 
     r2 = Radiobutton(frame2,text = 'off', variable = self.v, value = 'off') 
     r1.select() 
     b3 = Button(frame2, text = 'send', command = self.bt3) 
     b3.pack(sid = RIGHT, padx = 5) 
     r1.pack(side = LEFT) 
     r2.pack(side = LEFT) 

     frame3 = Frame(self.win) 
     frame3.pack() 
     self.d = StringVar() 
     self.d.set('default') 
     label = Label(frame3, textvariable = self.d, relief = RAISED) 
     label.pack(side = RIGHT) 

    def update(self): 
     data = self.ser.readline(self.ser.inWaiting()) 
     self.d.set(data) 
     if data == 'f1': 
      self.M1 = True 
     if self.M1: 
      print("ok tested") 
     self.win.after(100,self.update) 

    def run(self): 
     self.makewindow() 
     self.update() 
     self.win.mainloop() 

SerialViewer().run() 

The error is:Traceback (most recent call last): File "Untitled", line 58 SerialViewer().run() File "Untitled", line 55, in run self.update() File "Untitled", line 49, in update if self.M1: AttributeError: SerialViewer instance has no attribute 'M1'

回答

2

我想你應該在構造函數中初始化M1。就像這樣:!

def __init__(self): 
     self.win = Tk() 
     self.ser = serial.Serial('com8',9600) 
     self.M1 = False 

因爲當你進入更新方法和數據=「F1」它的目的,不存在M1禮。

+0

非常感謝你 –

+0

沒問題的人!我很樂意提供幫助 –

2

在你update方法,你只有當你的數據等於"f1"定義self.M1。如果不是,則self.M1未定義,因此您會收到此錯誤。

要解決該問題,請在之前的if語句中添加else子句,其中self.M1可以設置爲false。