【问题标题】:Giving an error in Boolean statement in python在 python 中的布尔语句中给出错误
【发布时间】:2017-07-21 13:31:53
【问题描述】:

我正在尝试用 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()

错误是:Traceback(最近一次调用最后一次):文件“无标题”, 第 58 行 SerialViewer().run() 文件“无标题”,第 55 行,运行中 self.update() 文件“无标题”,第 49 行,更新中 if self.M1: AttributeError: SerialViewer instance has no attribute 'M1'

【问题讨论】:

    标签: python python-2.7 tkinter pyserial


    【解决方案1】:

    我认为你应该在构造函数中初始化 M1。像这样:

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

    因为当您进入 update 方法和数据 != 'f1' 时,它会寻找不存在的 M1 属性。

    【讨论】:

      【解决方案2】:

      在您的update 方法中,仅当您的数据等于"f1" 时才定义self.M1。如果不是,则self.M1 未定义,因此您会收到此错误。

      要解决此问题,请在之前的 if 语句中添加 else 子句,其中 self.M1 可以设置为 false。

      【讨论】:

        猜你喜欢
        • 2016-04-28
        • 2019-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 2014-09-12
        • 1970-01-01
        • 2018-02-24
        相关资源
        最近更新 更多