May-31-2020, 08:13 PM
You need an extra variable to keep track of if do_some was running first or not.
I have tried creating it with tkinter does this give the functionality you are looking for
I have tried creating it with tkinter does this give the functionality you are looking for
import tkinter as tk class Toggle_button(tk.Button): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.button_name = kwargs['text'] self.button_on = False self.set_button_state() self.bind('<Button-1>', self.on_button) def on_button(self, event): self.button_on = not self.button_on self.set_button_state() def set_button_state(self): button_state = 'On' if not self.button_on: button_state = 'Off' self.configure(text=f'{self.button_name} {button_state}') class running_label(tk.Label): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.label_name = kwargs['text'] self.running(False) def running(self, is_running=True): running_state = 'Running' if not is_running: running_state = 'Not Running' self.configure(text=f'{self.label_name}: {running_state}') class MainFrame(tk.Frame): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.button1 = Toggle_button(self, text='Button1') self.button1.pack(pady=5) self.button2 = Toggle_button(self, text='Button2') self.button2.pack(pady=5) self.button3 = Toggle_button(self, text='Button3') self.button3.pack(pady=5) self.do_some_label = running_label(self, text='do some') self.do_some_label.pack(pady=5) self.do_some2_label = running_label(self, text='do some2') self.do_some2_label.pack(pady=5) self.pack() self.do_some_first = False self.update_state() def update_state(self): do_some = self.button1.button_on and self.button2.button_on do_some2 = self.button3.button_on if do_some and not do_some2: self.do_some_first = True elif not do_some: self.do_some_first = False if not self.do_some_first: do_some2 = False self.do_some_label.running(do_some) self.do_some2_label.running(do_some2) self.after(500, self.update_state) if __name__ == '__main__': app = tk.Tk() main_frame = MainFrame() app.mainloop()