Форум сайта python.su
Помогите пожалуйста нубу исправить ошибку:
import sys sys.argv=["Main"] from tkinter import Tk, Frame, Menu root = Tk() # Команды def command1(): root.destroy() def command2(): root.destroy() # Определяем положение курсора class POINT(Structure): _fields_ = [("x", c_ulong), ("y", c_ulong)] def queryMousePosition(): pt = POINT() windll.user32.GetCursorPos(byref(pt)) return { "x": pt.x, "y": pt.y} root.overrideredirect (1) # Создаем меню menu = Menu(root, tearoff=0) menu.add_command(label="LABEL1", command=command1) menu.add_command(label="LABEL2", command=command2) # Создаем canvas frame = Frame(root, width=0, height=0) frame.pack() # Открываем меню menu.post(%(x)s,%(y)s % (queryMousePosition())) root.mainloop()
Отредактировано content (Июль 30, 2014 10:37:23)
Офлайн
надо чтоб меню открывалось под курсорм вместе с главным окном
или вот тут что не так в передпоследней строке:
menu.post(x_root, y_root)
import sys sys.argv=["Main"] from tkinter import Tk, Frame, Menu root = Tk() def hello(): print ("hello!") # create a popup menu menu = Menu(root, tearoff=0) menu.add_command(label="Undo", command=hello) menu.add_command(label="Redo", command=hello) # create a canvas frame = Frame(root, width=512, height=512) frame.pack() def popup(event): menu.post(event.x_root, event.y_root) # attach popup to canvas frame.bind("<Button-3>", popup) menu.post(x_root, y_root) root.mainloop()
Отредактировано content (Июль 30, 2014 08:43:58)
Офлайн
Строка просто лишняя. На тот момент event.x и event.y еще не существует. Они появляются внутри callback функции с передачей аргумента event по-умолчанию.
Держите:
import tkinter root = tkinter.Tk() # def hello(): print ("hello!") # # create a popup menu menu = tkinter.Menu(root, tearoff=0) menu.add_command(label="Undo", command=hello) menu.add_command(label="Redo", command=hello) # create a canvas frame = tkinter.Frame(root, width=512, height=512) frame.pack() # def popup(event): menu.post(event.x_root, event.y_root) # # attach popup to canvas frame.bind("<Button-3>", popup) #menu.post(x_root, y_root) root.mainloop()
Отредактировано 4kpt_II (Июль 30, 2014 15:39:19)
Офлайн
а можно как то заставить меню появляться вместе с главным окном сразу(по запуску скрипта) под курсорм.
то есть: запускаю .py файл - под курсором открывается меню ?
Отредактировано content (Июль 31, 2014 12:53:01)
Офлайн
Смотрите. Пишу еще раз. Без понятия, как это будет работать на windows так как такого рода продуктами не пользуюсь, но предположительно нужно как-то так
import Tkinter # root = Tkinter.Tk() # def hello(): print ("hello!") # # create a popup menu menu = Tkinter.Menu(root, tearoff=0) menu.add_command(label="Undo", command=hello) menu.add_command(label="Redo", command=hello) # def popup(position): menu.post(*position) # menu.post(400, 400) # сюда Вы вставляете позицию мышки в данный момент (windll) root.withdraw() # скрыть окно root.mainloop()
Отредактировано 4kpt_II (Июль 31, 2014 15:21:49)
Офлайн
4kpt_IIна winde работает
Смотрите. Пишу еще раз…
import sys sys.argv=["Main"] from tkinter import Tk, Frame, Menu root = Tk() # Команды def command1(): root.destroy() def command2(): root.destroy() # Определяем положение курсора class POINT(Structure): _fields_ = [("x", c_ulong), ("y", c_ulong)] def queryMousePosition(): pt = POINT() windll.user32.GetCursorPos(byref(pt)) return { "x": pt.x, "y": pt.y} root.overrideredirect (1) # Создаем меню menu = Menu(root, tearoff=0) menu.add_command(label="LABEL1", command=command1) menu.add_command(label="LABEL2", command=command2) # Создаем canvas frame = Frame(root, width=0, height=0) frame.pack() # Открываем меню menu.post(%(x)s,%(y)s % (queryMousePosition())) root.mainloop()
Отредактировано content (Июль 31, 2014 16:44:25)
Офлайн
Ну конечно будет там ошибка… Исправьте
menu.post(queryMousePosition()[x], queryMousePosition()[y])
Офлайн