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()
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'
在您的 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 专有性。
我正在尝试使用 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()
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'
在您的 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 专有性。