Форум сайта python.su
При попытке вызвать меню ошибка.
def activate_flash_menu(event=None): click_x = event.x_canv click_y = event.y_canv e_x = event.x e_y = event.y flash_menu.tk_popup(click_x, click_y)
Traceback (most recent call last):
File “C:\Python32\lib\tkinter\__init__.py”, line 1399, in __call__
return self.func(*args)
File “H:\123.py”, line 10, in activate_flash_menu
click_x = event.x_canv
AttributeError: ‘Event’ object has no attribute ‘x_canv’
import Tkinter root = Tkinter.Tk()
from tkinter import * mainframe1 = Tk()
Отредактировано Ubhra (Ноя. 15, 2012 12:25:47)
Офлайн
Какой у тебя питон???
Офлайн
4kpt
Какой у тебя питон???
Ubhra
Traceback (most recent call last):
File “C:\Python32\lib\tkinter\__init__.py”, line 1399, in __call__
return self.func(*args)
File “H:\123.py”, line 10, in activate_flash_menu
click_x = event.x_canv
AttributeError: ‘Event’ object has no attribute ‘x_canv’
Офлайн
sp3 На ошибку не смотрел. Не заметил…
Офлайн
Ubhra
Господи… Замени слово Tkinter на tkinter. И root - это корневое окно на котором располагаются все виджеты (ты назвал его mainframe1).
Я просто явно указываю модуль, из которого использую методы класса (имя_модуля.имя_метода - например Tkinter.Burtton). Это позволяет мне называть переменные как я хочу. В твоем случае, когда ты делаешь from… твои имена переменных не должны пересекаться с именами модуля, который ты портанул, так как эти имена добавляются в пространство имен твоей программы.
поэтому строчку
click_x = event.x_canv
click_x = event.x_root
Офлайн
Я переписал код, учитывая что Вы работаете на 3. (У меня не стоит 3, но я думаю, что так правильно…)
import tkinter root = tkinter.Tk() root.geometry("400x400+100+100") def create_obj(event): if event[2] == "oval": ov = canv.create_oval(event[0], event[1], event[0] + 40, event[1] + 40) if event[2] == "pol": pol = canv.create_rectangle(event[0], event[1], event[0] + 40, event[1] + 40) def activate_flash_menu(event): posx = event.x_root posy = event.y_root x = event.x y = event.y menu = tkinter.Menu(root, tearoff = 0) menu.add_command(label = "Кружочек", command = lambda pos = (x, y, "oval"): create_obj(pos)) menu.add_command(label = "Квадратик", command = lambda pos = (x, y, "pol"): create_obj(pos)) menu.tk_popup(posx, posy) canv = tkinter.Canvas(root, height = 200, width = 200, bg = "red") canv.place(relx = 0.5, rely = 0.5, anchor = "center") canv.bind("<Button-3>", activate_flash_menu) root.mainloop()
Офлайн