tkinter 使用树莓派 GPIO 更改帧

时间:2021-03-11 05:03:54

标签: python tkinter raspberry-pi gpio

情况:我有 tkinter 程序,它有一堆框架,上面有各种标签和按钮。我想通过 GPIO 由 12 位开关控制它们之间的切换。

问题:我不知道如何让帧改变,甚至不知道如何显示。

我试过了:我通读了这篇文章: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()

1 个答案:

答案 0 :(得分:0)

我想我已经成功了。我有点担心内存泄漏,但我必须进行一些长期测试才能确定。

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