Hirdetés

2024. április 27., szombat

Gyorskeresés

Hozzászólások

(#951) pbalintka válasza cadtamas (#950) üzenetére


pbalintka
csendes tag

A circle függvényed nem tér vissza semmivel, csak kört rajzol. Igy amikor törölni szeretnéd a mouth-t akkor gyakorlatilag annak értéke semmi (None típus).

Írj egy return-t a függvényed végére, hogy adja vissza az object-et!

def circle(can,x,y,r,color="white"):
"A <can> vásznon egy <r> sugarú kör rajza <x,y>-ban."
return can.create_oval(x-r,y-r,x+r,y+r,outline=color)

[ Szerkesztve ]

(#952) pbalintka válasza cadtamas (#950) üzenetére


pbalintka
csendes tag

Csak egy apróság. Nem befolyásolja a programod működését, de elegánsabb.

self.mouth = 0

helyett:
self.mouth = None

Egy integer 24 byte-ot foglal le, míg a None csak 16-ot. Nem sok de, nagyobb programnál számítani fog.

[ Szerkesztve ]

(#953) cadtamas válasza pbalintka (#952) üzenetére


cadtamas
tag

Köszönöm. Nagyon hálás vagyok a segítségedért! :)

(#954) EQMontoya válasza pbalintka (#952) üzenetére


EQMontoya
veterán

Egy integer 24 byte-ot foglal le, míg a None csak 16-ot. Nem sok de, nagyobb programnál számítani fog.

No ezt azért gondoljuk már át még kétszer. :)

Kis olvasnivaló, ezt a részt ajánlom figyelmedbe:

The current implementation keeps an array of integer objects for all integers between -5 and 256, when you create an int in that range you actually just get back a reference to the existing object. So it should be possible to change the value of 1. I suspect the behaviour of Python in this case is undefined. :-)

Pythno3-ban már kicsit másképp működik, de az, hogy pontosan hány int(1) objektumod van a rendszerben, illetve hány referenciád azokra, az közel sem olyan triviális, mint ahogy azt Móricka gondolta.

Same rules apply!

(#955) Bazs87 válasza cousin333 (#942) üzenetére


Bazs87
tag

Köszönöm a reakciót cousin333!

A 3.3-at azért használtam, mert a gépemre épp az volt letöltve.
Közben megtaláltam hogyan kell cmd-ben libet installálni, de az általad javasolt megoldás sokkal szimpatikusabb.
Te milyen verziót használsz/javasolsz?

Első körben idle 2.7-tel fel is tudtam installálni a libet, de hibára futott a rossz verzió miatt. Azt mondták, hogy a 3-asat használjam, de melyiket?:) A pip installálás is a win cmd-ben megy?

A "nagy" pythonos tervek alábbhagytak, most már csak az a cél, hogy ez a lib menjen. (perpill a setuptool és egy másik lib körhivatkozást hoztak létre és egymást kérik az install teljesítéséhez).

Felrakom az általad javasolt python verziót, no meg a PyPi-t és szerencsét próbálok még egyszer.
Egy elvileg 5 perces problémával szenvedek napok óta, velem van a gond?

Köszi előre is!

(#956) pbalintka válasza EQMontoya (#954) üzenetére


pbalintka
csendes tag

Igaz, kicsit benéztem a dolgot, de annyira nem, mert a None is referenciára mutat. Így nálam még mindig az nyer 8B-al. :)

(#957) EQMontoya válasza pbalintka (#956) üzenetére


EQMontoya
veterán

Lehet, én vagyok agyabuggyant, de szerintem a referencia gyakorlatilag egy ojb id, ami ugye egy már meglévő ojjektumra mutat, és fix méretű. :)

[ Szerkesztve ]

Same rules apply!

(#958) Mr Dini


Mr Dini
addikt
LOGOUT blog

Üdv!

Chromiumot szeretnék fordítani, de a gn tool, ami python2.7 alapú, nem akar elindulni...

Itt található a kódja. És ez maga a hiba:

Traceback (most recent call last):
File "/home/pisti/Asztal/depot_tools/gn.py", line 38, in <module>
sys.exit(main(sys.argv))
File "/home/pisti/Asztal/depot_tools/gn.py", line 33, in main
return subprocess.call([gn_path] + args[1:])
File "/usr/lib/python2.7/subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 8] Exec format error

Mit tudok ezzel kezdeni?

Köszi! :R

Hogy hívják az éhes horgászt? Gyere Pista, kész a kaja!

(#959) cousin333 válasza Bazs87 (#955) üzenetére


cousin333
addikt

Szerintem nyugodtan töröld a mostani Pythont, és tedd fel helyette a legfrissebbet: Python 3.6.0. A gyári könyvtárak nyilvánvalóan támogatottak (lásd urllib), ahogy a kérdéses külső modulok is:
- Requests
- Beautiful Soup

Ha feltetted a friss Pythont, akkor elvileg lesz parancssorból működő pip-ed is, amivel a fent említett modulokat is telepítheted, az esetleges függőségeikkel együtt:

C:\> pip install requests beautifulsoup4

A PyPi-t nem tudod feltenni, mert az csak a hivatalos honlap a külsős Python modulok számára. Azért említettem, mert a pip elvileg minden csomagot fel tud tenni, amit itt megtalálsz, de ez inkább a későbbiekre szól.

[ Szerkesztve ]

"We spared no expense"

(#960) Bazs87 válasza cousin333 (#959) üzenetére


Bazs87
tag

Értem. Akkor a legújabb python repül rá fel. A pippel pedig megpróbálom a libet végre működésre bírni.

Az előbbi leírásaitok alapján tisztában kéne lennem, hogy melyik lib melyik verzióhoz tartozik, mik a követelményei stb. Ennek hol tudok utánanézni, van valamilyen gyűjtőoldal, vagy googli megmondja nekem x hét keresés meg kellemetlenség után?

Nem tudjátok, a githubon szerepelhet valahol a telepített teszt/fejlesztőrendszer leírása (a libet pontosan ezzel az idle verzióval, ezekkel a libverziókkal ilyen oprendszerrel installálta és tesztelte a készítője)?

Köszönöm!

(#961) cousin333 válasza Bazs87 (#960) üzenetére


cousin333
addikt

A már említett PyPi oldalon rákeresve, vagy a modul honlapján le van írva, hogy éppen mivel kompatibilis. Nem biztos, hogy ki van írva az összes jó változat, legtöbbször pl. 2.7+ és 3.3+ jelölés szerepel. A legfontosabb, hogy a 2-es és 3-as verziókat kell külön kezelni. Sok modul ráadásul csak gyári függvényeket használ, avagy "pure Python", az ilyeneknél nem szokott gond lenni a kompatibilitással. A Githubon szoktak lenni readme fájlok, de a kisebb projektek általában gyengébben dokumentáltak, beleértve a kompatibilitást is. Általában ami támogatja a Python 3-at az fut a legfrissebb változattal is, legfeljebb nem használja ki az újdonságokat.

Szerintem egy kicsit túlpörgöd ezt a témát, ami neked kell, az benne van az alaptelepítésben is. Ahogy írtam, a pip remekül használható külsős modulok telepítésére, automatikusan a kívánt verziót teszi fel (pl. 32 vs 64 bit), a függőségekkel együtt. A githubos Home asistant könyvtárad is fel tudod így tenni:

C:\> pip install pyhs100

[ Szerkesztve ]

"We spared no expense"

(#962) Lacc


Lacc
aktív tag

Sziasztok!

Na átnéztem egy kis tutorial a float, Decimal és Fraction témaköréből, tanulságos. De nekem nem úgy műkődik a Python kódom, ahogy a könyvben.

Könyvben:
>>> Fraction(19/155)
Fraction(8832866365939553, 72057594037927936)
>>> Decimal(19/155)
Decimal('0.12258064516129031640279123394066118635237216949462890625')

Nálam:
>>> Fraction(19/155)
Fraction(0, 1)
>>> Decimal(19/155)
Decimal('0')

Na most akkor ez hogyan lehetséges, hogy én rossz kerekített értékeket kapok?
Tökmindegy, hogy Python 2.7 vagy Python 3.5, ugyanez az eredmény. A Fraction és Decimal osztályok importálva vannak, különben hibával elszállna a program.

(#963) cousin333 válasza Lacc (#962) üzenetére


cousin333
addikt

Nálam a 3.6 van telepítve és jól működik.

Nálad mit ad vissza a decimal.getcontext() függvény? Nálam:

Out[6]: Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, ca
pitals=1, clamp=0, flags=[FloatOperation], traps=[InvalidOperation, DivisionByZe
ro, Overflow])

"We spared no expense"

(#964) Lacc válasza cousin333 (#963) üzenetére


Lacc
aktív tag

Azt, hogy ilyen nincs is.
>>> from decimal import Decimal
>>> decimal.getcontext()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'decimal' is not defined

(#965) cousin333 válasza Lacc (#964) üzenetére


cousin333
addikt

Mert csak a Decimal-t importáltad a decimal modulból. Írd ezt és akkor lesz:

In [1]: import decimal

In [2]: decimal.Decimal(19/155)
Out[2]: Decimal('0.12258064516129031640279123394066118635237216949462890625')

In [3]: decimal.getcontext()
Out[3]: Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, ca
pitals=1, clamp=0, flags=[FloatOperation], traps=[InvalidOperation, DivisionByZe
ro, Overflow])

[ Szerkesztve ]

"We spared no expense"

(#966) Lacc válasza cousin333 (#965) üzenetére


Lacc
aktív tag

Aha, de akkor is érdekes, hogy nem az a szám, aminek lennie kellene, az még mindig csak egy '0'
>>> import decimal
>>> decimal.Decimal(55/165)
Decimal('0')
>>> decimal.getcontext()
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, capitals=1, flags=[], traps=[InvalidOperation, Overflow, DivisionByZero])

[ Szerkesztve ]

(#967) cousin333 válasza Lacc (#966) üzenetére


cousin333
addikt

Nem is vártam, hogy megjavul, csak a különbséget akartam látni. Próbáld ezt:

decimal.getcontext().flags = [FloatOperation]

[ Szerkesztve ]

"We spared no expense"

(#968) EQMontoya válasza cousin333 (#967) üzenetére


EQMontoya
veterán

getcontext().prec = 10, vagy valami hasonló is elég lenne szerintem, ami a kollégánál tippre 0 alapból, anélkül meg nem mén a float.

Tippre valami hasonló ott volt a példában is, csak kimaradt.

[ Szerkesztve ]

Same rules apply!

(#969) Bazs87 válasza cousin333 (#961) üzenetére


Bazs87
tag

A végső megoldásként sikerült megoldanom a telepítést a 3.6-tal tesztként. A lib működik.
A mySQL legújabb konnektora viszont 3.4-hez jó, ezért visszaléptem kettőt és nagy szerencsémre úgy is működőképes a lib.
A pypet nem sikerült működésre bírnom, ezért maradt a cmd-s installálás.

Köszönöm a segítséget!

(#970) cousin333 válasza EQMontoya (#968) üzenetére


cousin333
addikt

Én is erre gondoltam először, de a #966-ban egyértelműen ott van, hogy prec = 28 (ez az alapértelmezés). Amit én írtam, az meg nem fog működni, mert hibásan adtam meg. De ha jó lenne, akkor sem menne, mert egy másik config esetében sincs semmi a flags-nél, mégis jó. A clamp = 1-re gondoltam még, mint lehetséges ok, de az sem az. Szóval most már nem tudom, mi van...

[ Szerkesztve ]

"We spared no expense"

(#971) Lacc válasza cousin333 (#967) üzenetére


Lacc
aktív tag

Bocsi, hogy eddig nem válaszoltam. Majd lecsekkolom, ma munka után, ha nem megy ki a fejemből :R

(#972) cousin333 válasza Lacc (#971) üzenetére


cousin333
addikt

Nem is baj, mert szerintem nem fog működni... :(

[ Szerkesztve ]

"We spared no expense"

(#973) Lacc válasza cousin333 (#972) üzenetére


Lacc
aktív tag

Az azért nem jó, ha nem fog műkődni, mert szeretnék később tanulni Machine Learning-et ahova jó lenne a pontos matematikai kalkuláció.
Float típussal pont az a baj, hogy az csak egy közelítő érték.
Azért köszi, hogy megnézted te is :R

(#974) cousin333 válasza Lacc (#973) üzenetére


cousin333
addikt

Hogyan képzelted a Machine Learning-et? Kézzel lekódolod az alapoktól és futtatod? Mert léteznek modulok külön erre a célra. Nem tudom, hogy azok belsőleg milyen pontosságot használnak, vagy egyáltalán milyen adattípusokat, de csak jól működnek, ha erre lettek kitalálva... :)

[ Szerkesztve ]

"We spared no expense"

(#975) Lacc válasza cousin333 (#974) üzenetére


Lacc
aktív tag

Odáig még nem jutottam el, jó lenne az alapokat is megismerni, hogy később legalább tudjam, hogy mégis mi az egész alapja. Később valszeg úgy is modulokat fogok használni, ha jól gondolom a NumPy a leghíresebb erre.
Előbb még Python, és Algoritmusok - le kell porolni :D. Ezekre van egyelőre konkrét tervem is. ML-re csak annyi, hogy az is kell, de lehet ehhez majd egy Coursera.org féle kurzus alapján készülök, ez még annyira nem konkrét, hogy pontosan miből és hogyan fogok tanulni.
Ez csak szép lassan fog megvalósulni. Munka, Egyetem MSc - levelezőn, Nyelvtanulás és egyéb.

(#976) cousin333 válasza Lacc (#975) üzenetére


cousin333
addikt

A NumPy egy sokkal alapvetőbb funkcionalitást nyújtó és szélesebb körben használható modul. Az ML-re léteznek sokkal specifikusabb kiegészítők. A legismertebb talán a scikit-learn. Ezt találtam a Youtube-on: [link], ha esetleg érdekel.

[ Szerkesztve ]

"We spared no expense"

(#977) Lacc válasza cousin333 (#976) üzenetére


Lacc
aktív tag

Köszi, ez egész népszerűnek is látszik! :R

(#978) Damateo válasza pbalintka (#922) üzenetére


Damateo
aktív tag

Erről még nem hallottam.
Én a Django és a web2py között filóztam.
Sok hozzájuk a videó és az írott anyag, még magyar is akad.
Mivel másabb mint ez a kettő?
Ezekkel van valakinek tapasztalata?

(#979) Lacc válasza Damateo (#978) üzenetére


Lacc
aktív tag

Kolléga próbálta, könnyedebb, mint a Django, nincsen benne például template kezelő rendszer, meg admin felület. Django fullframework, a Flask inkább microframework.
Django sok mindent készen ad, a Flask esetében neked kell megírnod, cserébe nincs tele sok "felesleges kóddal", amit te úgy sem használnál ki.
Ha gyorsan kell valami és kis projektekről beszélünk, akkor Flask, gyorsabban is meglehet tanulni, illetve ha szereted magad csinálni a dolgokat (admin felület, user login)
Én inkább mondanám a Djangot, főleg akkor ha szeretnél vele dolgozni, munkát vállalni. (Ugyanis a Django a legnépszerűbb)

(#980) eames


eames
tag

Sziasztok!

Szeretnék segítséget kérni. Pythont tanulok, önerőből, szóval nem igazán van tétje, de nagyon érdekelne a megoldás.

Szóval a feladat: van egy két oszlopból álló tábla, .txt-ben. Film címek és a rendező, pl: La La Land;Damien Chazelle. Nekem loadolnom kell ezt a fájlt és megszámolni, egy-egy rendező hány filmet rendezett a listából. Odáig eljutok, hogy minden egyes szót megszámol ami a táblában van, de nem tudom hogy kéne, hogy csak a ;utáni karaktereket nézze és összesítse...? Vagy rosszul gondolkozom?

(#981) Lacc válasza eames (#980) üzenetére


Lacc
aktív tag

Szia.

Split függvényt kell meghívnod a stringen. Nem space, hanem a pontos veszőt teszed meg amely mentén a függvénynek fel kell darabolnia a stringet.
split(“;”)

x = ‘blue,red,green’
x.split(“,”)
>>>
[‘blue’, ‘red’, ‘green’]

Aztán csak megszámolod a lista elemeit.

Forrás link.

[ Szerkesztve ]

(#982) Rimuru válasza eames (#980) üzenetére


Rimuru
veterán

Spliteled a stringet amit beolvasol (str.split(sep=";")), majd eltarolod egy olyan adatszerkezetben amivel konnyu dolgozni, set,list,tuple (beepitett metodussal mar nagyon konnyu megszamolni oket).

Vigyázat, csalok!

(#983) eames válasza Lacc (#981) üzenetére


eames
tag

És ezzel megoldható az is, hogy ha egy rendező neve több film mellett szerepel, akkor azt lássam, hogy : "név" : x, ahol az x összesítve azok a sorok ahol szerepel a név?

[ Szerkesztve ]

(#984) cousin333 válasza eames (#983) üzenetére


cousin333
addikt

Én kezdőként így csinálnám:

megnyitom a fájlt olvasásra (kulcsszó: open, with)
soronként beolvasom a fájlt egy listába (pl. list comprehension, strip)
készítek egy üres szótárat (dictionary)
soronként végigmegyek a listán (for)
szétválasztom a címet és a rendezőt (split, ahogy már előttem írták)
ha a rendező még nem szerepel a szótárban,
akkor hozzáadom a nevét a szótárhoz egy 1-es számmal, vagy a film címével (listában)
ha a rendező szerepel a szótárban,
akkor hozzáadok a név melletti számhoz 1-et, vagy a név melletti listához a filmcímet

Ez kb. annyi kód, amennyivel fentebb leírtam, minden sorhoz egy kódsor tartozik. Az első módszerrel (a vagy előtt) a rendező által rendezett filmek számát kapod, az alternatív megoldással meg azt, amit most írtál, hogy ki szeretnéd hozni.

SPOILER! A kód kb. így nézne ki az első módszerrel (filmszámolás):

with open('myfile.txt', 'r') as f:
filmlista= [line.strip('\n ') for line in f if line != '\n']

osszesites = {}

for alkotas in filmlista:
cim, rendezo = alkotas.split(';')
if rendezo in osszesites:
osszesites[rendezo] += 1
else:
osszesites[rendezo] = 1

És a for ciklus így nézne ki a másodikkal:

for alkotas in filmlista:
cim, rendezo = alkotas.split(';')
if rendezo in osszesites:
osszesites[rendezo].append(film)
else:
osszesites[rendezo] = [film]

Remélem működnek, nem teszteltem le.

[ Szerkesztve ]

"We spared no expense"

(#985) cousin333 válasza cousin333 (#984) üzenetére


cousin333
addikt

Na, csak sikerült elrontanom: a második megoldásban természetesen a film helyett cim-et kell írni. Az utolsó sorban fontos továbbá, hogy szögletes zárójelek közé tegyük, azzal lesz lista.

"We spared no expense"

(#986) EQMontoya válasza cousin333 (#985) üzenetére


EQMontoya
veterán

Pontosan erre való a defaultdict, hogy ezt az if-else mókát ne kelljen leírnod.

osszesites = defaultdict(list)
for alkotas in filmlista:
cim, rendezo = alkotas.split(';')
osszesites[rendezo].append(cim)

[ Szerkesztve ]

Same rules apply!

(#987) cousin333 válasza EQMontoya (#986) üzenetére


cousin333
addikt

Tudom, ismerem, de azért köszönöm a kiegészítést. Az már mondjuk inkább Python level 2 szintű megoldás... :). Plusz kell hozzá még egy sor:

from collection import defaultdict

Összességében az eredeti 9 sor kódból lett 7. A level 3 megoldás meg már csak 3 soros:

import pandas as pd
data = pd.read_table('myfile.txt', sep=';', names=['Film', 'Rendezo'])
data.Rendezo.value_counts()

"We spared no expense"

(#988) eames válasza cousin333 (#987) üzenetére


eames
tag

Nagyon köszönöm neked is és EQMontoyanak is a segítséget!

Végül ezzel csináltam meg:

with open('myfile.txt', 'r') as f:
filmlista= [line.strip('\n ') for line in f if line != '\n']

osszesites = {}

for alkotas in filmlista:
cim, rendezo = alkotas.split(';')
if rendezo in osszesites:
osszesites[rendezo] += 1
else:
osszesites[rendezo] = 1

Tökéletesen működik!

(#989) l.skywalker


l.skywalker
félisten

Sziasztok. 2 hónapja kezdtem el Pythont tanulni az Udemy-n. Abszolút önszorgalomból, mert rádöbbentem, hogy ezzel szeretnék foglalkozni, egyébként szolgáltatás-menedzsment területen vagyok jómunkás. Most találtam rátok, remélem majd hasznos tagja lehetek a fórumnak itt is!

Nem szabad félnem. A félelem az elme gyilkosa. A félelem a kis halál, mely teljes megsemmisüléshez vezet. Szembenézek félelmemmel.

(#990) slyder81


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.

(#991) slyder81 válasza slyder81 (#990) üzenetére


slyder81
tag

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()

(#992) velizare


velizare
nagyúr

üdv, a topicnak!

tudja valaki, hogy a pip honnan szedi a compiler pathokat? egész pontosan a c++ fordítóét. cx_Oracle modullal kell dolgoznom, és ezt le kell fordítgatnom, mert a fejlesztője ritkán updateli a python új alverzióihoz. 3.4hez van, 3.6hoz már nincs. a hiba, hogy a cl.exe hiányára hivatkozva leáll a pip install (pip install cx_Oracle). felraktam hozzá a 14.xx visual c++ runtimeot, de nem változott semmi. a vicc, hogy még akkor is sem találja a cl.exe-t ha ugyanabból a könyvtárból indítom a pipet, ahol van.
win10, py3.6.

Tudod, mit jelent az, hogy nemezis? Az érintett, erősebb fél kinyilatkoztatása a méltó büntetés mértékét illetően. Az érintett fél jelen esetben egy szadista állat... én.

(#993) cadtamas válasza slyder81 (#991) üzenetére


cadtamas
tag

Én ugyan nem vagyok szakértő a témában, nagyjából ugyanott tartok a programozásban, mint te, de az a probléma, hogy mint objektum van behelyezve a háttér gif a vászonra.
Ne adj neki nevet és akkor nem lesz szerintem gond.

Nem tudom kipróbálni, de én valami ilyennel próbálkoznék:

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)
PhotoImage (file ='alap.gif') #Ha nem adsz neki nevet, nem fogja megfogni szerintem.
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

(#994) cadtamas válasza cadtamas (#993) üzenetére


cadtamas
tag

Eh, hülyeséget beszélek.
Ha kitörlöd a hivatkozást a következő sor hibát fog kiadni.

Akkor viszont én arrafelé tapogatóznék, hogy a mozgatható elemeket beletenném egy listába és hozzáadnék egy sort a mouseDown() metódushoz, hogy csak akkor működjön ha az objektum eleme a a listának.

(#995) cadtamas


cadtamas
tag

Na, ez lesz most az utolsó.
Találtam ezt a tag-es megoldást.
Remélem működni fog:
#-*- 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', tags='kor') #adunk hozzá egy tag-et
self.c.create_oval(x3, y3,x4, y4, fill ='blue', tags='kor')
#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)
sel.tags = self.c.gettags(self.selObject) #Kiolvassuk a tag-et
if self.tags=='kor':
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

[ Szerkesztve ]

(#996) slyder81 válasza cadtamas (#995) üzenetére


slyder81
tag

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.

(#997) cadtamas válasza slyder81 (#996) üzenetére


cadtamas
tag

Próbáld meg ezzel:

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)
sel.tags = self.c.gettags(self.selObject) #Kiolvassuk a tag-et
if self.tags=='kor': #talán vedd hozzá hogy 'current' ha nem működik rendesen
self.c.itemconfig(self.selObject,width =3)
self.c.lift(self.selObject)
else:
self.currObject =None #így már elvileg nem fogja mozgatni

[ Szerkesztve ]

(#998) slyder81 válasza cadtamas (#997) üzenetére


slyder81
tag

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 ]

(#999) cadtamas válasza slyder81 (#998) üzenetére


cadtamas
tag

Szívesen.
Én is tanultam belőle.

(#1000) slyder81


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 ]

Copyright © 2000-2024 PROHARDVER Informatikai Kft.