我的代碼有一個小問題。我的界面上需要一個彈出菜單,不是在按下鼠標右鍵時彈出,而是在單擊按鈕(tkinter 小部件)時彈出。一個例子是這樣的:http://effbot.org/zone/tkinter-popup-menu.htm但是,我想在與按鈕相同的坐標處創建彈出菜單,而不是事件坐標。self.popup_menu.tk_popup(x_button, y_button, 0)問題是,當我移動界面窗口或滾動滾動條(我的界面中有一個)并再次單擊按鈕時,彈出菜單的創建位置不是按鈕所在的確切位置??磥?.tk_popup 僅采用窗口坐標而不是畫布坐標。有人知道解決方案嗎?編輯:這是一個例子:from Tkinter import *root = Tk()popup = Menu(root, tearoff=0)popup.add_command(label="Main Product")popup.add_command(label="Side Product")def popupm(x, y): try: popup.tk_popup(x, y, 0) finally: popup.grab_release()x = 10y = 15bt = Button(root, text='Menu', command= lambda: popupm(x , y))bt.place(x = 10, y = 15)root.mainloop()問候!
2 回答
梵蒂岡之花
TA貢獻1900條經驗 獲得超5個贊
按鈕有幾個方法可以滿足您的需求: .winfo_rootx() 和 .winfo_rooty() 這是一個工作示例:
from Tkinter import *
root = Tk()
popup = Menu(root, tearoff=0)
popup.add_command(label="Main Product")
popup.add_command(label="Side Product")
def popupm(bt):
try:
x = bt.winfo_rootx()
y = bt.winfo_rooty()
popup.tk_popup(x, y, 0)
finally:
popup.grab_release()
bt = Button(root, text='Menu')
bt.configure(command = lambda: popupm(bt))
bt.place(x = 10, y = 15)
root.mainloop()
我在 python3 中測試了它,抱歉,如果它沒有轉換為 2。如果您遇到任何問題或需要幫助調整它,請告訴我們。
添加回答
舉報
0/150
提交
取消
