问题:python 在关闭其端口后仍然读取来自 arduino 的串行数据.串口无法关闭



我是tkinter的新手,使用python 3.4。我正在使用顶级窗口开发一个GUI,并从Arduino获取串行数据。这里唯一的问题是,每当从"类PETwithSC"中单击"home"的按钮时,python仍然读取类StartPage中的数据并关闭GUI。单击主页按钮后,我需要关闭串行端口。请帮忙。谢谢!

这是代码

from tkinter import *
import serial
import time
class StartPage() 
def __init__(self,master)
self.master = master
self.master attributes('-fullscreen','true') 
self.button = Button(self.master, command=self.pageOne)
self.button.pack() 
def pageOne(self)
self.master.withdraw()
self.pick = Toplevel(self.master)
self.game = PETwithSC(sef.pick)
class PETwithSC()
def __init__(self,master)
self.master = master
self.master attributes('-fullscreen','true')
###### Home button
self.button = Button(self.master, command=self.home)
self.button.pack()
self.data = StringVar()
self.label = Label(self.master, textvariable = self.data)
self.label.pack()
self.master.after(1000,self.serial)
def serial(self)
self.ser = serial.Serial("/dev/ttyACM0",9600,timeout=0.1)
self.ser.write(b'1') ##commanding the arduino to read the smartcard info
self.info = self.ser.readline()
self.data.set(self.info)
self.master.after(1000,self.serial)
print (A)
def home(self)
self.ser.close()
self.master.withdraw()
self.pick = Toplevel(self.master)
self.game = StartPage(sef.pick)
if __name__ == "__main__":
app = Tk()
myGUI = StartPage(app)
app.mainloop

因为self.serial()在循环中运行:self.master.after(1000, self.serial),并且每次都打开串行端口:self.ser = serial.Serial("/dev/ttyACM0",9600,timeout=0.1),只需关闭串行端口,self.master.withdraw()不会阻止接下来的1次self.serial再次打开它。尝试在每次使用后关闭端口:

def serial(self)
self.ser = serial.Serial("/dev/ttyACM0",9600,timeout=0.1)
self.ser.write(b'1') ##commanding the arduino to read the smartcard info
self.info = self.ser.readline()
self.ser.close()                   #closing here
self.data.set(self.info)
self.master.after(1000,self.serial)
print (A)

并将其从self.home()中删除:

def home(self)
self.master.withdraw()            #rather than here
self.pick = Toplevel(self.master)
self.game = StartPage(sef.pick)

另外,错别字:

self.game = PETwithSC(sef.pick)

应该是:

self.game = PETwithSC(self.pick)

希望这有帮助

最新更新