Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » Tkinter canvas определение координат [RSS Feed]

#1 Ноя. 15, 2012 12:10:49

Ubhra
От:
Зарегистрирован: 2009-03-04
Сообщения: 133
Репутация: +  2  -
Профиль   Отправить e-mail  

Tkinter canvas определение координат

При попытке вызвать меню ошибка.

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’

И немного не понятен синтаксис. Может какая специфическая IDE…
import Tkinter
root = Tkinter.Tk()
from tkinter import *
mainframe1 = Tk()



Отредактировано Ubhra (Ноя. 15, 2012 12:25:47)

Офлайн

#2 Ноя. 15, 2012 16:40:34

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Tkinter canvas определение координат

Какой у тебя питон???



Офлайн

#3 Ноя. 15, 2012 17:05:13

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Tkinter canvas определение координат

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’



Офлайн

#4 Ноя. 15, 2012 17:29:11

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Tkinter canvas определение координат

sp3 На ошибку не смотрел. Не заметил…



Офлайн

#5 Ноя. 15, 2012 17:39:05

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Tkinter canvas определение координат

Ubhra
Господи… Замени слово Tkinter на tkinter. И root - это корневое окно на котором располагаются все виджеты (ты назвал его mainframe1).
Я просто явно указываю модуль, из которого использую методы класса (имя_модуля.имя_метода - например Tkinter.Burtton). Это позволяет мне называть переменные как я хочу. В твоем случае, когда ты делаешь from… твои имена переменных не должны пересекаться с именами модуля, который ты портанул, так как эти имена добавляются в пространство имен твоей программы.
поэтому строчку

click_x = event.x_canv
надо снова поменять на строчку
click_x = event.x_root
так как x_root это не моя прихоть, а зарегестрированное обращение к методу класса event…



Офлайн

#6 Ноя. 15, 2012 18:03:41

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Tkinter canvas определение координат

Я переписал код, учитывая что Вы работаете на 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()



Офлайн

  • Начало
  • » GUI
  • » Tkinter canvas определение координат[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version