簡體   English   中英

在python中的布爾語句中給出錯誤

[英]Giving an error in Boolean statement in python

我正在嘗試使用Python,Tkinter創建一個應用程序。 在第47行的該程序中,我使用了布爾語句。 但這給我一個錯誤。 我想使用布爾型語句作為存儲位,並且想在程序中的任何地方使用。

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()

錯誤是:跟蹤(最近一次通話最近):文件“無標題”,第58行SerialViewer()。run()文件“無標題”,第55行,在運行self.update()文件“無標題”,第49行,在如果self.M1:AttributeError:SerialViewer實例沒有屬性“ M1”,則更新

update方法中,僅當數據等於"f1"時才定義self.M1 如果不是,則未定義self.M1 ,因此您會收到此錯誤。

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

我認為您應該在構造函數中初始化M1。 像這樣:

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

因為當您進入更新方法和數據!='f1'時,它會尋找不存在的M1專有性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM