Найти - Пользователи
Полная версия: Помогите с не сложным вопросом по tkinter
Начало » GUI » Помогите с не сложным вопросом по tkinter
1
VasiliyTolmachev
Есть вот такое изображение.

Цель: при нажатии на определенный квадратик на изображении в две строки h и v должны записываться координаты.
from tkinter import *
from PIL import Image, ImageTk
main_window=Tk()
canv=Canvas(main_window, height=339, width=610, bg="lightblue")
b=Image.open('F:/kursovaya/mofis.gif')
a=ImageTk.PhotoImage(b)
canv.create_image(0,0,image=a,anchor="nw")
ent=Text(main_window,width=20,height=10,bd=3)
entt=Text(main_window,width=20,height=10,bd=3)
def but(event):
    ent.delete(1.0,END)
    entt.delete(1.0,END)
    ent.insert(END,x/16+1)
    entt.insert(END, y/16+1)
y=50
w=1
while y<336:
    x=33
    while x<600:
        canv.create_rectangle(x,y,x+16,y+16, outline="red", tag=w)
        canv.tag_bind(w,'<Button-1>',but)
        x=x+16
        w=w+1
    y = y + 16
    w=w+1
canv.pack()
ent.pack()
entt.pack()
main_window.mainloop()

вот такая программа у меня есть, но она выдает вот такую ошибку
Traceback (most recent call last):
  File "F:\kursovaya\89.py", line 21, in <module>
    canv.tag_bind(w,'<Button-1>',but)
  File "F:\python 3.2.5\lib\tkinter\__init__.py", line 2205, in tag_bind
    sequence, func, add)
  File "F:\python 3.2.5\lib\tkinter\__init__.py", line 980, in _bind
    self.tk.call(what + (sequence, cmd))
_tkinter.TclError: item "75" doesn't exist

в чем проблема, помогите, пожалуйста
4kpt_III
Подправил.

from Tkinter import *
from PIL import Image, ImageTk
main_window=Tk()
canv=Canvas(main_window, height=339, width=610, bg="lightblue", cursor="dot")
#b=Image.open('F:/kursovaya/mofis.gif')
#a=ImageTk.PhotoImage(b)
#canv.create_image(0,0,image=a,anchor="nw")
ent=Text(main_window,width=20,height=10,bd=3)
entt=Text(main_window,width=20,height=10,bd=3)
def but(event):
    ent.delete(1.0,END)
    entt.delete(1.0,END)
    ent.insert(END, event.x)
    entt.insert(END, event.y)
y=50
w=1
while y<336:
    x=33
    while x<600:
        tag = canv.create_rectangle(x,y,x+16,y+16, outline="red", activefill="yellow")
        canv.tag_bind(tag,'<Button-1>', but)
        x=x+16
        w=w+1
    y = y + 16
    w=w+1
canv.pack()
ent.pack()
entt.pack()
main_window.mainloop()

Но делать так нежелательно. Проще отследить положение мышки и высчитать по-ней квадрат. Как - я намекнул в функции but. Если повесить обработчик события <Button-1> на canvas все может получиться

P.S. Код не айс. Править очень много, поэтому я пас Ну и самое главное. while здесь ни к селу ни к городу.
VasiliyTolmachev
спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB