tkinter 中 event.x,event.y 和 event.x_root,event.y_root 有什么区别?

Abh*_*rma 1 python user-interface menu tkinter

import tkinter as tk
from tkinter import ttk
win=tk.Tk()
def get_event(event):
     print(f"{event.x} {event.y}")
win.bind("<Button-3>",get_event)
win.mainloop()
Run Code Online (Sandbox Code Playgroud)

我在 tkinter 中制作右键菜单,但是当我编写 event.x 和 event.y 时:

import tkinter as tk
from tkinter import ttk
win=tk.Tk()
menu=tk.Menu(win,tearoff=False)
menu.add_command(label="Nothing...")
def popup(event):
     menu.tk_popup(event.x,event.y)
win.bind("<Button-3>",popup)
win.mainloop()
Run Code Online (Sandbox Code Playgroud)

菜单溢出窗口,但当我在 menu.tk_popup 中写入 event.x_root 和 event.y_root 时,它不会溢出

Coo*_*oud 6

当您使用xy属性时,它指的是事件发生时鼠标相对于小部件event左上角的 x/y 坐标。

但是当您使用x_rootand y_rootfrom时,它指的是事件发生时鼠标相对于屏幕event左上角的 x/y 坐标。