树莓派Bookworm下Tkinter触摸屏仅鼠标悬停时响应点击问题
Raspberry Pi Bookworm下Tkinter触摸屏点击无响应问题
问题描述
我用Tkinter开发了相机控制界面,可调节快门速度、模拟增益,鼠标操作正常,GPIO按钮拍照也没问题。但在触摸屏测试时,只有鼠标悬停在窗口/画布上时,触摸屏点击按钮才会响应,否则完全没反应。使用的是Raspberry Pi Bookworm系统,试过循环绑定Button-1事件没用,也试过xte 'movemouse 0 0'移动光标到控制区域,同样失败。
代码片段
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 = 0 ypos = 120 root.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 buttons button_height = 40 # 5 characters height for each button, 3 rows of buttons xpos = -10 # x position from the left ypos = -10 # y position from the top button_window.geometry(f"{button_width}x{button_height}+{xpos}+{ypos}") picture_or_video = True canvas = 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 = 2 for 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()
内容的提问来源于stack exchange,提问作者user24441164
相关产品推荐
相关产品推荐

