如何让Tkinter菜单在触发按钮的位置弹出?
Tkinter按钮菜单定位错误的修复方案
开发基于yt-dlp的视频下载应用(声明:非盗版用途),每个下载项包含一个触发菜单的按钮,但点击按钮时菜单始终显示在屏幕左上角,而非按钮所在位置。原代码中open_info_menu方法使用固定初始值的window_coords调用tk_popup,导致定位错误。
解决方案
触发菜单时动态获取按钮的屏幕坐标,使用组件的winfo_rootx()和winfo_rooty()方法获取按钮相对于屏幕的位置,再结合按钮高度调整Y轴坐标,让菜单显示在按钮下方:
def open_info_menu(self) -> None: # 获取按钮左上角的屏幕X坐标 x = self.info_button.winfo_rootx() # 获取按钮左上角的屏幕Y坐标,加上按钮高度让菜单显示在按钮下方 y = self.info_button.winfo_rooty() + self.info_button.winfo_height() self.info_menu.tk_popup(x, y)
编辑:修改上述代码后,菜单已能正确显示在按钮所在位置。
内容的提问来源于stack exchange,提问作者cogos18
相关产品推荐
相关产品推荐

