Форум сайта python.su
2
Добрый день.
Есть canvas. Правым кликом вызываю контекстное меню под под курсором:
def activate_flash_menu(event): click_x, click_y = canv.winfo_pointerxy() flash_menu.tk_popup(click_x, click_y)
def obj_srv(): img_srv_x = click_x img_srv_y = click_y canv.create_rectangle(img_srv_x,img_srv_y,img_srv_x+20,img_srv_y+30,fill="white",outline="blue")
Traceback (most recent call last):Если я только что определил переменные click_x, click_y, разве они не должны быть доступны при повторном использовании?
File “C:\Python32\lib\tkinter\__init__.py”, line 1399, in __call__
return self.func(*args)
File “C:\Documents and Settings\mihail\Рабочий стол\prj\модуль1.py”, line 42, in obj_srv
img_srv_x = click_x
NameError: global name ‘click_x’ is not defined
Отредактировано Ubhra (Ноя. 13, 2012 14:45:47)
Офлайн
43
Ubhraнет, разберитесь с областью видимости переменных:
Если я только что определил переменные click_x, click_y, разве они не должны быть доступны при повторном использовании?
Офлайн
2
Почти разобрался. Но без примеров сложновато. И передать переменную так и не удалось.
Офлайн
20
def first():
foo = 5
def second():
foo = 8
Офлайн
43
def obj_srv(click_x, click_y): img_srv_x = click_x img_srv_y = click_y canv.create_rectangle(img_srv_x,img_srv_y,img_srv_x+20,img_srv_y+30,fill="white",outline="blue") def activate_flash_menu(event): click_x, click_y = canv.winfo_pointerxy() flash_menu.tk_popup(click_x, click_y) return click_x, click_y def main(): click_x, click_y = activate_flash_menu(some_event) obj_srv(click_x, click_y)
click_x = click_y = None def activate_flash_menu(event): global click_x, click_y click_x, click_y = canv.winfo_pointerxy() flash_menu.tk_popup(click_x, click_y) def obj_srv(): img_srv_x = click_x img_srv_y = click_y canv.create_rectangle(img_srv_x,img_srv_y,img_srv_x+20,img_srv_y+30,fill="white",outline="blue")
Офлайн
2
Спасибо.
А для чего это
click_x = click_y = None
def activate_flash_menu(event): global click_x, click_y click_x, click_y = canv.winfo_pointerxy() flash_menu.tk_popup(click_x, click_y) def obj_srv(): canv.create_rectangle(click_x-50,click_y-50,click_x,click_y,fill="white",outline="blue")
def activate_flash_menu(event): global click_x, click_y click_x, click_y = canv.winfo_pointerxy() flash_menu.tk_popup(click_x, click_y) print(click_x, click_y)
Отредактировано Ubhra (Ноя. 14, 2012 08:40:38)
Офлайн
43
click_x = click_y = None
global click_x, click_y
click_x, click_y = canv.winfo_pointerxy()
def obj_srv(): canv.create_rectangle(click_x-50,click_y-50,click_x,click_y,fill="white",outline="blue")
Ubhraя не умею в Tkinter, посмотри какие там координаты поступают, может надо их поменять, мне кажется первые две должны быть верхним левым углом, а у тебя там 50 отнимается
И создает прямоугольник не под кликом, а намного ниже.
Офлайн
2
Решил просто проверить координаты без создания объектов, только выпадающее меню на canvas.
global click_x, click_y click_x = click_y = None def activate_flash_menu(event): click_x = click_y = 0 click_x, click_y = canv.winfo_pointerxy() flash_menu.tk_popup(click_x, click_y) print(click_x, click_y)
click_x, click_y = canv.winfo_pointerxy()
Отредактировано Ubhra (Ноя. 14, 2012 09:40:44)
Офлайн
63
Ubhra
Эта тема касается GUI. Напиши вопрос там, и тебе обязательно ответят. Я во всяком случае не поленюсь. А тут мне лень…. Хотя эта проблема решается просто…
Отредактировано 4kpt (Ноя. 14, 2012 21:03:37)
Офлайн