Python programozás - Szoftverfejlesztés fórum

üzenetek

hozzászólások


Lacces
(őstag)

Sziasztok!

Ismét jelentkezem.

Most egy GUI-s feladatot csináltam meg a könyv alapján. Egy kis vonatot rajzol ki, színezve a vagonok, ablakok, arcok.

Első kérdésem, ami talán egyszerűbb:
Tudtok benne kód rövidítést? Esetleg "szebb" kódot? Már kaptam jobb megoldásokat itt a fórumon.

Második kérdésem:
Van egy adott light() és egy light34(). Az előbbi az ablak színét feketéről sárgára változtatja. Az utóbbi, a 3. és 4. vagon ablakit változtatja meg.
Ez ügyben a kérdésem: Hogyan lehet azt elérni, hogy, adott indexű ablakokat világítson csak meg?

Próbálkoztam vele, de nem jött össze:

light()-ot így módosítani, hogy kap egy index nevű paramétert, ha az f == index, akkor azt az f-et fogja csak módosítani.
def light(self, index):
"felkapcsolja a vagon belső világítását"
for f in self.ablakIndex:
if f==index:
self.canvas_.itemconfigure(f, fill="yellow")

def light34(self):
"ablak színének megváltoztatása a 3.és 4. vagonban"
self.v3.light(1)
self.v4.light(2)

És egy másik kérdés is érdekelne, hogyan lehetne, egyszerre több ablak indexét is átadni? Én tömbre gondoltam, vagy numerikus listára. És akkor az elágazás a for ciklusban így nézne ki (light metódusban)
if f in numerikuslista
Bár ezt sem tartom szép megoldásnak...

Teljes, működő kód:
# coding: iso-8859-2

from Tkinter import *

def circle(can,x,y,r, colour="white"):
"a <can> vászon egy <r> sugarú kör rajza <x,y> pontban"
can.create_oval(x-r, y-r, x+r, y+r, fill=colour) # kör rajzolása elipszisből

class Application(Tk):
def __init__(self):
#Szülőosztály konstruktora:
Tk.__init__(self)
self.can=Canvas(self, width=475, height=130, bg="white")
self.can.pack(side=TOP, padx=5, pady=5)
Button(self, text="Train", command=self.rajzolas).pack(side=LEFT)
Button(self, text="Hello", command=self.kineznek).pack(side=LEFT)
Button(self, text="Világítás", command=self.light34).pack(side=LEFT)

def rajzolas(self):
"4 vasúti kocsi létrehozása vásznon"
# a vasúti kocsikat a vagon osztályban vannak definiálva
self.v1=vagon(self.can, 10, 30)
self.v2=vagon(self.can, 130,30, "dark green")
self.v3=vagon(self.can, 250,30, "maroon")
self.v4=vagon(self.can, 370, 30, "purple")

def kineznek(self):
"személyek megjelenése bizonyos ablakokban"
self.v1.perso(3) # 1.vagon, 3.ablak
self.v3.perso(1) # 3.vagon, 1.ablak
self.v3.perso(2) # 3.vagon, 2.ablak
self.v4.perso(2) # 4.vagon, 1.ablak

def light34(self):
"ablak színének megváltoztatása a 3.és 4. vagonban"
self.v3.light()
self.v4.light()


class vagon:
# a paramétereket a rajzolás függvényben kapja
# a kosntruktorhoz hozzáadtam a colour paramétert
def __init__(self, canvas_, x, y, colour="navy"):
"egy kis vagon rajza a <canvas> vásznon <x,y> pontban"
# paraméterek tárolása példány-változókban
self.canvas_, self.x, self.y=canvas_, x, y
# alap téglalap rajzolása
canvas_.create_rectangle(x,y, x+95, y+60, fill=colour)
# 3 ablak 25x40 pixel, 5 pixel távolságra
self.ablakIndex=[] # ablak hivatkozásainak tárolása egy lista
for ablak in range(x+5, x+90, 30):
#az ablak index-hez listához (hozzáfűzi) hozzáadja a következő canvas-okat.
self.ablakIndex.append(canvas_.create_rectangle(ablak, y+5, ablak+25, y+40, fill="black"))
# két 12 pixel sugarú kerék
circle(canvas_, x+18, y+73, 12, "gray")
circle(canvas_, x+77, y+73, 12, "gray")

def perso(self, wind):
"egy személy mejelenése a <wind> ablakban"
# minden egyes ablak közepe koordinátájának a kiszámítása:
xm=self.x+wind*30-12
ym=self.y+25
circle(self.canvas_, xm, ym, 10, "pink") #arc
circle(self.canvas_, xm-5, ym-3, 2) #balszem
circle(self.canvas_, xm+5, ym-3, 2) #jobszem
circle(self.canvas_, xm, ym+5, 3) #száj

def light(self):
"felkapcsolja a vagon belső világítását"
for f in self.ablakIndex:
self.canvas_.itemconfigure(f, fill="yellow")

Application().mainloop()

[ Szerkesztve ]


cucka
(addikt)
Blog

Tudtok benne kód rövidítést? Esetleg "szebb" kódot?
Rövidítést nem, mert ez így pont elég rövid. Esetleg írhatnál kevesebb, de jobb minőségű kommentet :) .

Szebb kódhoz meg írd át szépen teljesen oop-s re.
Van egy vonat objektumod, aminek vannak vagonjai (ez egy lista, mert fontos a sorrend). A vagonoknak vannak ablakai (ezek nem feltétlenül osztályok), meg vannak emberek, akik a vagonban ülnek.
A vagonok tudják, hogy hanyadikak a sorban (ezt biztosítja nekik a vonat objektum) és ki tudják rajzolni magukat, illetve fel-le tudják kapcsolni egy adott ablakukat.
Nagyjából valami hasonló, sokáig el lehet ezzel szórakozni.


Lacces
(őstag)

:-) Igen, nem rossz objektumokra szétszedni, csak az objektumok összekötése az már egy érdekes dolog.

Ez a könyv amiből tanultam, az alapokat adja meg a programozásra, ami nem rossz, lehet majd megnézem magamnak azt a komolyabbat is amiből te is tanultál. De az objektumokkal való szórakozás, amikor sok van, és azokat összekapcsolni, nah arra talán egy ilyen projekt példa volt, na majd az alapján összeeszkábálom majd szerintem.

Nem rossz nyelv, ez a python, nekem tetszik, bár sosem gondoltam, hogy komolyabban foglalkoznék vele, hobbi szinten nekem tetszik.

Olyan oldal létezik a python alá, mint például a www.codeproject.com ?
Ahol opensource projektek, tutorialok vannak fent? Egy komplett kis alkalmazás elkészítése.

Google-el az a baj, hogy beírom, hogy java file manager vagy python file manager code source / tutorial / project, akkor nem igazán ad ki rá értelmes találatot.

Ilyen jó lenne, és főleg olyan, ahol sok objektum-orientált szemlélet van benne. :R


nicknev
(csendes tag)

Üdv
Kezdő programozó vagyok, de ezeket ismerem, jó kis oldalak:
github.com
launchpad.net
koders.com
bitbucket.org
Ezek mind-mind tele vannak open source projektekkel, de nem csak Python van.
De nemhiszem, hogy ezeken lennének tutorialok, szerintem csak forráskódok.


n00n
(őstag)

Én is pár hónapja kezdtem el Pythont tanulni. Lényegében az első (sulis Turbo Pascalozást inkább nem sorolom ide :P ) programozási nyelvem lesz. Könyvnek Gérard Swinnen : Tanuljunk meg programozni Python nyelvét (magyar fordítás) választottam [link]

Viszont itt grafikus felületnek a Tkintert használja, ami valljuk be nem éppen a legpraktikusabb grafikus könyvtár.

(A hozzászólásom egy rejtett subscribe lenne. ;] )


bucsupeti
(senior tag)

Szintén most kezdek pythonozni. Egy egyszerű kérdést had tegyek fel. Mi a különbség a 2.7.x és a 3.2.x verziók között, miért fejlesztik mindkét vonalat? A hivatalos oldalon olvastam hogy a 2.7.x sokkal több egyéb rendszerrel kompatibilis mind a 3.x sorozat. Melyiket érdemes feltelepíteni?


ArchElf
(addikt)
Blog

Ha a rendszered támogatja 3-as vonalat, akkor azt. Persze attól is függ, hogy használsz-e (illetve szeretnél-e használni) olyan könyvtárakat, amelyek csak az egyik vagy másik verzióra készültek el. Akkor ugye azt vagy kénytelen használni.
A 3-asban van egy csomó újdonság (néhányat részben vagy egészben backport-oltak 2.x verziókra is), szóval, ha minden megvan neked a 3-as verzióban akkor az ajánlott.
Amúgy még mindkét vonalat fejlesztik.

AE


bucsupeti
(senior tag)

Köszönöm!


ftc
(nagyúr)
Blog

Egy kis helpet kérnék...most kezdtem el pythonban programozni...eddig jobban bejön mint C...de megakadtam

ha else-t irok minig kidob invalid syntaxal......mi a hiba?

csak példa
if (a>100):
print "a blbla"
else : s itt annyi is

mit csinálok rosszul?


ftc
(nagyúr)
Blog

ok rájöttem hibás a könyv :D


nicknev
(csendes tag)

Sziasztok!
Szeretnék csinálni egy 2D-s platformert (mint mario pl) pythonban. Tudnátok egy tutorialt és egy enginet ajánlani? Kezdő vagyok.

üdv


Frigo
(őstag)

Pygame itt találsz modult és tutorialokat


Cheesy
(őstag)
Blog

Csak rátaláltam végre - az úgy tűnik - helyes útra. :)
Először azt hittem php-ra lesz szükségem de pár óra netes keresés és info gyűjtés után (perl vs python többek között...) rájöttem, hogy a py egy jó alap lenne ahhoz amit meg akarok valósítani.
A könyvvel már találkoztam régebben, elolvastam az első kb 30 oldalt, még egy másik "feladat" miatt kellett, de segített.

Az projectem első fázisa:
egy aktív watchdir létrehozása .sfv (crc) checkerrel, majd egy parancs elküldése 100%-nál a következő rutinnak.

Tesztkörnyezetnek mit ajánlotok? Remélem elég hatékonyan lehet windows környezetben is programozni vele ( a leírás alapján igen), mert linux nékem túlnyomó részt ismeretlen.


cucka
(addikt)
Blog

Tesztkörnyezetnek mit ajánlotok?
Lehet. Van a sima windows-os python illetve létezik egy ActivePython nevű környezet is, mindkettő problémamentesen működik.
Javaslom, fejlesztés előtt döntsd el, hogy 2.x vagy 3.x verziójú python-t használsz, vannak eltérések.
Fejlesztőeszköznek Netbeans-t használok python-hoz, teljesen jó.


nicknev
(csendes tag)

Üdv!
Van valami módszer arra, hogy a szótárakban használhassak magyar betűket, meg inputot is kaphassak? pl
a = {'árvíztűrő tükörfúrógép':'valami'}
Az nem segít, ha a .py elejére beírom hogy :
# This Python file uses the following encoding: utf-8

Köszi előre is a segítséget.


cucka
(addikt)
Blog

Az nem segít, ha a .py elejére beírom hogy :
Mert mit gondoltál, a python interpreter majd megérti az angol nyelvű leírást? :D

A unicode stringeket definiáld unicode típusúnak, továbbá kezdd ezzel a file-odat:
# coding=utf8

Egyébként javaslom, hogy unicode karaktereket tartalmazó dict. kulcsok helyett oldd meg máshogy a feladatot.


nicknev
(csendes tag)

Mert mit gondoltál, a python interpreter majd megérti az angol nyelvű leírást?

Elvileg meg kéne, mármint a PEP 0263 szerint ez egy semi-comment, és értenie kellene.

Egyébként javaslom, hogy unicode karaktereket tartalmazó dict. kulcsok helyett oldd meg máshogy a feladatot.

Máshogy meg nem tudom megoldani, mert a feladat az, hogy egy Morse szótárat csináljak (beírod a szöveget, az meg lefordítja, majd le is sípolja.az angol karakterekkel már működik)

Szerk.: Megpróbáltam amit írtál, de így is KeyErrort kapok, nem látok különbséget.De azért köszi.

Valaki, valami megoldás?

[ Szerkesztve ]


Siriusb
(veterán)

Adj' Isten!

Python 3-mal kezdtem el ismerkedni és GUI-t szeretnék klszíteni a tkinter-rel. Kérdésem, amire nem találtam választ: Miként lehetne a root-on belül több különálló (toplevel) ablakot gyártani, amik a szülő keretén kívül nem tartózkodhatnak. Tehát egy szülő ablak foglaljon magába több leszármazott ablakot, vizuálisan is.

Vagy ezt tkinterrel nem lehet megoldani?


Kattt01
(tag)

Hello, látom nemigen él ez a fórum, de hátha választ kapok egy egyszerű kérdésre.
Miért nem tudok .py kiterjesztésű egyszerű scripteket futtatni a ">>> python fajl.py" paranccsal? A fájl helye rendben van, hibaüzenetként sytax errort kapok. ">>> execfile(fajl.py)"-vel működik...

Szerk.: Python 2.7.2-vel, meg 3.2-vel is próbáltam, egyikkel sem megy.

Tudom amatőr kérdés, de elég noob vagyok a témában.

[ Szerkesztve ]


Siriusb
(veterán)

Szia!

Ha terminálban kiadod a python parancsot, a shell elindul?
A fájl nevében nincs space?
Esetleg még próbáld meg a script első sorában megadni az interpretert, pl.:
#!/usr/bin/python3

üzenetek