(May-31-2020, 08:22 PM)DreamingInsanity Wrote:(May-31-2020, 08:08 PM)penahuse Wrote: Mate, you almost got it..Hopefully the last time now!
now if button M is not pressed it do nothing but if the the M is pressed before button1 and button2 it need to "do some"
right now with this code if I presse M before button 1 and button 2 nothing happens
def button1_pressed(): # Returns true if the left mouse button is pressed button1_state = win32api.GetAsyncKeyState(0x01) return bool(button1_state) def button2_pressed(): # Returns true if the right mouse button is pressed button2_state = win32api.GetAsyncKeyState(0x02) return bool(button2_state) def button3_pressed(): # Returns true if the M button is pressed button3_state = win32api.GetAsyncKeyState(0x4D) return bool(button3_state) isMPressed = False while True: isMPressed = True if button3_pressed() else False while button1_pressed() and button2_pressed() and not isMPressed: isMPressed = False print("do some") while button3_pressed(): # Only if it is pressed after button1 and button2 are pressed print("do some2") if button2_pressed() == 0: break # this only breaks the inner while loopIn theory this should work because it checks if 'M' is pressed before it checks if the mouse is pressed. If 'M' is pressed then is stops the while loop from running. However, if 'M' isn't pressed but the mouse is, then it goes into the second while loop which sets 'isMPressed' to false because now it doesn't matter if 'M' is pressed because the mouse already is.
The idea was good, but got the same result as your last try. If M is pressed before button1 and button2 nothing happens. The rest, however is working like expected!
(May-31-2020, 08:13 PM)Yoriz Wrote: 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
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()
I will try to understand it before test because your code is much levels above my knowledge level (and probably above my inteligence too)