tkinter 使用 raspberry pi GPIO 更改帧
tkinter change frames with raspberry pi GPIO
情况:我有一个 tkinter 程序,它有一堆带有各种标签和按钮的框架。我想在它们之间切换以通过 GPIO 由 12 位开关控制。
问题:我不知道如何改变框架,甚至无法显示框架。
我试过:我通读了这个 post:Switch between two frames in tkinter 但我不知道如何根据我的目的调整代码。
现在我只是手动分配 'HIGH' 或 'LOW' 值给 switch(sw) 变量进行测试,因为我还没有连接 12 位开关。我想 运行 通过 sw 变量,如果有变化,则将相应的框架带到前面。帧上的数据已存储,因此我不介意破坏未使用的帧。
我的代码:
from tkinter import *
# functions
def raise_frame(frame):
frame.tkraise()
def switch_IO():
for page, position in zip(pages, sw_positions):
if position == "HIGH":
raise_frame(page)
print('frame: %s is %s' %(page, position))
else:
page.destroy()
print('frame: %s is %s' %(page, position))
root.after(18000, switch_IO)
print("*****RESTART******")
# variables
sw01 = "LOW"
sw02 = "LOW"
sw03 = "HIGH"
sw04 = "LOW"
sw05 = "LOW"
sw06 = "LOW"
# start tkloop
root = Tk()
root.geometry('1024x600')
f1_env = Frame(root, bg="red")
f2_fc = Frame(root, bg="blue")
f3_alert = Frame(root, bg="green")
f4_hl = Frame(root, bg="yellow")
f5_news = Frame(root, bg="purple")
f6_sys = Frame(root, bg="teal")
f7_set = Frame(root, bg="magenta")
f1_env.grid(row=0, column=0, sticky=N+S+E+W)
f2_fc.grid(row=0, column=0, sticky=N+S+E+W)
f3_alert.grid(row=0, column=0, sticky=N+S+E+W)
f4_hl.grid(row=0, column=0, sticky=N+S+E+W)
f6_sys.grid(row=0, column=0, sticky=N+S+E+W)
f7_set.grid(row=0, column=0, sticky=N+S+E+W)
# lists
sw_positions = [sw01, sw02, sw03, sw04, sw05, sw06]
pages = [f1_env, f2_fc, f3_alert, f4_hl, f5_news, f6_sys]
# function calls
raise_frame(f1_env)
switch_IO()
root.mainloop()
我想我成功了。我有点担心内存泄漏,但我必须进行一些长期测试才能确定。
def switch_IO():
for page, position in zip(pages, sw_positions):
if position == "HIGH":
page.tkraise()
print('frame: %s is %s' %(page, position))
root.after(1800, switch_IO)
print("*****RESTART******")
情况:我有一个 tkinter 程序,它有一堆带有各种标签和按钮的框架。我想在它们之间切换以通过 GPIO 由 12 位开关控制。
问题:我不知道如何改变框架,甚至无法显示框架。
我试过:我通读了这个 post:Switch between two frames in tkinter 但我不知道如何根据我的目的调整代码。
现在我只是手动分配 'HIGH' 或 'LOW' 值给 switch(sw) 变量进行测试,因为我还没有连接 12 位开关。我想 运行 通过 sw 变量,如果有变化,则将相应的框架带到前面。帧上的数据已存储,因此我不介意破坏未使用的帧。
我的代码:
from tkinter import *
# functions
def raise_frame(frame):
frame.tkraise()
def switch_IO():
for page, position in zip(pages, sw_positions):
if position == "HIGH":
raise_frame(page)
print('frame: %s is %s' %(page, position))
else:
page.destroy()
print('frame: %s is %s' %(page, position))
root.after(18000, switch_IO)
print("*****RESTART******")
# variables
sw01 = "LOW"
sw02 = "LOW"
sw03 = "HIGH"
sw04 = "LOW"
sw05 = "LOW"
sw06 = "LOW"
# start tkloop
root = Tk()
root.geometry('1024x600')
f1_env = Frame(root, bg="red")
f2_fc = Frame(root, bg="blue")
f3_alert = Frame(root, bg="green")
f4_hl = Frame(root, bg="yellow")
f5_news = Frame(root, bg="purple")
f6_sys = Frame(root, bg="teal")
f7_set = Frame(root, bg="magenta")
f1_env.grid(row=0, column=0, sticky=N+S+E+W)
f2_fc.grid(row=0, column=0, sticky=N+S+E+W)
f3_alert.grid(row=0, column=0, sticky=N+S+E+W)
f4_hl.grid(row=0, column=0, sticky=N+S+E+W)
f6_sys.grid(row=0, column=0, sticky=N+S+E+W)
f7_set.grid(row=0, column=0, sticky=N+S+E+W)
# lists
sw_positions = [sw01, sw02, sw03, sw04, sw05, sw06]
pages = [f1_env, f2_fc, f3_alert, f4_hl, f5_news, f6_sys]
# function calls
raise_frame(f1_env)
switch_IO()
root.mainloop()
我想我成功了。我有点担心内存泄漏,但我必须进行一些长期测试才能确定。
def switch_IO():
for page, position in zip(pages, sw_positions):
if position == "HIGH":
page.tkraise()
print('frame: %s is %s' %(page, position))
root.after(1800, switch_IO)
print("*****RESTART******")