2017-07-21 1 views
-1

J'essaie de créer une application avec Python, Tkinter. Dans ce programme à la ligne 47, j'ai utilisé une déclaration booléenne. Mais cela me donne une erreur. Je veux utiliser l'instruction booléenne comme un bit de mémoire et que vous voulez utiliser n'importe où dans le programme.Donner une erreur dans une instruction booléenne en 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'

Répondre

2

Je pense que vous devriez initialiser M1 dans le constructeur. Comme ceci:!

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

Parce que quand vous entrez dans la méthode de mise à jour et les données = « f1 » il cherche la propriété M1 qui n'existe pas.

+0

Merci beaucoup –

+0

Pas de problème mec! Je suis heureux d'aider –

2

Dans votre méthode update, vous définissez uniquement self.M1 lorsque vos données est égale à "f1". Si ce n'est pas le cas, self.M1 n'est pas défini, vous recevez donc cette erreur.

Pour résoudre ce problème, ajoutez une clause else à votre instruction if auparavant, où self.M1 peut être défini sur false.