Keresés

Ú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 a self.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 =None

    Igy 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. :D

    [ Szerkesztve ]

Új hozzászólás Aktív témák