Új hozzászólás Aktív témák
-
slyder81
tag
Hali.
Már lassan 1 hónapja próbálkozom, keresgélek a neten, könyveket olvasok, de nem tudok megoldást találni a problémámra.
Szeretnék egy ablakban téglalapokat rajzolni, amik-re,-be gif formátumú képeket tudok tenni. Ezt eddig úgyahogy meg is oldottam. Ezeket a képeket utánna szeretném egérrel mozgatni, az se lenne baj ha egy megadott pozícióba tudnám mozgatni. Nincs valami ötletetek ezt hogyan tudnám megcsinálni???
Segitségeteket előre is köszönöm. -
slyder81
tag
Hali.
Látom nem túl aktiv ez a fórum, de megpróbálom, hátha tud valaki gyógyírt a problémámra.
Elolvastam az egész fórumot, de sajna látom a tkinterrel nem túl sokan foglalkoznak, de hátha mégis lesz valakinek valami ötlete. Pár éve kezdtem pytonkodni, de viszonylag nagy kihagyásokkal. Az angolom sajna nem túl erős,.
Sikerült összedobnom egy viszonylag hosszadalmas kódot, lényegeben egy 2 személyes táblás társasjáték. El is döcög a szkriptecske de van egy problémám.
Adott egy ablak amiben egy canvas ra betöltöttem egy gif kiterjesztésű képet ( tudom roszab a minősége, de a celnak megfelel, a projekt már túl előrehaladott volt már mikor szembesültem hogy vaszonra nem lehet jobb minőségű képet alkalmazni). A képre rajzoltam két szines kört, amit a képet tartalmazó canvasból származtattam le(ugye az véget, hogy a képen legyen,ezek ugyanis a figurák). Utánna jött a feketeleves. Hosszú órákon át tartó kinylódás után sikerült hozákötnöm az egér eseményhez ezt a két szines köröcskét(ha a kör fölé húzom az egér mutatót s lenyomott bal gombal odébb húzom, akkor a kiválasztott kör mozog, mindaddig, még el nem engedem a gombot). Na szóval az lenne a gond, hogy ha véletlenül a köröcske mellé kattintok(ugye ez esetben a képre) s megmozditom az egeret, akkor a képet elmozditom a vásznon s a kereten kivülre kerül a kép egy resze. Ez számomra nem világos, mert a kép mérete és a vaszon mérete teljessen egyforma.
Átlátszó vászonnal pl meg tudnám oldani, de sajnos ilyen opció nincs.
Ha le tudnám fixálni a meglévő vaszon szélét, hogy a képet ne tudjam elhúzni, az is kielégitő megoldás lenne.
Utólag rátaláltam a Label opcióra, ami még jobban is megfelelne(a képformátumok miadt) , de itt viszont az a gondom, hogy egy label felületre már nem tudok canvast tenni, mivel ha a meglévőből származtatom akkor a label felület alá kerül.
Mivel már üzemel az egész projekt, nem szivessen irnám át az egész kódot(össz-vissz van par 100 sor)
Esetleg valkinek valami ötlete?
Ha hazaérek fel tudom tenni a kérdéses kódrészletet. -
slyder81
tag
válasz slyder81 #990 üzenetére
Itt a kód részlet(természetesen valami képet be kell rakni a kód mappájába,alap.gif helyett):
#-*- coding:Utf-8 -*-
from Tkinter import *
from random import randrange
import random
class Draw(Frame):
def __init__(self):
Frame.__init__(self)
#Vászon létrehozása, kép betöltése, megjelenitése
self.c = Canvas(self, width =1292, height =916, bg ='grey', bd =2, relief =SOLID)
self.photo = PhotoImage (file ='alap.gif')
self.item = self.c.create_image(640, 450, image=self.photo,activeimage= None)
self.c.grid(row =1, column =1, rowspan=6, padx= 0, pady= 5)
#A szines körök kezdőpoziciója, létrehozása
x1, y1,x2,y2 = 100, 100,150,50
x3, y3,x4, y4 = x1 ,y1,x2, y2+100
self.c.create_oval(x1, y1,x2,y2, fill ='red')
self.c.create_oval(x3, y3,x4, y4, fill ='blue')
#Az egér 'érzékelése'
self.c.bind("<Button-1>", self.mouseDown)
self.c.bind("<Button1-Motion>", self.mouseMove)
self.c.bind("<Button1-ButtonRelease>", self.mouseUp)
self.grid()
# Az egér események definiállása
def mouseDown(self, event):
self.currObject =None
self.x1, self.y1 = event.x, event.y
self.selObject = self.c.find_closest(self.x1, self.y1)
self.c.itemconfig(self.selObject,width =3)
self.c.lift(self.selObject)
def mouseMove(self,event):
x2,y2 =event.x, event.y
dx, dy =x2 -self.x1, y2 -self.y1
if self.selObject:
self.c.move(self.selObject, dx, dy)
self.x1, self.y1 =x2, y2
def mouseUp(self, event):
if self.selObject:
self.c.itemconfig(self.selObject,width =1)
self.selObject =None
if __name__ =='__main__':
Draw().mainloop() -
slyder81
tag
válasz cadtamas #995 üzenetére
De jó, végre valami nyom.
Sajnos nem jó, de a nyom igen. Csak meg kell találni a megfelelő alkalmazási módot.
Ha aself.tags
listát print utasitással kiolvasás után kiirattatom, akkor ha a körökre katintok akkor ('kor', 'current') tartalmat kapok. De ha a képre akkor csak('current',) kapok. A baj az hogy a kép még mindig mozog. -
slyder81
tag
válasz cadtamas #997 üzenetére
Kössz. Úgy látszik egy rugóra jár az agyunk. Igy sem ment. De neked hála, megtaláltam a megoldást.
A self.item sorba szintén beraktam egy tags ='ed' részt s kiegészitettem igy a kódot:def mouseDown(self, event):
self.currObject =None
self.x1, self.y1 = event.x, event.y
self.selObject = self.c.find_closest(self.x1, self.y1)
self.tags = self.c.gettags(self.selObject)#Kiolvassuk a tag-et
print self.tags
if self.tags ==('kor', 'current'):
self.c.itemconfig(self.selObject,width =3)
self.c.lift(self.selObject)
if self.tags == ('ed', 'current'):
self.selObject =NoneIgy már megy a dolog tökéletesen. Hálás köszönet.
[ Szerkesztve ]
-
slyder81
tag
Az előző skript alapján, hogy tudnám az ablak nevét megváltoztatni "tk" helyett az a szöveg amit én szeretnék?
Megoldva.
[ Szerkesztve ]
Új hozzászólás Aktív témák
- Napelem
- Raspberry Pi
- Futás, futópályák
- Kertészet, mezőgazdaság topik
- Az USA nem akarja visszafogni Kína növekedését
- Békéscsaba és környéke adok-veszek-beszélgetek
- Huawei Mate 10 Pro - mestersége az intelligencia
- Fujifilm X
- Amlogic S905, S912 processzoros készülékek
- Gyúrósok ide!
- További aktív témák...