Hirdetés

2024. május 5., vasárnap

Gyorskeresés

Hozzászólások

(#901) cadtamas válasza szucstom (#900) üzenetére


cadtamas
tag

Ha a Gerard Swinnen könyvet használod, akkor ne tedd félre.
Az egyik legösszeszedettebb, legjobb könyv rengeteg példával és feladattal.
Kb. a felénél járok és én is 3.6-ot használok, de 1-2 ilyen parancstól eltekintve tökéletesen használható.
Ezekre meg könnyű rákeresni, hogy miért vannak.

(Sokáig nem tudtam, de rengeteg feladat ki van dolgozva a könyv utolsó részében :))

(#902) szucstom válasza cadtamas (#901) üzenetére


szucstom
őstag

Hát most meg nem mondom, ki a könyv szerzője. Gugliban rákerestem, hogy python kezdőknek és egy pdf-et találtam, ami még a 2.x-edik verzióhoz íródott.

PS4 ID: Z0D14C_1990; Manjaro KDE

(#903) szucstom válasza cadtamas (#901) üzenetére


szucstom
őstag

Na, megtaláltam, pont az van meg:) használom akkor tovább, ha tényleg annyira jó belőle tanulni

PS4 ID: Z0D14C_1990; Manjaro KDE

(#904) EQMontoya válasza cousin333 (#899) üzenetére


EQMontoya
veterán

Ezek közül van olyan, amit tök kezdőnek is ajánlanál?
Vagy egy hölgy ismerős, aki érdeklődik programozás iránt, de nincs semmi elöképzettsége.

Same rules apply!

(#905) szucstom válasza EQMontoya (#904) üzenetére


szucstom
őstag

A gerard swinnen féle könyvet mondanám, ha már azt is ajánlották :)

PS4 ID: Z0D14C_1990; Manjaro KDE

(#906) cousin333 válasza EQMontoya (#904) üzenetére


cousin333
addikt

Ez egy nem triviális kérdés, hiszen mindenkinek mások az előismeretei, képességei és gondolkodásmenete, de szerintem a Think Python (PDF) egy ilyen kezdő-barát könyv, mert érhetően, egyszerű szavakkal, tömören elmagyarázza a programozás alapjait is. Egyébként ebből a szempontból a Swinnen könyv is ajánlható, sőt, összehasonlítva meglepően sok az egyezés a két forrás között...

Ami nekem a Swinnen könyvben nem tetszik - és amit már többször is jeleztem -, hogy elavult: 2005-ben adták ki, ami a Python 2.4 ideje... a 3-ast nem említi, hiszen az akkor még nem is létezett. Sok minden most is érvényes, más dolgok viszont megváltoztak, kibővültek azóta, akár az alap dolgokat tekintve is. Csak néhány példa:
- print: statement vs függvény
- egész osztás
- xrange vs range (izip vs zip... stb)
- sztring vs byte

Szerintem ha valaki most ismerkedik vele, az egyből a 3-assal kezdjen és ne tanulja meg feleslegesen (es adott esetben hibásan) a 2-est, csak majd jóval később, ha szüksége lesz rá (ha szüksége lesz rá).

Hozzáteszem: magyar nyelven még mindig nem nagyon van alternatívája a Swinner könyvnek.

[ Szerkesztve ]

"We spared no expense"

(#907) szucstom válasza cousin333 (#906) üzenetére


szucstom
őstag

én igaz totál kezdő vagyok, de azt mondom, igazad van. Egyetlen nagy hátrány, hogy én még most tanulom komolyabban az angolt (bár ugye kockulás és eredeti nyelven való filmnézés miatt elég sok ragadt rám), így ha nem is tudok mindent teljesen szó szerint lefordítani, de nagyjából talán megértem a leírásokat.

PS4 ID: Z0D14C_1990; Manjaro KDE

(#908) EQMontoya válasza cousin333 (#906) üzenetére


EQMontoya
veterán

Az angol nem para, köszönöm a tippeket!
Igazság szerint programozni egyetemen tanultam, főleg C-t, C++, kis Java, C#, basht már magamtól, aztán utána Python, JS már ment tutorial alapján is, mert sok mást láttam. Szóval halvány fogalmam sincs, hogy milyen egy kezdőnek ajánlható könyv, sosem tanultam könyvből programozni.

Same rules apply!

(#909) szucstom


szucstom
őstag

Lehet, hogy most totál hülyeséget fogok kérdezni, de Pythonban lehet szerverautomatizáláshoz programokat írni?
(félreértés ne essék, nem pont ezért kezdtem bele, azt hallottam, hogy ezzel - is - lehet könnyen programozást tanulni).
Ha ez igaz, akkor nekem csak bónusz lenne a rendszergizda papír mellé :D

PS4 ID: Z0D14C_1990; Manjaro KDE

(#910) EQMontoya válasza szucstom (#909) üzenetére


EQMontoya
veterán

Mit értesz szerverautomatizálás alatt? :)

Same rules apply!

(#911) szucstom válasza EQMontoya (#910) üzenetére


szucstom
őstag

Hát nem igazán mélyedtem el még abban a témában sem, egyenlőre keresem az opciókat, hogy mi lenne jó a rendszergizda mellé. Ezt mondta nekem egy ismerős, hogy jó az automatizáláshoz :)

PS4 ID: Z0D14C_1990; Manjaro KDE

(#912) harylmu válasza szucstom (#911) üzenetére


harylmu
őstag

Üzemeltetéshez Windows alatt powershell, linux alatt bash inkább.

(#913) szucstom válasza harylmu (#912) üzenetére


szucstom
őstag

A powershellhez jó a python? Vagy annak is megvan a saját különbejáratú nyelve?

PS4 ID: Z0D14C_1990; Manjaro KDE

(#914) EQMontoya válasza harylmu (#912) üzenetére


EQMontoya
veterán

Vagy inkább pythont használsz mindkettőn, és tudsz univerzális kódot írni. :)

Same rules apply!

(#915) harylmu válasza EQMontoya (#914) üzenetére


harylmu
őstag

ez igaz, de nem így működik a való életben az üzemeltetés tapasztalataim szerint. inkább már oprendszerbe beépített dolgokat használnak.
de legelső nyelvnek szerintem is pythonnal érdemes szórakozni.

(#913): nem. a powershell egy script nyelv.

(#916) szucstom válasza harylmu (#915) üzenetére


szucstom
őstag

akkor az külön tanulandó :D egyenlőre próbálkozom a pythonnal, majd ha azt megtanultam, jöhet a PowerShell :D

PS4 ID: Z0D14C_1990; Manjaro KDE

(#917) pvt.peter


pvt.peter
őstag

Sziasztok,

Egy olyan programot keresek, ami kiirja azt, hogy egy adott futtathato allomany, milyen fajlmuveleteket hajtott vegre.
Egesz konkretan arra lennek kivancsi, hogy egy adott *.exe fajl milyen tovabbi fajlokat hoz letre az altala meghivott *.dll fajl segitsegevel.

Elore is koszonom a segitseget.

Ez egy .50-es rombolópuska, elég szép visszarúgással.

(#918) sztanozs válasza pvt.peter (#917) üzenetére


sztanozs
veterán

Bár ennek semmi köze a pythonhoz, de process monitor

[ Szerkesztve ]

JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...

(#919) pvt.peter válasza sztanozs (#918) üzenetére


pvt.peter
őstag

basszus, félrenyomtam a topikot ...
mindenesetre köszi megnézem :)

Ez egy .50-es rombolópuska, elég szép visszarúgással.

(#920) Damateo


Damateo
aktív tag

Sziasztok,
Kicsit magamról.
Jelenleg munka mellet rendszergazda iskolát végzek.
Van egy alap webfejlesztő iskolám, statikus oldalakat tudok készíteni (HTML+CSS).
Ezt a tudásom szeretném bővíteni, hogy dinamikus oldalakat is tudjak alkotni.
Tudom hogy általában ehhez a php társul.
Szeretnék olyan nyelvet tanulni ami több helyzetben is megállja helyét.
Szerintetek jelenlegi tudásom bővítésére alkalmas a Python?

Válaszotokat köszönöm.

(#921) cousin333 válasza Damateo (#920) üzenetére


cousin333
addikt

Üdv!

Látom, senki nem válaszolt: én meg nem értek hozzá, de szerintem igen, alkalmas lenne.

"We spared no expense"

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


pbalintka
csendes tag

Nyugodtan használd a pythont html és css mellé. Legegyszerűbben talán a Flask nevű frameworkkel tudod elkezdeni a tanulást.

(#923) cadtamas


cadtamas
tag

Üdv, ismét elakadtam.

Van egy programom, ami egy elektromos ellenállásra rajzolja ki a megfelelő színkódokat.
Gerard Swinnen 13.4. feladat
Az lenne a feladat, hogy miután beütöm az ellenállás értékét, ne gombhoz legyen rendelve a csíkok átszínezése, hanem csak simán az <enter> gomb lenyomásával működjön.
Beleírtam amit elvileg kell, de a következő hibát írja ki:
"TypeError: changeColours() takes 1 positional argument but 2 were given"

Tudna valaki segíteni, hogy mit rontottam el?

from tkinter import*
from math import log,log10

class Application:
def __init__(self):
"""A főablak constructora"""
self.root=Tk()
self.root.title('Színkódok')
self.drawResistor()
Label(self.root,text="Írja be az ellenállás értékét ohm-ban: ").grid(row=2)
from tkinter import*
from math import log,log10

class Application:
def __init__(self):
"""A főablak constructora"""
self.root=Tk()
self.root.title('Színkódok')
self.drawResistor()
Label(self.root,text="Írja be az ellenállás értékét ohm-ban: ").grid(row=2)
#Button(self.root, text='Mutat', command=self.changeColours).grid(row=3,sticky=W) #Korábban ezzel működött
self.entry=Entry(self.root,width=14)
self.entry.bind("<Return>",self.changeColours) #Ezt írtam csak bele
self.entry.grid(row=3)
#színkódok:
self.cc=['black','brown','red','orange','yellow','green','blue','purple','grey','white']
self.root.mainloop()

def drawResistor(self):
"""Vászon ellenállás modellel, amin három színes csík van"""
self.can=Canvas(self.root,width=500,height=200,bg='light blue')
self.can.grid(row=1,pady=5,padx=5)
self.can.create_line(10,100,490,100,width=3)
self.can.create_rectangle(130,60,360,140,fill='beige',width=2)
#három színes csík (feketék alapból)
self.line=[] #listában tároljuk őket
for x in range(150,250,48):
self.line.append(self.can.create_rectangle(x,60,x+30,140,fill='black',width=0))

def changeColours(self):
"""A beírt értéknek megfelelő három szín kiiratása"""
self.v1ch=self.entry.get() #A get() metódus egy stringet ad vissza (ez a bekért adat)
try:
v=float(self.v1ch) #Ha sima float értéket írtunk be akkor ezzel működik
except:
err=1 #Nem numerikus adat
else:
err=0
if err==1 or v>1e11:
self.reportError() #Nem megfelelő érték
elif v<10:
li=[0]*3
li[1]=int(v+.5)
li[2]=int((v-int(v))*10+.5)
for n in range (3):
self.can.itemconfigure(self.line[n],fill=self.cc[li[n]])
else:
li=[0]*3
logv=int(log10(v)) #logaritmus egész része
ordgr=10**logv #nagyságrend
li[0]=int(v/ordgr) #egész rész
decim=v/ordgr-li[0] #tizedes rész
li[1]=int(decim*10+.5) #+0.5 a korrekt kerekítéshez
li[2]=logv-1
#a 3. szakasz színezése:
for n in range (3):
self.can.itemconfigure(self.line[n],fill=self.cc[li[n]])

def reportError(self):
self.entry.configure(bg='red') #mező hátterének színe
self.root.after(1000,self.emptyEntry) #1 sec után törölni

def emptyEntry(self):
self.entry.configure(bg='white') #fehér háttér vissza
self.entry.delete(0, len(self.v1ch)) #karakterek törlése

####Főprogram###
f=Application()

[ Szerkesztve ]

(#924) pbalintka válasza cadtamas (#923) üzenetére


pbalintka
csendes tag

A changeColours híváskor kap egy eventet.
Írd át így:

def changeColours(self, event):

(#925) cadtamas válasza pbalintka (#924) üzenetére


cadtamas
tag

Nagyon köszönöm! :D
Beírtam már egyszer, de kitöröltem, mert a pycharm beszínezte inaktívra. Azt hittem, valami külön eljárás kell amit még nem ismerek.

(#926) EQMontoya válasza cadtamas (#925) üzenetére


EQMontoya
veterán

Azért színezte be, mert nem használod az eventet (mint változót), tehát unused parameter. :)
Ennek ellenére a függvény szignatúrája még az, ami.

[ Szerkesztve ]

Same rules apply!

(#927) Lacc


Lacc
aktív tag

Sziasztok!

Egy algoritmust implementáltam pythonban, de nem azt adja ki megoldásban, mint ami a pdf szerepel.
Meg tudná nekem valaki nézni, hogy mit hol ronthatam el? Lehet erősen félreértelmeztem a pseudo kódot.

def pi_prefix_fuggveny(pattern):
P = list(pattern)
m = len(P)
a = [0] * m
k = 0

for q in range(2, m):
while k > 0 and P[k+1] != P[q]:
k = a[k]
if P[k+1] == P[q]:
k = k + 1
a[q] = k

return a

print pi_prefix_fuggveny("ababaca")

Nekem ez a megoldás jön ki:
[0, 0, 0, 1, 2, 0, 0]
Mi közben ez lenne a jó megoldás
[0, 0, 1, 2, 3, 1, 1]

Ez pedig itt a link, a 7. dián van a pseudo code-os leírás

[ Szerkesztve ]

(#928) cousin333 válasza Lacc (#927) üzenetére


cousin333
addikt

Nekem ehhez már késő van, de első ránézésre 2 dolgon úszhatott el a kódod:
- indexelés: ha jól látom a példában az a[1] a legelső elemet jelenti, Pythonban viszont ez az a[0] Nem mondom, hogy emiatt rossz, csak erre oda kell figyelni
- Python ismeret hiánya: a pszeudo-kódban a ciklus egyértelműen 2-től m-ig megy, viszont a használt range függvény 2-től (m-1)-ig fut csak!

Erre utal az is, hogy a te eredményed látszólag eggyel elcsúszott a helyes megoldáshoz képest. Talán inkább range(1, m) kellene, de persze ez nem feltétlenül oldja meg a problémádat.

[ Szerkesztve ]

"We spared no expense"

(#929) axioma válasza Lacc (#927) üzenetére


axioma
veterán

KPM, de regen volt!
Egyebkent jo kerdes, hogy mi a celod, a pszeudokod pontos atirata, vagy az elofeldolgozas megertese.
Az indexek javitasaval (range(1,m) es k+1 helyett k) jol fog mukodni az algo (persze az a-ban is elcsuszva lesznek az ertekek a 0-tol szamozas miatt! marmint a vart eredmenyt adja az a mint teljes tomb; de ami a pszeudokod-ban a[2], az nalad az a[1], ez fontos lesz ha a masik felet is implementalod)
P=list(pattern) tok folosleges.

[ Szerkesztve ]

(#930) LilProphet90


LilProphet90
senior tag

Sziasztok! Az Udemy Python kurzusa most igen kedvező áron van, abszolút kezdő vagyok, a kérdésem, hogy ismeritek-e, és mennyire érdemes belevágni? Vagy esetleg inkább a már első posztban (is) linkelt anyagok valamelyikét ajánljátok? Köszi!

Zenei alapok, remixek: http://www.reverbnation.com/lilprophetmusic

(#931) Lacc válasza cousin333 (#928) üzenetére


Lacc
aktív tag

Igen, eszembe jutott nekem is, hogy a matematikai indexelés 1-től az infós meg 0-tól kezdődik.
Igen, annyira nem érdekel a python, inkább ruby-t preferálom helyette.
Sosem szerettem a for ciklust kombinálva a range függvényyel, jobb szeretem a C féle for ciklust, ott mindig tudom állítani, hogy < vagy <= legyen.

axioma. Köszi a segítséget.

(#932) Lacc válasza LilProphet90 (#930) üzenetére


Lacc
aktív tag

Az alapokhoz a Coursera-s kurzusok is jók, amelyek ingyenesek (akár csak a Microsoft kurzusai pythonban amik szintén ingyenesek), de ha tényleg érdekel a NumPy, BigData és egyéb finomságok, akkor ismertető kurzusnak tökéletes. Ezt ezért gondolom így, mert a NumPy-os rész benne csak 25perc, ami szerintem igazán kevés. Bár a webes python oktató anyagok lehet hogy tényleg jók.

(Szerintem bárki lehet Udemy-s oktatók és ez néha érződött is az előadásokon - vagy amik ingyenesek voltak - nekem nem vált be, de lehet neked igen. Nekem csak azért nem mert én alapból fejlesztek napi szinten)

(#933) cousin333 válasza Lacc (#931) üzenetére


cousin333
addikt

"Sosem szerettem a for ciklust kombinálva a range függvénnyel"

Semmi gond, a Python sem szereti annyira. :) Inkább a listaelemeken való iterálást preferálja. Pl.:

lista = ['egy', 'ketto', 'harom']

for elem in lista:
print(elem)

Ez szükség esetén megfejelhető az enumerate és a zip használatával, valamint a lista "szeletésével":

for elem in lista[1:]:
print(elem)

Az persze megint egy más kérdés, hogy akkor hogyan lehetne "pythonikusan" leimplementálni a fenti példát...

[ Szerkesztve ]

"We spared no expense"

(#934) EQMontoya válasza cousin333 (#933) üzenetére


EQMontoya
veterán

Hát ha utóbbit akarsz csinálni, arra van ugye enumerate meg ilyesmi. :)

Egyébként mostanság olvastam elég sok python kódot, és az az érzésem, hogy a legtöbben C-t írnak, csak nem annyira típusos, és python interpreterrel futtatják. Mindent, ami megvan egyébként a nyelvben a for ciklusok elkerülésére (map, filter, reduce, any, all, stb), azt szépen megírják kézzel.

[ Szerkesztve ]

Same rules apply!

(#935) cousin333


cousin333
addikt

Van egy sztringem (pl. "X1") és abból szeretnék egy 1 elemű listát (pontosabban iterable-t). Azaz keresem a magic nevű metódust/megoldást, ami tudja az alábbit:

>>> input = "X1"
>>> magic(input)
["X1"]

Eddig nem vészes. Ugyanakkor azt is szeretném, ha a magic akkor is működne, ha az input már eleve egy lista, ilyenkor viszont ne variáljon rajta semmit:

>>> input = ["X1", "X2", "X3"]
>>> magic(input)
["X1", "X2", "X3"]

Nyers erővel nyilván megoldható lenne, de nekem az volna a kérdésem, hogy mi erre a "legpythonikusabb" (legelegánsabb, legegyszerűbb) megoldás? Egyáltalán létezik ilyen? Vagy éppen ellenkezőleg, túlságosan triviálisat kérdeztem? :U

[ Szerkesztve ]

"We spared no expense"

(#936) pbalintka válasza cousin333 (#935) üzenetére


pbalintka
csendes tag

Neked a list() kell.

>>> list(input)

[ Szerkesztve ]

(#937) Bazs87


Bazs87
tag

Sziasztok!

Új vagyok még itt és egy elvileg banális kérdéssel szeretnélek röviden megzavarni titeket:

VBS kód:

data1 = 0
data2 = 0

tmp = HTTPPost("https://api.thingspeak.com/update","api_key=abcx&field1=" + cstr(data1) + "&field2=" + cstr(data2))

Function HTTPPost(sUrl, sRequest)
set oHTTP = CreateObject("Microsoft.XMLHTTP")
oHTTP.open "POST", sUrl,false
oHTTP.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oHTTP.setRequestHeader "Content-Length", Len(sRequest)
oHTTP.send sRequest
HTTPPost = oHTTP.responseText
End Function

ezt szeretném átülteni 1 az 1ben python3.3-ba. A gond, hogy már a google találatok első 2 oldalán végigmentem, de már a libek telepítésekor is hibák tömkelegét jelzi a python. Kell erre lennie valami egyszerű megoldásnak. (a http get csonk nélkül ment 2 perc alatt)

Lehet, hogy a lib installját rontom el, csak meghívom az install.py-t, ami nem is jelez hibát, csak utána a mintaprog lefutása.

Lib nélkül v gyári libbel még jobb lenne ugye.

Köszönöm előre is!
Bazs87

(#938) cousin333 válasza pbalintka (#936) üzenetére


cousin333
addikt

Köszönöm, de sajnos nem jó. Mivel a sztring iterálható, a list karakterekre bontja:

>>> list("X1")
["X", "1"]

Így viszont nem teljesül az első elvárás... :(

[ Szerkesztve ]

"We spared no expense"

(#939) cousin333 válasza Bazs87 (#937) üzenetére


cousin333
addikt

Leírhattad volna a Python kódodat is. Milyen könyvtárat akartál feltenni és hogyan? Én a pip-et javaslom erre a célra (csomagtelepítésre), sokkal egyszerűbb és a megfelelő verzió megy fel. Pl. a parancssorba írva:

C:\>pip install numpy pandas matplotlib

A webes felhasználásban nem vagyok otthon, de szerintem a gyári urllib amit te keresel, pontosabban annak a request és parse moduljai.

[ Szerkesztve ]

"We spared no expense"

(#940) Bazs87 válasza cousin333 (#939) üzenetére


Bazs87
tag

köszönöm a válaszod!

Python kód: azért nem másoltam be ide python kódot, mert nem találtam olyan mintát ami hiba nélkül lefordul. Nem szerettem volna 30 gagyi kódot bemásolni ide. Valszeg a lib telepítése az oka, aminek egyenlőre nem tudom megfelelően a menetét.

Az urllib2 és a [link] Home assitant libet próbáltam eddig felrakni.

Annyit csináltam, hogy letöltöttem a lib mappáját, majd kicsomagolás kattintottam a setup.py-re. Ez ugye nem jött be. (egy további libben már ott elakadtam, hogy setuptools-t kér, amit szintén nem lehet exevel telepiteni, csak python ver 2.7-ig)
Utána bemásoltm a gyökérbe ("C:\Python33") az egész lib mappán, katt, de ott sem. Amikor a setupot IDLE-ből meghívva futtattam akkor sem akarta a jót, de legalább már hibát kiírt.

A pipet láttam már raspis használatban, de winen szeretnék dolgozni.

Valszeg alap dolog amit nem tudom, rá is kerestem a helyes setupleírásra, de nem segített, a libekben pedig a readme-ben sincs leírva.

Gyakorlatilag annyit szeretnék elérni, hogy pár működő vbs kódomat áthajítsam python környezetbe. (http post, webről *.xml/html letöltése, + egy home assistance vezérlőlib meghívása)

Esetleg tudnál nekem linkelni v írni egy rövid bemutatást mit és hogyan kell a python 3.3 alá feltuszkolni? Videókat is csak 2.7-hez találtam sajnos.

(#941) EQMontoya válasza cousin333 (#938) üzenetére


EQMontoya
veterán

Gondolkodtam rajta tegnap, de a nyers erőnél (reflection) jobb megoldást nem találtam sehogy.

[ Szerkesztve ]

Same rules apply!

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


cousin333
addikt

Természetesen Windowsra is elérhető a pip. Tulajdonképpen van valamilyen jelentősége annak, hogy a 3.3-at használod, vagy csak ezt találtad meg? A 3.4-től kezdve ugyanis a pip a gyári Python telepítő része.

Ha pedig nincs fenn, akkor így tudod feltenni: [link]. Mindenképpen érdemes, mert a segítségével sokkal egyszerűbben és kényelmesebben tudsz új modulokat telepíteni. Kezeli a pontos verziót és az esetleges függőségeket is.

Ahogy nézem az urllib2 a Python 2 telepítés része (gyári modul), így használata semmiképpen sem javasolt. A Python 3-ban ehelyett van a már linkelt urllib, illetve annak almoduljai. Ezen kívül javasolják még a Request modult, mint az életedet megkönnyítő kiegészítőt, ami gondolom az urllib fölé épül.

A Request-et - csakúgy, mint a linkelt Home Assistant könyvtárat (pyHS100) -, könnyen felteheted a pip-pel, mivel mindkettő része a PyPi-nek (Python Package Index):

c:\> pip install request pyhs100

[ Szerkesztve ]

"We spared no expense"

(#943) cadtamas


cadtamas
tag

Sziasztok.
Az osztályoknál tartok és ismét sikerült elakadni.
Tudom, hogy mi a probléma, de nem tudom miként lehet megoldani.

"A feladat az, hogy a tkinter Frame()-osztályából kell leszármaztatni az Application osztályt, aminek a constructora egy 400x400-as vásznat hoz létre és 2 gombot. A vásznon a Visage osztály egy objektumát fogjuk létrehozni..."

from tkinter import*

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

class Application(Frame):
def __init__(self,boss=None):
Frame.__init__(self) #szülőosztály constructor
#Példány attribútomok inicializálása:
self.canv=Canvas(height=400,width=400)
self.canv.pack(side=TOP,padx=5,pady=5)
Visage(self.canv)
Button(self,text="Open", command=self.open).pack()
Button(self,text="Close", command=self.shout).pack()


def shout(self):
Visage.mouth=self.canv.create_line(170,270,230,270,fill='black')


def open(self):
Visage.mouth=circle(self.canv,200,270,30,color="black")


class Visage:
"""Arc rajzoló osztály"""
def __init__(self,canv_):
self.canv=canv_
circle(canv_,200,200,150,color="black") #fej
circle(canv_,160,160,30,color="black") #bal szem
circle(canv_,160,160,10,color="black")
circle(canv_,240,160,30,color="black") #jobb szem
circle(canv_,240,160,10,color="black")
circle(canv_,200,200,20,color="black") #orr
self.mouth=0 #száj


app=Application()
app.mainloop()

Nem jelennek meg a gombok (Eddig egy Tk objektum kellett hozzá, de most nem tudom hogyan hozzam létre).

(#944) pbalintka válasza cadtamas (#943) üzenetére


pbalintka
csendes tag

A Frame-t elfelejtetted "pack"-olni:

from tkinter import*

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

class Application(Frame):
def __init__(self, master=None):
Frame.__init__(self) #szülőosztály constructor
self.master = master

self.pack(fill=BOTH, expand=1) # EZ HIANYZOTT

#Példány attribútomok inicializálása:
self.canv=Canvas(height=400,width=400)
self.canv.pack(side=TOP,padx=5,pady=5)
Visage(self.canv)

Button(self, text="Open", command=self.open).pack()
Button(self, text="Close", command=self.shout).pack()


def shout(self):
Visage.mouth=self.canv.create_line(170,270,230,270,fill='black')


def open(self):
Visage.mouth=circle(self.canv,200,270,30,color="black")


class Visage:
"""Arc rajzoló osztály"""
def __init__(self,canv_):
self.canv=canv_
circle(canv_,200,200,150,color="black") #fej
circle(canv_,160,160,30,color="black") #bal szem
circle(canv_,160,160,10,color="black")
circle(canv_,240,160,30,color="black") #jobb szem
circle(canv_,240,160,10,color="black")
circle(canv_,200,200,20,color="black") #orr
self.mouth=0 #száj


root = Tk()

app=Application(root)
app.mainloop()

[ Szerkesztve ]

(#945) pbalintka válasza cousin333 (#942) üzenetére


pbalintka
csendes tag

"Ahogy nézem az urllib2 a Python 2 telepítés része (gyári modul), így használata semmiképpen sem javasolt."

Ezt nem értem. Ha valami gyári modul, akkor annak használata miért nem javasolt? Elég hardcore gyári modulok nélkül pythont használni. Tegyük fel socket-et akarok programozni, akkor keressek a neten egy másik modult hátha valaki feltalálta újra a "kereket"? Vagy egy egyszerűbb példa a re (regex ami eléggé hasznos) modul, szintén gyári.

(#946) gyurkikrisz válasza pbalintka (#945) üzenetére


gyurkikrisz
őstag

ha csak a következő mondatot elolvasod, már nem kérdeznéd ezt.

A tuning a kisfiúk alap órajele. | i5 6500

(#947) cousin333 válasza pbalintka (#945) üzenetére


cousin333
addikt

Ez valóban félreérthető volt, a zárójeles rész csak magyarázat akart lenni. Azt szerettem volna kifejezni, hogy az urllib2 (hangsúly a "2"-n!) a Python 2 gyári modulja, és mint ilyen, nincs keresnivalója a Python 3-ban. Utóbbiban gyárilag nincs is benne (ezzel a névvel), ha megnézed a dokumentációt, és a lap tetején kiválasztod valamelyik 3-as verziót, akkor a főoldalra dob, pont emiatt.

Ő Python 3-at használ, tehát ne erőltesse az urllib2 telepítését (ő írta, hogy külön megpróbálta feltenni), használja a gyárilag meglévő "sima" urllib-et. Ha nem írja konkrétan a "2"-est, nem is akadok fenn rajta.

Magyarán nincs szó arról, hogy ne használjuk a gyári modulokat, sőt! De ne próbáljunk a 3-as Pythonba "kiselejtezett 2-es modulokat" beledrótozni.

Amúgy az utóbbi időben talán a time volt az egyetlen gyári modul, amit direktben használtam, szinte mindig külsős fejlesztéseket importáltam (amik persze építenek a gyári modulokra is, de ez legyen az ő problémájuk). Mellesleg pont azért, mert kényelmesebbek, mint a "lower level" gyáriak.

Na, jó sokat írtam kb. a semmiről, de remélem már érthetőbb voltam.

[ Szerkesztve ]

"We spared no expense"

(#948) cadtamas válasza pbalintka (#944) üzenetére


cadtamas
tag

Köszönöm ismét! : :R

(#949) pbalintka válasza cousin333 (#947) üzenetére


pbalintka
csendes tag

Valóban fura volt a fogalmazás. Így már más értelmet nyert a mondanivalód és így igazad is van.

(#950) cadtamas


cadtamas
tag

Ugyanaz a feladat, de egy olyan probléma, amit nem tudok hova tenni.

from tkinter import*

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

class Application(Frame):
def __init__(self,master=None):
Frame.__init__(self) #szülőosztály constructor
#self.master = master #ezt muszáj volt inaktívvá tenni, mert nem engedte bezárni a főablakot
self.pack()
#Példány attribútomok inicializálása:
self.canv=Canvas(height=400,width=400,bg='white')
self.canv.pack(side=TOP,padx=5,pady=5)
self.face=Visage(self.canv)
Button(self,text="Open", command=self.face.open).pack(side=RIGHT)
Button(self,text="Close", command=self.face.close).pack(side=RIGHT)



class Visage:
"""Arc rajzoló osztály"""
def __init__(self,canv_):
self.canv=canv_
circle(canv_,200,200,150,color="black") #fej
circle(canv_,160,160,30,color="black") #bal szem
circle(canv_,160,160,10,color="black")
circle(canv_,240,160,30,color="black") #jobb szem
circle(canv_,240,160,10,color="black")
circle(canv_,200,200,20,color="black") #orr
self.mouth=0 #száj

def open(self):
self.canv.delete(self.mouth) #törlés
self.mouth=circle(self.canv,200,270,30,color="black")

def close(self):
self.canv.delete(self.mouth) #törlés, de valamiért nem törli!!!
self.mouth=self.canv.create_line(170,270,230,270,fill='black')

Az open metódus működik rendesen, de a close nem.
Arra tudok gondolni, hogy valamiért nem működik a delete metódus és az open() csak elfedi a vízszintes vonalat, de nem törli.
Az működne ha letörölném az egész vásznat és újrarajzolnám az arcot is, de szerintem ennek is kellene működnie.
Már órák óta ezen agyalok, de nem jutok dűlőre.

Copyright © 2000-2024 PROHARDVER Informatikai Kft.