我是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)
希望这有帮助