Quantcast
Channel: Active questions tagged python - Stack Overflow
Viewing all articles
Browse latest Browse all 23131

Tkinter touchscreen taps only works when mouse hovering in window

$
0
0

I am using Tkinter for my camera's control to tweak shutter speed and analog gain. I am able to tweak both settings via mouse and take pictures using a button via GPIO.

After testing on my touchscreen however, I realised that the buttons did not respond when tapped upon via touchscreen, unless my mouse is on the window/canvas.

I am using Raspberry Pi Bookworm.

I have searched and came upon a few solutions such as binding to Button-1 which I've declared in my for loop to no avail.(button.bind("", command)).

I've also tried using xte 'movemouse 0 0' to move my cursor to where my camera controls would be but it did not seem to move.

Below is a snippet of how can I declared Tkinter. Do let me know if more code is required.

def switch_to_photo_config():    global camera_config    picam2.stop()    picam2.configure(camera_config)    picam2.start()def switch_to_video_config():    picam2.stop()    picam2.configure(picam2.create_video_configuration())    picam2.start()def minimize_window():    root.withdraw()    minimize_button.place_forget()    restore_button.place(x=10, y=10)def restore_window():    root.deiconify()    restore_button.place_forget()    minimize_button.place(x=10, y=10)def exit_app():    picam2.stop_preview()    root.destroy()    sys.exit()def toggle_mode():    global picture_or_video    picture_or_video = not picture_or_video    if picture_or_video:        switch_to_photo_config()    else:        switch_to_video_config()    updatecameracontrols()    update_labels()def update_labels():    global current_shutter_speed, analoglevel    shutter_label.config(text=f"Shutter Speed: {current_shutter_speed}")    analog_label.config(text=f"Analogue Level: {analoglevel}")    mode_label.config(text=f"Mode: {'Camera' if picture_or_video else 'Video'}")def updatecameracontrols():    global current_speed_index, analoglevel, current_shutter_speed    current_shutter_speed = shutter_speed_values[current_speed_index]    picam2.set_controls({"ExposureTime": shutter_speed_values[current_speed_index],"AnalogueGain": analoglevel    })    update_labels()def shutterup():    global current_speed_index    current_speed_index -= 1    if current_speed_index < 0:        current_speed_index = 0    updatecameracontrols()def shutterdown():    global current_speed_index    current_speed_index += 1    if current_speed_index >= len(shutter_speed_values):        current_speed_index = len(shutter_speed_values) - 1    updatecameracontrols()def analogup():    global analoglevel    analoglevel += 1    updatecameracontrols()def analogdown():    global analoglevel    analoglevel -= 1    updatecameracontrols()root = tk.Tk()root.title("Camera Interface")root.attributes("-topmost", True)root.overrideredirect(True)root.attributes('-alpha', 0.0)screenwidth = root.winfo_screenwidth()screenheight = root.winfo_screenheight()xpos = 0ypos = 120root.geometry(f"{screenwidth // 4}x{screenheight}+{xpos}+{ypos}")button_window = tk.Toplevel(root)button_window.overrideredirect(True)button_window.wait_visibility()button_window.attributes('-alpha', 0.0)button_width = 45  # 9 characters width for each button, 10 buttonsbutton_height = 40  # 5 characters height for each button, 3 rows of buttonsxpos = -10  # x position from the leftypos = -10  # y position from the topbutton_window.geometry(f"{button_width}x{button_height}+{xpos}+{ypos}")picture_or_video = Truecanvas = tk.Canvas(root, borderwidth=0, highlightthickness=0)canvas.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)scrollable_frame = ttk.Frame(canvas)scrollable_frame.pack(fill=tk.BOTH, expand=True)scrollbar = ttk.Scrollbar(root, orient=tk.VERTICAL, command=canvas.yview)scrollbar.pack(side=tk.RIGHT, fill=tk.Y)canvas.configure(yscrollcommand=scrollbar.set)canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")buttons = [    ("Toggle Mode", toggle_mode),    ("Exit", exit_app),    ("Shutter Up", shutterup),    ("Shutter Down", shutterdown),    ("Analog Up", analogup),    ("Analog Down", analogdown)]num_columns = 2for i, (text, command) in enumerate(buttons):    button = tk.Button(scrollable_frame, text=text, command=command, width=9, height=5, bg='#ADD8E6')    button.config(activebackground='#D3D3D3')    row = i // num_columns    col = i % num_columns    button.grid(row=row, column=col, padx=0, pady=0)mode_label = tk.Label(scrollable_frame, text=f"Mode: {'Camera' if picture_or_video else 'Video'}", font=("Arial", 10))mode_label.grid(row=len(buttons)//num_columns + 2, column=0, columnspan=num_columns, padx=0, pady=0)shutter_label = tk.Label(scrollable_frame, text=f"Shutter Speed: {current_shutter_speed}", font=("Arial", 10))shutter_label.grid(row=len(buttons)//num_columns, column=0, columnspan=num_columns, padx=0, pady=0)analog_label = tk.Label(scrollable_frame, text=f"=Analogue Level: {analoglevel}", font=("Arial", 10))analog_label.grid(row=len(buttons)//num_columns + 1, column=0, columnspan=num_columns, padx=0, pady=0)minimize_button = tk.Button(button_window, text="-", command=minimize_window, bg='#ADD8E6', activebackground='#D3D3D3')minimize_button.place(x=10, y=10)restore_button = tk.Button(button_window, text="+", command=restore_window, bg='#ADD8E6', activebackground='#D3D3D3')restore_button.place_forget()scrollable_frame.update_idletasks()canvas.configure(scrollregion=canvas.bbox("all"))root.mainloop()

Viewing all articles
Browse latest Browse all 23131

Trending Articles