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******")