Как привязать всплывающее меню к метке в Tkinter - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу ограничить область, в которой может быть вызвано всплывающее меню

Мой текущий код позволяет запускать всплывающее меню в любом месте окна tkinter, когда пользователь щелкает правой кнопкой мыши

from tkinter import *

root = Tk()

w = Label(root, text="Right-click to display menu", width=40, height=20)
w.pack()


popup = Menu(root, tearoff=0)
popup.add_command(label="Next") # , command=next) etc...
popup.add_command(label="Previous")
popup.add_separator()
popup.add_command(label="Home")

def do_popup(event):

    try:
        popup.tk_popup(event.x_root, event.y_root, 0)
    finally:
        popup.grab_release()

w.bind("<Button-3>", do_popup)

b = Button(root, text="Quit", command=root.destroy)
b.pack()

mainloop()

Я хочу, чтобы всплывающее меню срабатывало, когда пользователь щелкает правой кнопкой мыши только над ярлыком «Щелкните правой кнопкой мыши, чтобы отобразить меню»

1 Ответ

0 голосов
/ 28 декабря 2018

Ваш код работает точно так, как задумано.Вы создали действительно огромный виджет надписей (40 символов в ширину, 20 символов в высоту или примерно 350x325 пикселей в зависимости от шрифта вашей системы и настроек разрешения).Поэтому, когда вы думаете, что нажимаете за пределами ярлыка, это не так, поскольку он занимает все окно.

Чтобы понять, что я имею в виду, присвойте ярлыку отличительный цвет фона.Например:

w = Label(root, text="Right-click to display menu", width=40, height=20, background="pink")

Выше приведено окно, похожее на следующее изображение.Везде, где вы щелкаете по розовому цвету, это часть ярлыка, и поэтому будет отображаться меню.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...