我正在编写一个模拟铁路信号的程序,该程序最终将在通过ADC接收模拟信号以驱动不同信号颜色的Raspberry Pi上运行。
我对GUI编程非常不好,所以我的问题是,如何编写一个函数来更改每个“ LED”的颜色,每次检测到高电压时最终可以调用该LED?现在,我只想拥有一个函数set_top_signal(“ Green”),可以调用该函数来更新图形。
然后我想编写一个函数,以每半秒打开和关闭信号闪烁一次。 flash_top_signal(“绿色”)
import tkinter as tk
class WaysideSimulator(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
# self.pack()
self.grid()
self.create_widgets()
def create_widgets(self):
self.Searchlight_Button = tk.Button(self, text="Start Simulation", command=self.start_simulation())
# self.Searchlight_Button.pack(side="bottom")
self.Searchlight_Button.grid(row=0, column=0)
self.End_Simulation_Button = tk.Button(self, text="End Simlation", fg="red", command=self.master.destroy)
# self.End_Simulation_Button.pack(side="bottom")
self.End_Simulation_Button.grid(row=1, column=0)
# Draw the Signal Rectangle
self.canvas = tk.Canvas(self, width=500, height=500, bg="white")
# self.rectangle.pack()
self.canvas.grid()
# Draw the Searchlight Signal Heads
self.signal_pole = self.canvas.create_rectangle(245, 20, 255, 500, fill="grey")
self.top_signal_head = self.canvas.create_oval(200, 10, 300, 110, fill="black")
self.middle_signal_head = self.canvas.create_oval(200, 160, 300, 260, fill="black")
self.bottom_signal_head = self.canvas.create_oval(200, 310, 300, 410, fill="black")
self.top_signal_light = self.canvas.create_oval(240, 50, 260, 70, fill="red")
self.middle_signal_light = self.canvas.create_oval(240, 200, 260, 220, fill="yellow")
self.bottom_signal_light = self.canvas.create_oval(240, 350, 260, 370, fill="green")
def set_top_signal_color(self, color):
self.canvas.delete(self.top_signal_light)
self.canvas.delete(self.middle_signal_light)
self.canvas.delete(self.bottom_signal_light)
"""
Signal Color Code Chart:
0 = Black(Off)
1 = Red
2 = Yellow
3 = Green
"""
if color == "Off":
self.top_signal_light = self.canvas.create_oval(240, 50, 260, 70, fill="black")
elif color == "Red":
self.top_signal_light = self.canvas.create_oval(240, 50, 260, 70, fill="red")
elif color == "Yellow":
self.top_signal_light = self.canvas.create_oval(240, 50, 260, 70, fill="yellow")
elif color == "Green":
self.top_signal_light = self.canvas.create_oval(240, 50, 260, 70, fill="green")
def start_simulation(self):
print("Searchlight Simulation Started")
def main():
root = tk.Tk()
root.title("Searchlight Simulator")
root.geometry("500x525")
root.resizable(0, 0)
s1 = WaysideSimulator(master=root)
s1.mainloop()
if __name__ == '__main__':
main()
答案 0 :(得分:0)
我最近问了一个类似的问题,关于旋转骰子图像以模拟一对骰子滚动。也许,如果您需要做的只是将“旋转”为新的“信号”图像,那么您可以从我在此链接上发布的工作代码中删除所需的内容(请提供acw1668的帮助,如果没有他们的帮助,我就不会到达工作版本) !):
Tkinter, python 3.8.1, win10Pro, How can I change a label image?