我有一个级联的 tkinter.Menu,我使用 tearoff=1 创建。tearoff 命令传递了两个参数:
- 菜单窗口的名称(父窗口的窗口 ID?),它是一个类似 ".#!menu.#!menu#!menu3" 的字符串,以及
- 撕下的菜单窗口的名称(新的撕下菜单的根窗口的窗口ID),它是一个类似“.tearoff1”的字符串。
我可以用这些信息做什么?这是我想做的:默认情况下,撕下的菜单放置在屏幕位置 (x=0, y=0),但我想将其放置在另一个 (x,y) 位置。
我怎样才能做到这一点?
尝试按照建议使用“nametwidget”的示例代码:
import tkinter as tk
class App:
def __init__(self, root):
menubar = tk.Menu(root)
menuA = tk.Menu(menubar, tearoff=0)
menuB = tk.Menu(menubar, tearoff=0)
menuC = tk.Menu(menubar, tearoff=1, tearoffcommand=self.onTearoff)
menuC.add_command(label="Menu Row1")
menuC.add_command(label="Menu Row2")
menuC.add_command(label="Menu Row3")
menubar.add_cascade(label="MenuA", menu=menuA)
menubar.add_cascade(label="MenuB", menu=menuB)
menubar.add_cascade(label="MenuC", menu=menuC)
self.menubar = menubar
root.config(menu=menubar)
root.geometry("300x200")
def onTearoff(self, wParent, wMenu):
print("onTearoff(%s, %s)" % (wParent, wMenu)) # wMenu = ".tearoff1"
w = root.nametowidget(wMenu) # KeyError: 'tearoff1'
w.geometry("+50+50")
if __name__ == "__main__":
root = tk.Tk()
app = App(root)
root.mainloop()