情况:我有 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()
答案 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******")