Tkinter Optionmenu“菜单”位置始终显示0,0

时间:2018-06-14 11:14:32

标签: python tkinter optionmenu

我正在尝试获取菜单的位置,该菜单是tkinter中选项菜单小部件的子项。我想这样做,以便我知道菜单何时由于屏幕上的位置而被移动(见图1)

enter image description here

然而,当我尝试使用菜单小部件winfo_rootx或winfo_x时,无论菜单实际位于何处,它们都只显示位置0。请参阅示例代码:

from tkinter import Tk, Frame, BOTH, Menu, Label, SUNKEN, X, BOTTOM
import tkinter as tk
class Application(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent, background = "white")
        self.parent = parent
        self.parent.geometry("400x100")
        vals = ["1","2","3","4","5","6","7"]
        var = tk.StringVar()
        var.set("1")
        option = tk.OptionMenu(root,var,*vals)
        option.pack()
        self.t = option.children["menu"]
        tk.Menu
        #Do I need to unbind
        #t.bind("<<MenuSelect>>", self.test_func)
        self.t.bind("<<MenuSelect>>", self.test_func)

    def test_func(self,event = None):
        print(self.t.winfo_children())
        print("x,y position",event.widget.winfo_x(),event.widget.winfo_y())
        print("x,y root position",event.widget.winfo_rootx(),event.widget.winfo_rooty())
        #if self.parent.call(event.widget,"index","active") == 0:
            #print(self.t)
root = tk.Tk()
Application(root)
root.mainloop()

我可能还有其他选择来尝试修复此问题,但似乎应该有一种方法可以正确地获取菜单小部件的位置。我的另一种方式是相当hacky并使用小部件的位置和长度来尝试计算调整后的位置。

0 个答案:

没有答案