Найти - Пользователи
Полная версия: TKinter
Начало » GUI » TKinter
1
solyony
Подскажите, как сделать передвижение овала нарисованного на холсте.

То есть у меня есть на холсте нарисованные овалы и по нажатию и перемещению мышкой выбранный овал тоже должен перемещаться.

Спасибо.
Griffon
1) Выбрать овал на котором совершен клик.
2) Активировать драг если кнопка нажата некоторое время в милисекундах.
3) Перемещать овал по движению курсора.
4) Определится с действием при пересечении овала с другими овалами.
5) Деактивировать драг при отпускании кнопки мыши.

Вы хотите чтобы кто-то реализовал это за вас, или вам не понятно как сделать что-либо из этого?
И вы уже задавали подобный вопрос (http://python.su/forum/viewtopic.php?id=10775)
solyony
Извините, что я затупил….((

Я нагуглил отличный пример…
solyony
Тут такое дело, есть код:

import Tkinter
from math import cos,sin
import time
tk = Tkinter
KOL = 10

class Canvas_1(tk.Frame):
def __init__(self, master,kol):
print kol
self.master = master
self.loc = self.dragged = 0
tk.Frame.__init__(self, master)
canvas = tk.Canvas(self, width =900, height =900,
relief =tk.RIDGE, background ="white", borderwidth =1)
x_center = 350
y_center = 350
r = 300
s=0
for i in range(1,kol+1,1):
s=s+(360./kol)
id=canvas.create_oval (x_center+r*sin(s)-5,y_center+r*cos(s)-5,x_center+r*sin(s)+5,y_center+r*cos(s)+5,
fill="red", tags ="DnD")

canvas.pack (expand =1, fill =tk.BOTH)
canvas.tag_bind ("DnD", "<ButtonPress-1>", self.down)
canvas.tag_bind ("DnD", "<ButtonRelease-1>", self.up)
canvas.tag_bind ("DnD", "<Enter>", self.enter)
canvas.tag_bind ("DnD", "<Leave>", self.leave)
def down (self, event):
self.loc =1
self.dragged =0
event.widget.bind ("<Motion>", self.motion)

def leave (self, event):
self.loc =0

def enter (self, event):
self.loc =1
self.up (event)

def motion (self, event):
root.config (cursor ="exchange")
cnv = event.widget
cnv.itemconfigure (tk.CURRENT, fill ="blue")
x,y = cnv.canvasx(event.x), cnv.canvasy(event.y)
got = event.widget.coords (tk.CURRENT, x-5, y-5, x+5, y+5)

def up (self, event):
event.widget.unbind ("<Motion>")
event.widget.itemconfigure (tk.CURRENT, fill ="blue")
print event.widget.itemcget(tk.CURRENT)
self.master.update()
time.sleep (.1)
event.widget.itemconfigure (tk.CURRENT, fill ="green")

print sin(10)
kol = input()
root = tk.Tk()
root.title("Tkinter canvas...")
Canvas_1 (root,kol).pack()
root.mainloop()
Который рисует овалы по кругу, как, допустим, в ф-ции up найти id круга?.
print event.widget.itemcget(tk.CURRENT) вместо этой строчки.
Griffon
event.widget.find_withtag(tk.CURRENT)

upd:
Не понятно зачем в методе enter вызывается up.
solyony
Спасибо, а не подскажите случайно какую-то книжку, в которой хорошо описано tkinter и т.д.(event,widget)
Желательно на русском, но можно и на английском языке,

Спасибо.
Griffon
Только на английском.
tk:
http://infohost.nmt.edu/tcc/help/pubs/tkinter.pdf
+ttk:
И http://www.tkdocs.com/

На русском введите в поиск на этом форуме tkinter и читайте всё подряд. Там много всего.
solyony
спасибо
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