PROGRAMOZZUNK PYTHONBAN 3. Kötet
|
|
- Borbála Hegedüs
- 6 évvel ezelőtt
- Látták:
Átírás
1 Pro gra Kül mozó önk i so iadá roza s t AZ UBUNTU LINUX KÖZÖSSÉG FÜGGETLEN MAGAZINJA Programozói sorozat Különkiadás PROGRAMOZZUNK PYTHONBAN 3. Kötet 1 A Full Circle magazin nem azonosítandó a Canonical Ltd.-vel
2 A Full Circle magazin különkiadása Full Circle AZ UBUNTU LINUX KÖZÖSSÉG FÜGGETLEN MAGAZINJA Üdvözöllek egy újabb, egyetlen témáról szóló különkiadásban Programozzunk Pythonban 1 7. rész 3. oldal Válaszul az olvasók igényeire, néhány sorozatként megírt cikk tartalmát összegyűjtjük dedikált kiadásokba. Programozzunk Pythonban 20. rész 1 1. oldal Most ez a Programozzunk Pythonban részének az újabb kiadása (a magazin számaiból), semmi extra, csak a tények. Programozzunk Pythonban 1 8. rész 6. oldal Kérlek, ne feledkezz meg az eredeti kiadási dátumról. A hardver és szoftver jelenlegi verziói eltérhetnek az akkor közöltektől, így ellenőrizd a hardvered és szoftvered verzióit, mielőtt megpróbálod emulálni/utánozni a különkiadásokban lévő ismertetőket. Előfordulhat, hogy a szoftver későbbi verziói vannak meg neked, vagy érhetők el a kiadásod tárolóiban. Programozzunk Pythonban 1 9. rész 9. oldal Jó szórakozást! Programozzunk Pythonban 21. rész 1 6. oldal Minden szöveg- és képanyag, amelyet a magazin tartalmaz, a Creative Commons Nevezd meg! Így add tovább! 2.5 Magyarország Licenc alatt kerül kiadásra. Ez annyit jelent, hogy átdolgozhatod, másolhatod, terjesztheted és továbbadhatod a benne található cikkeket a következő feltételekkel: jelezned kell eme szándékodat a szerzőnek (legalább egy név, cím vagy url eléréssel) valamint fel kell tüntetni a magazin nevét (full circle magazin) és az url-t, ami a (úgy terjeszd a cikkeket, hogy ne sugalmazzák azt, hogy te készítetted őket vagy a te munkád van benne). Ha módosítasz, vagy valamit átdolgozol benne, akkor a munkád eredményét ugyanilyen, hasonló vagy ezzel kompatibilis licenc alatt leszel köteles terjeszteni. A Full Circle magazin teljesen független a Canonical-tól, Ubuntu projektek támogatójától. A magazinban megjelenő vélemények és full circle magazin Python 3.az kötet 2 állásfoglalások a Canonical jóváhagyása nélkül jelennek meg.
3 É Hogyanok Programozzunk Pythonban 1 7. rész Írta: Greg Walters pp az utolsó simításokat végeztem sorozatunk utolsó darabján, amikor egy programozóversenyről szóló t kaptam. Sajnos nincs már időnk ezzel foglalkozni, de különböző oldalak egész évben lehetőséget nyújtanak a versenyzésre. Ha érdekel, a versenykiírást a _programming_contest oldalon találhatod meg. Ez azonban felhívta a figyelmemet arra a hiányosságra, hogy nem nagyon foglalkoztunk szerver-kliens programozással. Ezért most elmélyedünk egy kicsit ebben a témában is, és meglátjuk, hogy hova lyukadunk ki. Nos, milyen is egy szerver-kliens alkalmazás? A legegyszerűbben megfogalmazni talán így lehetne: ha egy olyan programot (vagy egy webes interfészt) használunk, ami adatokat kér egy másik alkalmazástól vagy számítógéptől, akkor az szerver-kliens felépítésű. Nézzünk meg egy már ismerős példát. Emlékszünk még a szakácskönyves programra? Az egy NAGYON egyszerű (és nem is túl jó) példája a szerver-kliens felépítésnek. Az SQLite adatbázis gyakorlatilag egy szerver, az alkalmazás, amit mi írtunk pedig egy kliens. A következő viszont ennél egy jobb példa. Az irodánk valamely távoli részében lévő számítógépen van egy adatbázisunk. Ez adatokat tárol az üzletün k készletéről. Ha egy POS terminált használunk (1 0-ből 1 -et), akkor minden kassza egy kliens, és az előbb említett ada tbázis a szerver. kellet kérni, hogy rakjon el két babos, vagy valami hasonló konzervdobozt, melyeket óvatosan megtisztítottunk, majd kivittük őket a garázsba. Apró szögekkel és egy kalapácscsal lyukat ütöttünk az aljukra és szereztünk egy 1 5 láb hosszú spárgát (ismét csak anyutól), ezt követően áthúztuk mindkét a dobozon és hogy ki ne szaladjanak - kötöttünk egy nagy csomót mindkét végére. Ha elkészültünk, akkor elhívtuk legmi nem fogunk most ilyen szintű jobb barátunkat és valamelyikünk az egyik dobozba üvöltött amíg a másik rendszert létrehozni, de az alapoa füléhez tartotta a párját. A vibráció kat elsajátíthatjuk. a kifeszített spárgán keresztül átaz első dolog, amit meg kell ter- ment az egyik konzervből a másikveznünk, az az adatbázis helye. So- ba. Természetesen hallottuk egykaknak csak egy számítógépük van mást a dobozok nélkül is, de az akkor teljesen lényegtelen volt és naotthon. Némelyeknek pedig akár gyon is élveztük. A socket kábé enhét vagy nyolc. nek a megfelelője. A kliens közvetlen kapcsolatban áll a szerverrel Ahhoz, hogy egy szerver-kliens rendszert használni tudjunk, a kliens (gondoljunk a spárgára). Ha sok gépről rá kell csatlakozni a kiszolgá- ügyfél kapcsolódik a szerverre, akló gépre. Ezt socketekkel valósítjuk kor mindegyik kliensnek saját konzervdoboza lenne, melyhez ugyanmeg. Ha gyerekkorunkban csinálennyi kapcsolódik a kiszolgálónál is. tunk konzervdobozokból telefont, akkor az egészről már lehet valami- A lényeg az az, hogy mindegyik klilyen elképzelésünk. Ha mégsem, ak- ensnek közvetlen kapcsolata van a szerverrel. kor hadd írjam le ezt a régmúlt dolgot. Először is, anyukánkat meg 3 Készítsünk egy egyszerű szervert és klienst. Először a kiszolgálóval kezdünk. Pszeudokódban leírva a következőt kell tennünk: Socket létrehozása Szerver nevének lekérése Port kiválasztása Socket csatolása a címhez és porthoz Várakozás kapcsolatra Ha csatlakoztunk... Csatlakozás elfogadása Kapcsolat kiírása Kapcsolat lezárása A szerver konkrét kódját a következő oldal bal alsó részén láthatjuk. Szóval, létre hozzuk a socketet, lekérjük a kiszolgáló hostname-jét, hozzácsatoljuk a socketet a porthoz és bejövő kapcsolatra várakozunk. Amikor kapunk egy kapcsolat kérést, kiíratjuk, hogy csatlakoztunk és elküldjük a Hello and Goodbye üze netet, illetve lezárjuk a kapcsolatot. Most már csak egy kliensre van szükségünk, hogy működjön az egész (jobbra lenn).
4 Programozzunk Pythonban 1 7. rész A kód majdnem olyan mint a szerveré, csak ebben az esetben kiíratjuk a kapott üzenetet, majd lezárjuk a kapcsolatot. A programok kimenete könnyen kitalálható. A szerver oldalán a következőt kapjuk: My hostname is earth I'm now connected to (' ', 45879) és a kliensné: Hello and Goodbye Tehát elég egyértelmű. Most csináljunk valami valósabbat. Hozzunk létre egy olyan szervert, ami csinál is valamit. A szerver 2-es verziójának kódja itt található: #!/usr/bin/env python # client2.py om/az8vnuv7 from socket import * from time import time from time import sleep import sys BUFSIZE = 4096 Nézzük meg egy kicsit közelebbről. Az import utasítások után létrehozunk néhány változót. A BUFSIZ tartalmazza az ügyféltől kapott adatokat tároló puffer méretét. Ezután beállítjuk a figyelni kívánt port számát és egy listát, ami a kiszolgálót és annak portját tartalmazza. class CmdLine: def init (self,host): self.host = host self.port = self.addr = (self.host,self.port) self.sock = None def makeconnection(self): self.sock = socket( AF_INET,SOCK_STREAM) self.sock.connect(self.addr) Létrehozzuk a ServCmd osztályt. Az init rutinban elkészítjük a socketet és hozzácsatoljuk az interfészt ehhez a sockethez. A run metódusban elkezdjük figyelni a bejövő kapcsolatokat és várunk a kliens utasításaira. def sendcmd(self, cmd): self.sock.send(cmd) def getresults(self): data = self.sock.recv(bufsize) print data Az os.popen() rutint akkor használjuk, amikor kapunk valami utasítást az #!/usr/bin/env python ügyféltől. Ez lét#server1.py rehoz egy paimport socket rancsablakot és soc = socket.socket() lefuttatja az utahostname = socket.gethostname() print "My hostname is ", hostname sításokat. if name == ' main ': conn = CmdLine('localhost') conn.makeconnection() conn.sendcmd('ls al') conn.getresults() conn.sendcmd('bye') #!/usr/bin/python # client1.py #==================== import socket port = soc.bind((hostname,port)) soc.listen(5) while True: con,address = soc.accept() print "I'm now connected to ",address con.send("hello and Goodbye") con.close() soc = socket.socket() hostname = socket.gethostname() port = soc.connect((hostname, port)) print soc.recv(1024) soc.close
5 Programozzunk Pythonban rész A kliens (jobbra fenn) sokkal egyszerűbb. Most csak a küldést nézzük meg (a többit már mi magunk is megértjük). A conn.sendcmd() sor (31.) elküld egy egyszerű ls -al kérést. Itt van az erre adott válasz kimenete (a tietek ettől eltérhet): Szerver: python server2.py...listening...connected: (' ', ) Command received - ls -al Command received - BYE...listening -rw-r--r-- 1 greg greg :01 python_client1.py~ -rw-r--r-- 1 greg greg :51 python_server1.py -rw-r--r-- 1 greg greg :57 python_server1.py~ -rw-r--r-- 1 greg greg :29 re-test1.py -rw-r--r-- 1 greg greg :49 server2a.py -rw-r--r-- 1 greg greg :30 server2a.py~ -rw-r--r-- 1 greg greg :02 server2.py -rw-r--r-- 1 greg greg :50 server2.py~ -rw-r--r-- 1 greg greg :30 server2.pyc Egy másik gépről is rácsatlakozhatunk anélkül, hogy Kliens: bármit is módosítanánk - kivéve a kliens kódjában a conn = python client2a.py CmdLine( localhost ) (29) sort. total 72 drwxr-xr-x 2 greg greg Ebben az esetben a localhost -ot kell valamilyen IP címre átírni. Az :49. drwxr-xr-x 5 greg greg otthoni hálózatomban ez a :29.. következőképpen alakult: -rw-r--r-- 1 greg greg :31 client2a.py -rw-r--r-- 1 greg greg :28 client2a.py~ -rw-r--r-- 1 greg greg :25 client2.py -rw-r--r-- 1 greg greg :37 client2.py~ -rw-r--r-- 1 greg greg :30 client2.pyc -rw-r--r-- 1 greg greg :38 ping2.py -rw-r--r-- 1 greg greg :01 python_client1.py conn = CmdLine(' ') Nos, most már képesek vagyunk üzenetek küldözgetésére egyik gépről (vagy terminálról) a másikra. Következő alkalommal tovább bővítjük szerver-kliens alkalmazásunkat. Greg Walters a RainyDay Solutions Kft. tulajdonosa, amely egy tanácsadó cég Aurorában, Coloradóban, Greg pedig óta foglalkozik programozással. Szeret főzni, túrázni, zenét hallgatni, valamint a családjával tölteni a szabadidejét. 5
6 L Hogyanok Írta: Greg Walters egutóbb egy nagyon egyszerű szerver-kliens alkalmazást készítettünk. Ezt fogjuk most egy kicsit kibővíteni. A kiszolgáló egy tic-tactoe (avagy egy 3x3-as amőba) tábla kezelője lesz, az ügyfél pedig csak I/O-val fog foglalkozni. Kezdésnek vegyük elő a múltkori szerver kódját. Ezt fogjuk a cikk folyamán módosítgatni. Ha nem lenne meg a kód, akkor a fullcirclemagazine.pastebin.com /UhquVK4N oldalról töltsétek le az e havi kódot és kövessétek a módosításokat ezen. Az első változás az init rutinban lesz, ahol két új változót fogunk inicializálni: a self.playert és a self.gameboardot. A gameboard (tábla) egy egyszerű listák listája, avagy egy hagyományos tömb. Az elemeket a következőképpen tudjuk elérni (így látványosabb mint egy egyszeri lista). Ez a lista fogja az adatainkat tartalmazni. Minden cellában három fajta bejegyzés lehetséges: a - azt jelenti, hogy a cella üres, az X azt, hogy az első játékos foglalta el, a O pedig azt, hogy a második játékosé. A táblázat a következő kép- Programozzunk Pythonban 1 8. rész pen néz ki két dimenzióban: [0][0] [0][1] [0][2] [1][0] [1][1] [1][2] [2][0] [2][1] [2][2] Szóval a szerver init rutinját a következő sorokkal kell kiegészíteni: # The next three lines are new... self.player = 1 self.gameboard = [['',' ',''],['','',''],['',' ','']] vernek inicializálnia kell a játékteret - -ra, majd el kell küldenie egy kiíratást a kliensnek. A Move egy összetett utasítás, ami tartalmazza magát a parancsot és a játékos által kiszemelt pozíciót. Például: Move A3. Az utasítást úgy kell feldarabolnunk, hogy három részt kapjunk: a move szót, illetve a sor és az oszlop azonosítóit. Végül a GOODBYE egyszerűen előkészíti a táblát egy újabb menetre. Nos, megkaptuk az ügyfél utasítását a proccmd-ben. Ezután meg self.run() kell néznünk, hogy mit is kellene A run, a listen és a servcmd ru- csinálni. A proccmd metódusban tinban nem lesz változás, ehelyett a keressük meg az ötödik sort és az if self.processingloop után törölproccmd metódusra fogunk konjük ki az összes kódot. Itt van a centrálni. Start utasításhoz tartozó rész: Az előző alkalommal a szerver egy parancsra várakozott a kliens- ififself.processingloop: cmd == 'Start': től, majd azt átadta az os.popen ruself.initgameboard() tinnak. Most azonban elemezni self.printgameboard(1) fogjuk a kapott parancsot. Ebben az esetben három utasítás lehetsékövetkezőnek nézzük meg a ges. Ezek a Start, a Move' és a Move-hoz tartozó kódot (jobbra GOODBYE. Amikor a Start -ot látható). Először az első négy kakapjuk, az azt jelenti, hogy a szerrakterét ellenőrizzük le az átadott 6 utasításnak. Ha ez a Move -al egyezik meg, akkor kivesszük a maradék részt az 5-ös pozíciótól kezdődően (mivel 0-tól számoljuk az indexeket), és egy position nevű változóhoz rendeljük hozzá őket. Ezután leellenőrizzük, hogy az első karakter A, B, vagy C -e. Ezek a klienstől kapott sorokat reprezentálják. A következő karakter amit kiszedünk, az az oszlopokat azonosító egész lesz: if cmd[:4] == 'Move': print "MOVE COMMAND" position = cmd[5:] if position[0] == 'A': row = 0 elif position[0] == 'B': row = 1 elif position[0] == 'C': row = 2 else: self.cli.send('invalid position') return col = int(position[1])1
7 Programozzunk Pythonban 1 8. rész Ezt követően gyorsan leellenőrizzük, hogy a sor benne van-e a megengedett tartományban: if row < 0 or row > 2: self.cli.send('invalid po sition') return Ezzel be is fejeztük a proccmd-t. Következőnek a játékteret inicializáló rutint kell elkészítenünk. Mindössze annyi dolga lesz, hogy mindenhova elhelyezi a - jelet, amit a move logikája fog a cella ürességének vizsgálatára felhasználni: def InitGameBoard(self): Végül megnézzük, hogy a pozíció üres-e ( - ), majd ha az self.gameboard = [['',' első játékossal van dolgunk, ak- ',''],['','',''],['',' kor beírjuk ide az X -et, külön- ','']] ben pedig az O -t. Ezután A PrintGameBoard rutin meghívjuk a PrintGameBoard (lenn) kiíratja a táblát, majd rutint a 0 paraméterrel: meghívja a checkwin rutint és beállítja a játékost. Egy nagy if self.gameboard[row][col] == '': sztringet hozunk létre, melyet if self.player == 1: elküldünk a kliensnek, így annak minden lépés alkalmával self.gamebo csak egyszer kell hallgatóznia. ard[row][col] = "X" A firsttime paraméter a tábla else: kiíratása miatt lesz elküldve, self.gamebo amikor a kliens először kapcsoard[row][col] = "O" lódik vagy reseteli a játékot: self.printgameboard(0) Ezután leellenőrizzük, hogy a firsttime paraméter 0-ra vagy 1-re van-e állítva (lenn). Akkor fogjuk csak megnézni, hogy az adott játékos nyert-e, ha a firsttime 0 értékű. Ebben az esetben a Player X WINS! üzenetet íratjuk ki. Ha az aktuális játékos nem nyert, akkor az Enter move... fog a képernyőre kerülni. Végül elküldjük a kliensnek a karakterláncot a cli.send rutinnal. A következő oldalon látható, hogy a szerver lefuttatja a win rutint. Itt már beállítottuk a játékost X -re, vagy O -ra, szóval egy egyszerű ciklust kell már csak használnunk. A C ciklusváltozó a listánk egyes sorait reprezentálja. Először le kell ellenőrizzük az összes sort egy vízszintes nyerésre. if firsttime == 0: if self.player == 1: ret = self.checkwin("x") else: ret = self.checkwin("o") if ret == True: if self.player == 1: outp += "Player 1 WINS!" else: outp += "Player 2 WINS!" else: if self.player == 1: self.player = 2 else: self.player = 1 outp += ('Enter move for player %s' % self.player) self.cli.send(outp) def PrintGameBoard(self,firsttime): #Print the header row outp = (' 1 2 3') + chr(13) + chr(10) outp += (" A {0} {1} {2}".format(self.gameboard[0][0],self.gameboard[0][1],self.gameboard[0][2])) + chr(13)+chr(10) outp += (' ')+ chr(13)+chr(10) outp += (" B {0} {1} {2}".format(self.gameboard[1][0],self.gameboard[1][1],self.gameboard[1][2]))+ chr(13)+chr(10) outp += (' ')+ chr(13)+chr(10) outp += (" C {0} {1} {2}".format(self.gameboard[2][0],self.gameboard[2][1],self.gameboard[2][2]))+ chr(13)+chr(10) outp += (' ')+ chr(13)+chr(10) 7
8 Programozzunk Pythonban 1 8. rész Előszőr ellenőrzünk minden SOR-t a vízszintes nyerésért: def checkwin(self,player): #loop through rows and columns for c in range(0,3): #check for horizontal line if self.gameboard[c][0] == player and self.gameboard[c][1] == player and self.gameboard[c][2] == player: print "*********\n\n%s wins\n\n*********" % player playerwin = True return playerwin Utána minden OSZLOP-ot: #check for vertical line elif self.gameboard[0][c] == player and self.gameboard[1][c] == player and self.gameboard[2][c] == player: print "** %s wins **" % player playerwin = True return playerwin Most az ÁTLÓS nyeréseket ellenőrizzuk balról jobbra... #check for diagonal win (left to right) elif self.gameboard[0][0] == player and self.gameboard[1][1] == player and self.gameboard[2][2] == player: print "** %s wins **" % player playerwin = True return playerwin Aztán jobbról balra... #check for diagonal win (right to left) elif self.gameboard[0][2] == player and self.gameboard[1][1] == player and self.gameboard[2][0] == player: print "** %s wins **" % player playerwin = True return playerwin Végül, ha nem volt nyerés akkor "HAMIS" értékkel térunk vissza: else: playerwin = False return playerwin A kliens Ismét a múltkori rutinnal kezdünk. A változások közvetlenül a conn.makeconnection után kezdődnek. Elküldjük a Startot, majd a különböző Move-okat és végül a Goodbye utasítást. Innen a legfontosabb dolog, hogy csak egy utasítást kell elküldenünk. Gondoljunk úgy erre, mint egy udvarias társalgásra. Mond ki az állításod, majd várj egy válaszra, és így tovább. Ebben az egyszerű példában ahhoz, hogy jobban megértsük a lényeget, a raw_inputot csak elvétve fogjuk használni: if name == ' main ': conn = CmdLine('local host') conn.makeconnection() conn.sendcmd('start') conn.getresults() conn.sendcmd('move A3') conn.getresults() r = raw_input("press Enter") conn.sendcmd('move B2') conn.getresults() r = raw_input("press Enter") Folytassuk az egészet a sendcmd, getresults, raw_input sorozat alábbi paramétereivel (az A3-hoz és B2-höz 8 már megvan a kód): C1, A1, C3, B3, C2 és végül küldjük el a GOODBYE utasítást. Házi feladat A kliens alkalmazásból vegyük ki a move utasításokat és helyette használjuk a raw_input()-ot a játékos lépéseinek A3 vagy B2 formátumban bekéréséhez, majd mielőtt elküldenénk a szervernek kapcsoljuk őket a Move utasításhoz. Következő alkalommal úgy módosítjuk a szervert, hogy az a másik játékos helyett játsszon. A szerver-kliens teljes kódja a vagy a oldalon található meg. Greg Walters a RainyDay Solutions Kft. tulajdonosa, amely egy tanács-adó cég a coloradói Aurórában. Greg 1972 óta foglalkozik programozás-sal. Szeret főzni, túrázni, zenét hallgatni, valamint a szabadidejét család-jával tölteni.
9 E H o g ya n o k Írta: Greg Walters z alkalommal a Tic-TacToe programunk befejezésén fogunk dolgozni. A legtöbb cikkemmel ellentétben most nem fogom odaadni a kódot. Nektek kell azt elkészíteni, ahogy én azt előre megszabom. 18 hónap után már kezetekben vannak az eszközeitek és a tudásotok egy ilyen projekt befejezéséhez. Először nézzük meg a TicTac-Toe játékmenetét. Ezt pszeudó kódban tesszük meg. Előtte viszont vessünk még egy pillantást a játéktérre. Valahogy így néz ki: Sarok Oldal Sarok ++ Oldal Közép Oldal ++ Sarok Oldal Sarok Mindig az X játékos kezd. A legjobb, amit tehet az, hogy egy sarkot foglal el, hogy melyiket, nem számít, bármelyik sarok megteszi. Az X játékos lépéseinek permutációival fogunk először foglalkozni. (jobbra).az O játékos álláspontja jobbra lenn látható. P ro g ra m o z z u n k P yt h o n b a n 1 9. ré s z IF O takes a CORNER square THEN # Scenario 1 X should take one of the remaining corner squares. Doesn't matter which. IF O blocks the win THEN X takes remaining corner square. Finish for win. ELSE Finish for win. ELIF O takes a SIDE square THEN # Scenario 2 X takes CENTER square IF O blocks win THEN X takes corner square that is not bordered by any O Finish for win. ELSE Finish for win. ELSE # O has played in the CENTER square Scenario 3 X takes corner square diagonally to original move IF O plays on corner square X plays remaining open corner square IF X plays to noncenter square Finish for win. THEN ELSE O takes Center Square # Game will be a draw Scenario 4 IF X has corner square AND Block O win. side square THEN Block any other possible wins #Scenario 5 Draw Game. O takes corner diagonally from corner X Block possible wins to a Néhány lehetséges lejátszás tudnotok kellene, hogy draw. ELSE miként módosíthatjátalálható a következő oldalon. tok a múlt havi kódot, Scenario#6 X has two Edge squares Feltűnhet, hogy a logika egy vagy hogyan írhattok O moves to corner egy teljesen új asztali bordered by both X s kissé bonyolult, de könnyen IF X blocks win THEN tic-tac-toe-t. lebontható IF utasításokra O takes any square. (figyeljétek meg, hogy Then -t Block and force draw használtam, de Pythonba ELSE Finish for win. ehelyett : van). Most már 9
10 Programozzunk Pythonban 19. rész Scenario X 1 X O X X O X O X O X X O X O X X O O X O X X X O O X O Scenario X 2 X O X O X X O X O X X O X O X X O X O O X X X O X X O Scenario X 3 X O X O X X X O O X X O X O O X X O X O O X X O X O X O X Scenario X 4 X O X O O X X X O O X X X O O O X X X X O O O X X O X X O O O X Scenario X 5 X O X O X X O X O X X O X O X X O X O O X X X O X O O Scenario X 6 X O X O X X O O X X X O O X O X X O O X O X X O O X 0 Greg Walters a RainyDay Solutions Kft. tulajdonosa, amely egy tanácsadó cég a coloradói Aurórában. Greg 1972 óta foglalkozik programozással. Szeret főzni, túrázni, zenét hallgatni, valamint a szabadidejét családjával tölteni. 10
11 Ü Hogyanok Írta: Greg Walters dvözöllek! Ez alkalommal újra a GUI-programozással fogunk foglalkozni, de most a pygtk könyvtárat fogjuk használni. Egyelőre nem használunk GUItervezőt, egyszerűen csak a könyvtárral dolgozunk. Programozzunk Pythonban 20. rész osztályt (13. sor). Mentsük el a kódot simple1.py néven. # simple.py import pygtk pygtk.require('2.0') import gtk Futtassuk terminálban. Egy egyszerű ablak fog feltűnni vaclass Simple: lahol az asztalunkon. Az enyédef init (self): self.window = gtk.window(gtk.window_toplevel) men a bal felső sarokban jeleself.window.show() nik meg. A program befejezésédef main(self): hez a terminálban le kell ütgtk.main() A Synaptic segítségével tele- nünk a Ctrl-C-t. Hogy miért? if name == " main ": simple = Simple() Mert még nem írtunk hozzá pítsük fel a python-gtk2, pysimple.main() olyan kódot, ami eltüntetné és thon-gtk2-tutorial és leállítaná az alkalmazást. Ez python-gtk2-doc csomagokat. Most, ha a címsorban az X-re sarokban ahol akár valami el lesz a következő dolog, amit megcsinálunk. Írjuk be az aláb- kattintunk, az alkalmazás ki fog is takarhatja. Módosítsuk a kóvágjunk is a közepébe, és De mi is történik itt való- dot úgy, hogy középre helyezze hozzuk létre első pygtk-t hasz- bi sort a self.window.show() elé: lépni. jában? Az első sor, amit elheaz ablakot. Csak annyit kell náló programunkat, ami jobbra lyeztünk (self.window. tennünk, hogy beírjuk az iself.window.connect("dele fenn látható. te_event", self.delete_event) connect...) hozzáköti a delete nit metódusban a self.wineseményt egy callback rutindow.connect elé a következő Egy darabig erre az egyszerű Ezt követően a gtk.main() hí- hoz, ebben az esetben self.de- sort: kódkészletre fogunk építkezni. vás után rakjuk be a következő lete_event-hez. Azzal, hogy A harmadik sorban van is egy False -t adunk vissza a rendself.window.set_positi rutint: új utasítás. A pygtk.requion(gtk.win_pos_center) szernek, a tényleges ablak re( 2.0 ) azt jelenti, hogy a rendszermemóriából való törlédef delete_event(self, programunk nem fog a pygtk se is megtörténik. widget, event, data=none): Ahogy sejthetjük is, ez az modul legalább 2.0-s verziója gtk.main_quit() ablak pozícióját a képernyő könélkül futni. Az init rutinban return False zepére állítja. Mentsük el Nos, nem tudom, ti hogy egy ablakot rendelünk a simple3.py néven, és futtasvagytok vele, de én szeretem, self.window változóhoz (8. sor), Újra mentsük el a prograha az alkalmazások a képernyő suk. majd kirajzoljuk azt (9. sor). munkat simple2.py néven, és közepén nyílnak meg, nem peemlékeztetőül: az init rutin ismét futtassuk terminálban. dig egy véletlen helyen, vagy a lefut, amint példányosítjuk az 11
12 Programozzunk Pythonban 20. rész rutin, amelyik az esemény haígy már sokkal szebb, de nem tására elindul ebben az esetsokra megyünk vele. Próbáljunk ben ez a self.btn1clicked és meg egy widgetet hozzáadni. Ha a harmadik egy, az imént megmég emlékeztek a réges-régi Boa Constructor-beli munkánkra, akkor határozott rutinnak átadott, arfelidézhetitek, hogy a widget egy- gumentum (ha van). szerűen csak egy előre elkészített ablakba helyezhető vezérlőelem, amivel ott valamit csinálhatunk. A legegyszerűbb ezek közül a gomb. Következőnek létre kell hoznunk a self.btn1clicked rutint. Helyezzük el az alábbiakat a self.delete_event rutin után: retezni, de a gomb vele együtt új sorokat. A HBox és az első gomb kódja: átalakul. Hogy miért van ez? Nos, mivel csak egyszerűen rádobtuk a gombot az ablakra, self.box1 = gtk.hbox(false,0) self.window.add(self.box1) ezért az ablak átméreteződik, hogy pontosan elférjen benne a self.button = gtk.but ton("button 1") vezérlőelem. self.button.connect("clic Kissé megszegtük a GUIprogramozás szabályait azzal, hogy közvetlenül anélkül, Írjuk be az alábbi kódrészlehogy bármilyen containert tet az előző kódunkba, közvete- def btn1clic használtunk volna az űrlapra nül az init rutinban találha- ked(self,widget,data=none): helyeztük a gombot. Emlékezprint "Button 1 clicked" tó self.window.connect sor tek még arra, hogy az első Boa gtk.main_quit() után: Constructoros GUI-s cikkekben egy sizer dobozt (containert) self.button = gtk.but Ahogy láthatjuk, a rutin nem használtunk a vezérlőelemek ton("close Me") sok mindent csinál. Egyszerűen tárolására? Most is ezt kellene self.button.connect("clic kiíratja a terminálra, hogy But- tennünk (még abban az esetked",self.btn1clicked,none) self.window.add(self.button) ton 1 clicked, majd meghívja a ben is, ha csak egy elemünk self.button.show() gtk.main_quit()-et. Ezzel bezár- van). A következő példában egy ja az ablakot, és leállítja a prog- HBoxot (horizontal box, vízszinram működését mintha csak Az első sor létrehozza a tes doboz) helyezünk el gomgombot és a felületén lévő szö- az X-re kattintottunk volna a bunk tárolására, és egy újabb címsorban. Mentsük el simpveget. A következő sor hozzágombot is elhelyezünk abban. le4.py néven, és futtassuk ter- Ha függőleges containerre lenkapcsolja azt a kattintás eseményhez. A harmadik elhelyezi minálban. Láthatjuk, ahogy az ne szükségünk, VBoxot hasza gombot az ablakban, az utol- ablakunk középen megjelenik a nálnánk. só pedig megjeleníti. A self.but- Close me gombbal. Kattintsunk rá, és az alkalmazás a terv ton.connectet megvizsgálva Kezdetnek vegyük a simpszerint bezáródik. Figyeljük megfigyelhetjük, hogy annak le4.py -t alapul. Töröljünk minhárom paramétere van. Az első meg, hogy az ablak sokkal kident a self.wndow.connect(...) az esemény, amelyhez kapcso- sebb lett, mint a simple3.py és a self.window.show() sorok esetében. Ugyan át tudjuk mé- között! Ide fogjuk elhelyezni az lódni akarunk, a második az a 12 ked",self.btn1clicked,none) self.box1.pack_s tart(self.button,true,true,0) self.button.show() Lépésekre bontva ez a kód a következőt csinálja: először elhelyezünk egy self.box1 nevű HBoxot. A HBoxnak átadott paraméterek: homogeneous (True vagy False) és spacing: HBox = gtk.hbox(homogene ous=false, spacing=0) A homogeneous nevű paraméter azt szabályozza, hogy a dobozban lévő widgetek ugyanakkorák legyenek-e (a HBox esetében ez a szélességre vonatkozik, a VBox-nál pedig a magasságra). A mi esetünkben ennek false értéket adunk, illetve a spacingnek 0-t. Ezután hozzáadjuk a dobozt az ablakhoz. Létrehozzuk a gombot ugyanúgy, ahogyan az előbb, és hozzákapcsoljuk annak
13 Programozzunk Pythonban 20. rész kattintás eseményét az általunk vá tesszük a gombot. A következő kódrészlet a második írt rutinhoz. gombé: Ezen a ponton egy új paself.button2 = gtk.but ton("button 2") ranccsal találkozunk. A self.box1.pack_start utasítással self.button2.connect("clic ked",self.btn2clicked,none) adjuk a containerhez (HBox) a self.box1.pack_s gombot. Ezt a parancsot a tart(self.but ton2,true,true,0) self.window.add helyett haszself.button2.show() náljuk a containerben való elself.box1.show() helyezéshez. A parancs (mint fentebb is): Vegyük észre, hogy ez a kód lényegében ugyanaz, mint az box.pack_start(widget,ex első widget esetében. Az új pand=true, fill=true, pad ding=0) kódrészlet utolsó sora jeleníti meg a dobozt. A pack_start utasítás paraméterei a következők: az első Ezután meg kell írnunk a maga a widget, ezután jön az self.btn2clicked rutint. A expand (True vagy False), majd self.btn1clicked rutin után hea fill (True vagy False), és végül lyezzük el az alábbiakat: a padding érték. A containerek def btn2clic esetén a spacing a widgetek között kimaradó helyet jelenti, ked(self,widget,data=none): print "Button 2 clicked" a padding pedig a widget jobb/bal szélére vonatkozik. Az és kommenteljük ki a expand argumentummal kivábtn1clicked rutinban a követkelaszthatjuk, hogy a widgetek zőt: feltöltsék-e a maradék helyet (True), vagy a doboz összegtk.main_quit() megy pont akkorára, hogy elférjenek benne (False). A fillnek csak akkor van hatása, ha az Azt szeretnénk elérni, hogy expand True. Legvégül látható- mindkét gomb kiírja a Button X Clicked szöveget az ablak bezárása nélkül. False-ra. Indítsuk el a programot: ugyan a gombok mérete nem változott, de átméretezéskor üres hely található a gommentsük el simple4a.py bok két oldalán. Ne feledd, a fill néven. Futtassuk terminálban. Azt tapasztaljuk, hogy a közép- nem csinál semmit, ha az exre helyezett ablakban két gomb pand False-ra van állítva. van (pont az ablak széléig érnek): az egyik Button 1 címa widgetek csoportosításákével, a másik Button 2 -vel nak egy másik módja a table rendelkezik. Kattintsunk rájuk, használata. Sokszor, ha minés figyeljük meg, hogy megfe- dent könnyen el tudunk helyezlelően válaszolnak a kattintás ni egy rácsszerű alakzatban, a eseményre. Mielőtt bezárnánk table a legmegfelelőbb (és legaz ablakot, méretezzük azt át egyszerűbb) választás. Egy (vonszoljuk az ablak jobb alsó table-re gondolhatunk úgy, sarkát), és vegyük észre, hogy mint egy táblázat soraira és a gombok az átméretezéssel oszlopaira, melyekben widgeegyütt növekednek és mennek tek vannak. Mindegyik widget össze. Ahhoz, hogy megértsük egy vagy több cellát foglal el az expand paraméter működé- (ahogy a program megkívánja). sét, a self.box1.pack_start extalán a következő ábra segít pand értékét állítsuk át True-ról ennek elképzelésében. Itt van False-ra mindkét sorban. Futegy 2 2-es rács: tassuk újra a programot, és figyeljük meg, hogy mi történik Ez alkalommal kezdetben az ablak ugyanúgy néz ki, mint 1+++ eddig, de amikor átméretezzük, a gombok megtartják szélessé güket, és az ablakméret növekedésével üres terület marad a Az első sorba két gombot fojobb oldalon. Következőnek vál- gunk elhelyezni. Egyet az 1-es toztassuk vissza az expandraoszlopba, egyet pedig a 2-esbe. métert True-ra és állítsuk a fillt A második sorba egy mindkét 13
14 Programozzunk Pythonban 20. rész oszlopot elfoglaló gombot ratable.attach(widget,left int,right point,top po kunk. Így: Button 1 Button Button A táblázat elkészítéséhez létre kell hoznunk a table objektumot, és hozzá kell adnunk az ablakhoz. A table létrehozásához írjuk be ezt: Table = gtk.table(rows=1,co lumns=1,homogeneous=true) Ha a homogeneous paraméter True, akkor a table dobozai átméreteződnek a táblázatban lévő legnagyobb widget méretére. Ha viszont False, akkor az egyes dobozok méretét az adott sor legmagasabb widgetje, illetve az oszlop legszélesebb widgetje adja. Ezután létrehozzuk a widgetet (ahogyan a gombokat előzőleg), majd hozzákapcsoljuk azt a táblázat megfelelő sorához és oszlopához. Ez a következőképpen történik: po int,bottom point,xoptions=ex PAND FILL,yoptions=EX PAND FILL, xpadding=0,ypadding=0) Itt csak az első öt paraméter kötelező. Tehát ahhoz, hogy egy gombot a nullás számú sor nullás oszlopába helyezzünk el, a következő parancsot kell használnunk: class Table: def init (self): self.window = gtk.win dow(gtk.window_toplevel) self.window.set_posi tion(gtk.win_pos_center) self.window.set_tit le("table Test 1") self.window.set_bor der_width(20) self.window.set_size_ request(250, 100) self.window.con nect("delete_event", self.de lete_event) Van egy-két új dolog, amit table.attach(buttonx,0,1,0,1) meg kell tárgyalnunk, mielőtt továbblépnénk. A 9. sor az abha viszont a nullás sor egyes lak címét Table Test 1 -re állítja. A set_border_width hívás számú oszlopába raknánk (ne arra való, hogy az egész ablak feledd, hogy a számozás itt 0tól kezdődik), mint fentebb a 2- köré 20 pixeles szegélyt adjunk, mielőtt widgeteket helyeznénk es gombot, a hívás így nézne el azon. Végül pixeles ki: méretet kényszerítünk az ablakra a set_size_request függtable.attach(buttonx,1,2,0,1) vénnyel. Eddig tiszta? Most hozzuk létre a táblázatot, és Remélem, ez eddig világos, mint a vakablak! Mindenesetre helyezzük el az ablakban: kezdjük el a kódot, és menet közben talán jobban megértjük. table = gtk.table(2, 2, True) # 2x2es rács létrehozása Először a szokásos rész jön: self.window.add(table) # table1.py import pygtk pygtk.require('2.0') import gtk lyezzük egy cellában, és láthatóvá tesszük: button1 = gtk.button("button 1") button1.connect("clic ked",self.callback,"button 1") table.attach(button1,0,1,0,1) button1.show() És most a kettes számú gomb: button2 = gtk.button("button 2") button2.connect("clic ked",self.callback,"button 2") table.attach(button2,1,2,0,1) button2.show() Lényegében ugyanaz, mint az első gomb esetében, a table.attach hívásban lévő különbséget leszámítva. Továbbá figyeljük meg, hogy az eseménykezelő rutint self.callback -nek hívják, és mindegyik gombra megegyezik. Ez idáig rendben is van. Mindjárt megértitek, hogy mit is csinálunk. Vegyük a 3. gombot! Ez lesz a Quit gombunk: Most pedig elkészítjük az első gombunkat, beállítjuk az eseménykezelőt, majd elhe- 14
15 Programozzunk Pythonban 20. rész button3 = gtk.button("quit") nek. Az 1-es gomb esetében a button3.connect("clic küldött adat a button 1, a 2ked",self.ExitApp,"button 3") table.attach(button3,0,2,1,2) esnél pedig button 2. Mindössze annyit csinálunk, hogy kibutton3.show() írjuk a terminálra a button x Végül megjelenítjük a táblá- was pressed szöveget. Biztoszatot, illetve az ablakot. Továb- ra veszem, hogy már megfogalbá itt van a már használt main mazódott bennetek az, hogy egy olyan eszközre bukkantunk, és delete rutin: mely nagyon hasznos lehet egy jól felépített IF ELIF ELSE vetable.show() zérlési szerkezettel egybekapself.window.show() csolva. def main(self): gtk.main() def delete_event(self, widget, event, data=none): gtk.main_quit() return False Befejezésül definiálnunk kell az ExitApp eljárást a Quit gombhoz: Most jöhet az érdekesebb rész! Az 1-es és 2-es gombra a self.callback eseménykezelőt állítottuk be, aminek itt van a kódja: def ExitApp(self, widget, event, data=none): print "Quit button was pressed" gtk.main_quit() def callback(self,widget,da ta=none): print "%s was pressed" % data if name == " main ": table.main() Amikor a felhasználó a gombra kattint, a kattintás esemény bekövetkezik, és az eseménykezelő beállításakor megadott adatok elküldésre kerül- És a végső main kódja: szíteni, ezek a lépései: Hozzuk létre az ablakot. A widgetek tárolására készítsünk HBox, VBox vagy Table objektumokat. Helyezzük el a widgeteket pack vagy attach hívásokkal (attól függően, hogy dobozról vagy táblázatról van szó). Tegyük láthatóvá a widgeteket (show hívás). Tegyük láthatóvá a dobozt vagy a táblázatot. Tegyük láthatóvá az ablakot. Most már a továbbhaladáshoz szükséges eszközök és tudás nagy részére szert tettünk. A kódok fenn vannak a Pastebinen: Remélem, találkozunk a következő hónapban is! Egyesítsük az egész kódot egy table1.py nevű alkalmazásba, és futtassuk terminálban. Emlékeztetőül, ha pygtk-val szeretnénk GUI programot ké Greg Walters a RainyDay Solutions LLC tulajdonosa, amely egy tanácsadó cég a coloradói Aurorában óta foglalkozik programozással. Szeret főzni, túrázni, zenét hallgatni, valamint a szabadidejét családjával tölteni. 15
16 H Hogyanok Írta: Greg Walters Programozzunk Pythonban 21. rész a már egy ideje követed a cikkeimet, akkor emlékezhetsz az 5. és 6. részben a Boa Constructoros GUI-s alkalmazásra. Nos, ez alkalommal a Glade Designerrel fogunk foglalkozni, ami egy teljesen más program, de hasonlóan épül fel. Az Ubuntu Szoftverközpontból tudod telepíteni: keress rá a glade-re és telepítsd fel a GTK+ 2 User Interface Buildert. Csak hogy tudj róla, ennek az alkalmazásnak a ismertetéséhez több részt is fel fogunk használni. A végső célunk egy MP3 és hasonló médiafájlokat kezelő playlist készítő program létrehozása. A tutorial ezen része a felület tervezésére fog koncentrálni. Következő alkalommal pedig az egészet összetartó kódról fogunk beszélni. kattintsunk a close-ra. Ezzel eljutottunk a designer ablakba. Nézzük meg a fő ablakot (jobbra). A bal oldalon vannak az eszközeink, középen a tervező terület és a jobb oldalon a tulajdonságok és a hierarchia ablak. Az eszközöknél keressük meg a Toplevels nevezetű Kezdjük is el a tervezést. Amikor először elindítod a Gla- részt, és kattintsunk az első elemére (ha az egeret felette de designert, egy beállítások ablakkal fogsz találkozni (fenn). hagyjuk, akkor Window -t ír Itt válasszuk ki a Libglade-et, és ki). Ezzel létre tudjuk hozni az üres ablak felületét, melyen az inside toplevels -t, majd majd dolgozni fogunk. Centerre. Kattintsunk a jelölőnégyzetre a Default Width-nél Figyeljük meg, hogy a hierar- és írjunk be 650-et. Ugyanezt chia Widgets részén található ismételjük meg a Default egy window1. Menjünk le a tu- Heighttel is, csak most 350-nel. lajdonságok részhez és állítsuk Következőnek kattintsunk a át a name-et window1-ről Main- Common fülre és görgessünk le Windowra, illetve a Window Til- a Visible bejegyzésig. BIZOte-t Playlist Maker v1.0 -ra. NYOSODJUNK MEG AFELŐL, Mentsük el munkánkat PlayHOGY EZ YES -RE VAN ÁLLÍTVA listmaker.glade néven. Mielőtt különben az ablakunk nem jetovábblépnénk, a tulajdonságok lenne meg. Végül válasszuk ki a General fülén keressük meg a Signals fület és a GtkObject-nél Window Positiont, és állítsuk kattintsunk a jobbra mutató 16
17 Programozzunk Pythonban nyílra. A destroynál a handler oszlop lenyíló listáján válasszuk ki az on_mainwindow_destroy -t. Ezzel létrehoztunk egy olyan eseményt, ami az X -re való kattintással bezárja az ablakot. Figyelmeztetlek: miután beállítottuk a destroy eseményt, kattintsunk valahova kívülre, hogy elmentődjenek a beállítások. Erre egy bug miatt van szükség. Mentsünk ismét. 21. rész Most már elhelyezhetjük a widgetjeinket. Először csináljunk egy toolbart. Ez a negyedik ikon lesz a containerek második sorában. Kattintsunk a vbox legfelső sorára. Ez a rész szinte teljesen el fog tűnni. Ne aggódjunk, néhány perc múlva visszahozzuk. A következő helyre a treelist tárolásához egy Scrolled Window-t kell elhelyeznünk. Segítségével görgetni tudunk a Mint előzőleg, most is vbotreelistben. Tehát, keressük xokba és hboxokba kell raknunk meg a Scrolled Window ikont a widgetjeinket. Ez talán a GUI Containers részben (balról a programozás legkönnyebben második ikon az ötödik sorban), elfelejthető szabálya. A fő abés kattintsunk a vbox második lakban egy függőleges boxot fogunk elhelyezni. Ehhez válasszuk ki a Container-beli eszközök közül a Vertical Box-ot (második ikon balról az első sorban), majd kattintsunk a tervezőbe lévő ablakunkba. Az így felugró ablakban megadhatjuk, hogy az hány elemű legyen. Az alapértelmezett a három, de nekünk most ötre lesz szükségünk. Az elrendezés fentről-lefelé a következő: eszköztár, egy treelist vezérlő, két vízszintes terület a címeknek, gomboknak és text boxoknak, illetve egy állapotsor. helyére. Ezután a következő két rublikába egy-egy Horizontal boxot fogunk elhelyezni. Mindkettőnek három-három része legyen. Végül adjuk az alsó sorhoz a Status Bart. Ezt a Control and Display rész végén találjuk. Ezen a ponton a tervező nézet a lent láthatóhoz hasonlóan kell, hogy kinézzen. tintsunk az OK gombra. Ezt később fogjuk beállítani. Most koncentráljunk egy kicsit a Scroll Windowra, válaszszuk is ki a hierarchia ablakban. Görgessünk le egészen a General fül Horizontal Scrollbar Policy részéhez és állítsuk át Always -re, majd csináljuk meg ugyanezt a Vertical ScrollVégül, de nem utolsó sorban, bar Policy-re is. Mentsünk. helyezzük el a Control and Displayből a Tree View widgetet a Eddig minden rendben, most scrolled windowba. Egy felugró nézzük meg az eszköztárunkat. ablakban meg kell adnunk, Ez a terület az alkalmazásunk hogy melyik TreeView modellt felső részén, közvetlenül a címakarjuk használni. Egyelőre kat- sor alatt lesz, és olyan gombokat fog tartalmazni, amelyek a munka fontosabb részeit fogják megoldani. Tizenegy gombra lesz szükségünk, melyek balról jobbra a következők: Add, Delete, Clear List, egy Separator, Move To Top, Move Up, Move Down, Move To Bottom, még egy Separator, About és Exit. 17
18 Programozzunk Pythonban A hierarchiában kattintsunk a toolbar1 -re, ezzel kijelölve azt. A Glade Designer felső részén van egy ceruza-szerű dolog. Kattintsunk rá. Így tudjuk előhozni az eszköztár-szerkesztőt. Kattintsunk a Hierarchy fülre. Valami ilyesmivel találjuk szembe magunkat (előző oldal jobb alsó sarka). Most az összes eszköztári gomb elhelyezése következik. Ennek lépései: Kattintsunk az Add gombra. Változtassuk meg a gomb nevét. Változtassuk meg a gomb címkéjét. Válasszuk ki a képet. Ezt mind a tizenegy widgetre meg fogjuk ismételni. Tehát, kattintsunk a name-re és írjuk be a tbtnadd szöveget. Görgessünk le az Edit Labelig és írjuk be, hogy Add, majd még egy kicsit lentebb, az Edit Image alatti Stock ID szövegdoboz lenyíló listájában válasszuk ki az Add -ot (hogy később a kódban hivatkozhassunk rá). A tbtn a Toolbar Button rövidítése. Ezzel az elnevezési konvencióval könnyű lesz a kódban megtalálni, nem beszélve arról, hogy öndokumentáló is lesz. 21. rész Most már csak az eszköztár többi widgetjét kell elhelyeznünk. Hozzunk létre még egy gombot a Delete-nek. Ez (mint ahogy már sejthetitek) tbtndelete nevű lesz. Ismét állítsuk be a címkét és az ikont. Következőnek készítsük el a tbtnclearall nevű gombot és használjuk hozzá a Clear ikont. Ezen a ponton egy Separatorra van szükségünk. Kattintsunk az Addra és a name-hez írjuk be a Sep1 szöveget, majd a lenyíló listában válasszuk ki a Separatort. Helyezzük el a maradék widgetet tbtnmovetotop, tbtnmoveup, tbtnmovedown, tbtnmovetobottom, Sep2, tbtnabout és tbtnquit néven. Biztos vagyok benne, hogy meg tudjátok találni a hozzájuk tartozó ikonokat. Amint elkészültünk, lépjünk ki a hierarchia ablakból és mentsük el munkánkat. A jobbra látható képhez hasonló dolgot kellene kapnunk. widgetet. Így ki kellet jelölnünk a hierarchia megfelelő elemét és magát a gombot is. A kattintás eseményt a tulajdonságok rész Signals fülén találjuk a GtkToolButtont alatt. A kattintás kezelőjénél mint korábban is válasszuk ki az on_tmbtnadd_clicked -et, majd ahhoz, hogy elmentődjenek a változtatások, kattintsunk fölé vagy alá. Tegyük meg ugyanezt az öszszes többi gombra. Se a mellékattintásról, se a mentésről ne feledkezzünk el! Az elválasztóknál nincs szükség eseményekre, egyszerűen hagyjuk ki őket. rubrikában. Ezután rakjunk egy Text Entry widgetet középre, majd egy gombot a jobb szélre. A másik hboxra is csináljuk meg ugyanezt. Eljött az idő, hogy beállítsuk a widgetek tulajdonságait. A hierarchiában válasszuk ki a label1-et a hbox1-en belül. A tulajdonságok General fülén görgessünk le az Edit label appearance részig, és állítsuk a címkét Path to save file: -ra. Következőnek a Package fül Expandját állítsuk No -ra. A packing ismerős lehet a múlt alkalomról. A padding legyen négy, így egy kis helyet hagyunk ki a Ezután fel kell töltenünk a címke két oldalán. Most a buthboxainkat. A felső hbox a köton1-et választva állítsuk az vetkezőket tartalmazza: egy Expandot No -ra. A General címkét, egy text widgetet és egy gombot. Az eszközök közül fülön állítsuk a nevét btngetfolder -re. Figyeljük meg, hogy válasszuk ki a Labelt (ne a kéket), és helyezzük el a bal oldali mivel ez nem eszköztár gomb, Most a feladatunk az, hogy beállítsuk a létrehozott gombok eseménykezelőit. A hierarchiában válasszuk ki a tbtnadd 18
19 Programozzunk Pythonban ezért nem raktunk ki elé a t -t. Görgessünk le a Label bejegyzésig és gépeljük be, hogy Folder..., majd kattintsunk a Signals fülre és állítsuk be az eseményt GtkButton/clicked ről on_btngetfolder_clicked re. Mielőtt a következő hbox widgetjeinek tulajdonságaival babrálnánk, még egy dolgot meg kell tennünk. A hierarchián belül válasszuk ki a hbox1-et és a Packing alatti expandot állítsuk ismét No -ra. Ezzel a hboxnak kevesebb helyre van szüksége. Végül állítsuk be a Text Entry widget nevét txrpath -ra. Ismételjük meg ugyanezt a hbox2-re is: állítsuk az Expandot No -ra, a címkét Filename: -re, és a paddinget 4-re. A gomb neve legyen btnsaveplaylist, a szövege Save Play- 21. rész <widget class="gtkwindow" id="mainwindow"> <property name="visible">true</property> <property name="title" translatable="yes">playlist Maker v1.0</property> <property name="window_position">center</property> <property name="default_width">650</property> <property name="default_height">350</property> <signal name="destroy" handler="on_mainwindow_destroy"/> terjesztés. Ez tényleg egy XML megtalálhatjuk itt többek között fájl. Ha nagyon alaposak vaannak eseménykezelőjét is. gyunk, akkor megnyithatjuk kedvenc szövegszerkesztőnkkel Nézzük meg az eszköztár (esetemben ez a gedit), és gombjainak kódját (lent). megnézhetjük annak tartalmát. Remélhetőleg kezd érthető Végül az ablakunknak a bal Láthatjuk, hogy egy egysze- lenni a dolog. Most már csak sarokban látható képhez hasonrű szöveg le tudja írni az ablaannyi dolgunk van, hogy egy lónak kellene lennie. kot, annak minden widgetjével olyan kódot írunk, ami megjeleníti hosszú munkánk gyümölez mind szép és jó, de mit is együtt. Nézzük meg például a main widget kódját (fenn). csét működés közben. Hozzuk csináltunk? Ezt a programot elő a kódszerkesztőt és kezdjük még futtatni sem tudjuk, mivel Láthatjuk, hogy a widget ne- ezzel... nincs hozzá forráskód. Amit létve MainWindow, és a címkéje rehoztunk, az valójában egy playlistmake.glade nevű XML Playlist maker v1.0, illetve fájl. Nehogy ösz<child> szezavarjon a kilist File... és az Expandja No. Állítsuk be a kattintás eseményét, majd a Text Entry widget nevét txtfilename -re. Mentsünk! <widget class="gtktoolbutton" id="tbtnadd"> <property name="visible">true</property> <property name="label" translatable="yes">add</property> <property name="use_underline">true</property> <property name="stock_id">gtkadd</property> <signal name="clicked" handler="on_tbtnadd_clicked"/> </widget> <packing> <property name="expand">false</property> <property name="homogeneous">true</property> </packing> </child> 19
20 Programozzunk Pythonban Nos, körülbelül ugyanúgy létrehoztuk az importjainkat, mint múlt hónapban. Vegyük észre, hogy a mutagen.mp3-ból a sys -t és az MP3 -at is importáljuk. A mutagent még a 9es részben telepítettük, szóval ha nincs már meg nálad, akkor ebben a részben tudsz utánajárni. A mutagen importjára a következő alkalommal lesz szükségünk, és a sys import is csak azért kell, hogy a program az utolsó kivételnél rendesen ki tudjon lépni. 21. rész #!/usr/bin/env python import sys from mutagen.mp3 import MP3 try: import pygtk pygtk.require("2.0") except: pass try: import gtk import gtk.glade except: sys.exit(1) class PlayListMaker: def init (self): #============================================= # Window Creation #============================================= self.gladefile = "playlistmaker.glade" self.wtree = gtk.glade.xml(self.gladefile,"mainwindow") ménykezelő rutinokhoz a button.connect vagy window.connect hívásokat használtuk. kód mellett lenne, akkor egy Most egy kicsit máspath-ra is szükségünk lesz. hogy csináljuk: egy Mindanozonáltal, mindig jó do- dictionary-t fogunk log egy helyen tárolni őket. Kö- használni. Ez egy Ezután hozzuk létre az abla- vetkezőnek az ablakunkat olyan tömbszerűség, kot definiáló osztályunkat. Ezt definiáljuk self.wtree néven. indexek heláthatjuk a jobbra fenn lévő áb- Ehhez fogunk minden olyan al- aminél lyett egy kulccsal érrán. kalommal fordulni, amikor az jük el az adattagként ablakra van szükségünk. Továb- tárolt elemeket. Ezek a Key és a Többnyire megegyezik a bá azt is megadjuk, hogy a fájl Data. Itt van a kód, ami egy kimúltkorival. Nézzük az utolsó egy XML, és a megjelenítendő csit tisztába teszi a dolgot. két sort. A glade fájlt (self.glad- ablak a MainWindow. Több csak két eseménnyel file) úgy definiáljuk, hogy a Gla- ablakunk is lehet egy glade fáj- Egyelőre dolgozunk. (lent) de designerben létrehozott fájl lon belül. Majd máskor erre is nevét tartalmazza. Figyeljük to- kitérünk. A két esemény az on_mavábbá meg, hogy nem vesszük inwindow_destroy és az bele az elérési utat, csak a fájl Nézzük most az eseménye on_tbtnquit_ clicked melyek nevét. Ha a glade fájlunk nem a ket. Előző hónapban az esea dictionary kulcsai. A dictionary adata mindkettőnél a #=================================================== gtk.main_quit. Bármikor, ami# Create Event Handlers kor a GUI egy eseményt gene#=================================================== dict = {"on_mainwindow_destroy": gtk.main_quit, rál, a rendszer megkeresi vele a "on_tbtnquit_clicked": gtk.main_quit} dictionary kulcsát, így innentől 20 tudni fogja, hogy mely rutint kell meghívnia. Következőnek hozzá kell kapcsolnunk az ablak üzenet-kezelőjéhez. Ezt a következő sorral tesszük meg: self.wtree.signal_autocon nect(dict) Már majdnem készen vagyunk, csak a main rutinunkat kell elhelyezni: if name == " main ": plm = PlayListMaker() gtk.main()
21 Programozzunk Pythonban 21. rész Mentsük el ezt a fájlt playlistmaker.py" néven! Futtassuk (jobbra)! Induláskor még a bezáródáson kívül nem sokat csinál. A maradék a következő alkalomra marad. Azért hogy felkeltsem az érdeklődéseteket: TreeViewt, dialógusokat és hasonlókat fogunk használni. Találkozzunk a következő számban is! Glade fájl: Python forráskód: Greg Walters a RainyDay Solutions LLC tulajdonosa, amely egy tanácsadó cég a coloradói Aurorában óta foglalkozik programozással. Szeret főzni, túrázni, zenét hallgatni, valamint a szabadidejét családjával tölteni. 21
22 A Full Circle Csapata Kö z re m ű kö d n é l? Szerkesztő - Ronnie Tucker Az olvasóközönségtől folyamatosan várjuk a magazinban megjelenítendő új cikkeket! További információkat a cikkek irányvonalairól, ötletekről és a kiadások fordításairól a wiki oldalunkon olvashatsz. Cikkeidet az alábbi címre várjuk: articles@fullcirclemagazine.org A magyar fordítócsapat wiki oldalát itt találod: A magazin eddig megjelent magyar fordításait innen töltheted le: Ha -t akarsz írni a magyar fordítócsapatnak, akkor erre a címre küldd: fullcirclehu@gmail.com Ha hírt szeretnél közölni, megteheted a következő címen: news@fullcirclemagazine.org Véleményed és Linuxos tapasztalataidat ide küldd: letters@fullcirclemagazine.org ronnie@fullcirclemagazine.org Webmester - Rob Kerfia admin@fullcirclemagazine.org Kommunikációs felelős - Robert Clipsham mrmonday@fullcirclemagazine.org Podcast - Robert Catling podcast@fullcirclemagazine.org Full Circle Magazin Magyar Fordítócsapat Koordinátor: Pércsy Kornél Fordítók: Palotás Anna Tömösközi Máté Ferenc Szerkesztő, korrektor: Heim Tibor Hardver és szoftver elemzéseket ide küldhetsz: reviews@fullcirclemagazine.org Kérdéseket a Kérdések és Válaszok rovatba ide küldd: questions@fullcirclemagazine.org Az én asztalom képeit ide küldd: misc@fullcirclemagazine.org... vagy látogasd meg fórumunkat: Köszönet a Canonical-nek és a fordítócsapatoknak világszerte, továbbá Thorsten Wilms-nek a jelenlegi Full Circle logóért. A FULL CIRCLE-NEK SZÜKSÉGE VAN RÁD! Egy magazin, ahogy a Full Circle is, nem magazin cikkek nélkül. Osszátok meg velünk véleményeiteket, desktopjaitok kinézetét és történeteiteket. Szükségünk van a Fókuszban rovathoz játékok, programok és hardverek áttekintő leírására, a Hogyanok rovatban szereplő cikkekre (K/X/Ubuntu témával), ezenkívül, ha bármilyen kérdés, javaslat merül fel bennetek, nyugodtan küldjétek a következő címre: articles@fullcirclemagazine.org 22
PROGRAMOZZUNK PYTHONBAN 3. Kötet
Programozói sorozat Különkiadás AZ UBUNTU LINUX KÖZÖSSÉG FÜGGETLEN MAGAZINJA Programozói sorozat Különkiadás PROGRAMOZZUNK PYTHONBAN 3. Kötet full circle magazin Python 3. kötet 1 tartalom ^ A Full Circle
Full Circle LINUX LABOR: 2011. február - 46. szám. tartalom ^
Full Circle LINUX LABOR: 2011. február - 46. szám ÚJ AT! OZ R O S ÚJ SOROZAT LIBREOFFICE 1 Full Circle Linux Hírek 4 Programozzunk Pythonban 20. rész 7 ÚJ SOROZAT! LibreOffice 1.rész A Mythbuntu telepítése
Bevezetés a Python programozási nyelvbe
Bevezetés a Python programozási nyelvbe 8. Gyakorlat modulok random számok (utolsó módosítás: 2017. aug. 3.) Szathmáry László Debreceni Egyetem Informatikai Kar 2017-2018, 1. félév Modulok Amint a programunk
Felhasználói leírás a DimNAV Server segédprogramhoz ( )
Felhasználói leírás a DimNAV Server segédprogramhoz (1.1.0.3) Tartalomjegyzék Bevezetés...3 1. Telepítés...3 2. Eltávolítás...4 Program használata...5 1. Kezdeti beállítások...5 2. Licenc megadása...6
Programozási technológia
Programozási technológia Swing GUI készítése NetBeans IDE segítségével Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Bevezető Eddig a grafikus felhasználói felületet kódból hoztuk létre kézzel. A mi
SQL Backup and FTP. A program telepítésének menete. A szoftvert a következő weboldalról ingyenesen tölthető le: https://sqlbackupandftp.
SQL Backup and FTP A szoftvert a következő weboldalról ingyenesen tölthető le: https://sqlbackupandftp.com/ A program telepítésének menete A telepítő elindítása után megjelenő képernyő a Next > gomb megnyomásával
Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba
Ugráló gomb Készítsünk egy egyszerű játékprogramot, ami egy mozgó nyomógombot tartalmaz. A nyomógomb beállított ideig marad egy helyben, majd az ablakon számára elhatárolt terület (panel) egy véletlenszerűen
Thermo1 Graph. Felhasználói segédlet
Thermo1 Graph Felhasználói segédlet A Thermo Graph program a GIPEN Thermo eszközök Windows operációs rendszeren működő grafikus monitorozó programja. A program a telepítést követően azonnal használható.
SSL VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ
SSL VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ GIRODIRECT SZOLGÁLTATÁST IGÉNYBEVEVŐ ÜGYFELEKENEK Verzió: v1.04 Dátum: 2018. január 5. Készítette: A jelen dokumentum tartalma szerzői jogi védelem alatt áll, a mű
1. Origin telepítése. A telepítő első képernyőjén kattintson a Next gombra:
1. Origin telepítése Az Origin telepítéséhez tegye be az Origin CD-t a CDROM-ba, majd kattintson az Origin 7.5 hivatkozásra, miután elindult a CD behelyezésekor a telepítő program. Ha nem indulna el a
MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1
SZE INFORMATIKAI KÉPZÉS 1 ADATBÁZIS-KEZELÉS MS ACCESS 2010 A feladat megoldása során a Microsoft Office Access 2010 használata a javasolt. Ebben a feladatban a következőket fogjuk gyakorolni: Adatok importálása
1. DVNAV letöltése és telepítése
1. DVNAV letöltése és telepítése A Drén és Valner Szoftver Kft által készített DVNAV programmal lehetőség van a számlázó program által elkészített XML-ek NAV-hoz történő eljuttatására, majd a számlákról
Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.
Informatika 1 2011 Második előadás, vezérlési szerkezetek Szabó Adrienn 2011. szeptember 14. Tartalom Algoritmusok, vezérlési szerkezetek If - else: elágazás While ciklus For ciklus Egyszerű típusok Összetett
E-Freight beállítási segédlet
E-Freight beállítási segédlet Az E-Freight rendszer működéséhez szükséges programok és beállítások v08 A legújabb verzióért kérjük, olvassa be az alábbi kódot: 1. Támogatott böngészők Az E-Freight az Internet
SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók
SQL*Plus Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP dolgozó), DEPT osztály) "közönséges" felhasználók Adatszótár: metaadatokat tartalmazó, csak olvasható táblák táblanév-prefixek:
LibreOffice makrók. PCLinuxOS Magazine augusztus. Írta: zerocool
PCLinuxOS Magazine 2014. augusztus Írta: zerocool OK, bevallom! Excel-varázsló voltam. Történetesen ez volt az egyetlen nagy akadály, ami a Linux-ra váltásban gátolt. Tudtam, ha nem dobom el az Exceltrükkök
Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015
Objektumorientált programozás Pál László Sapientia EMTE, Csíkszereda, 2014/2015 7. ELŐADÁS Több információ az alkalmazásban - Fülek az űrlapon - Több űrlapos alkalmazások 2 Több információ az alkalmazásban
Java és web programozás
Budapesti Műszaki Egyetem 2015. 04. 08. 10. Előadás Ami kimearad múlthéten Ha már megvan a KeyListener vagy MouseListener osztályunk a következõ módon tudjuk hozzárendelni egy JFrame vagy JPanel-hez: Ami
Pénzintézetek jelentése a pénzforgalmi jelzőszám változásáról
Pénzintézetek jelentése a pénzforgalmi jelzőszám változásáról Felhasználói Segédlet MICROSEC Kft. 1022 Budapest, Marczibányi tér 9. telefon: (1)438-6310 2002. május 4. Tartalom Jelentés készítése...3 Új
Az importálás folyamata Felhasználói dokumentáció verzió 2.1.
Az importálás folyamata Felhasználói dokumentáció verzió 2.1. Budapest, 2008. Változáskezelés Verzió Dátum Változás Pont Cím Oldal 2.1. 2008.01.17. A teljes dokumentáció megváltozott Kiadás: 2008.01.17.
Hálózati betekint ő program telepítése mobil telefonra. Symbian. alarm shop. Windows mobile Android IPhone Blackberry
Glover Electric kft. www.visiotech.hu Hálózati betekint ő program telepítése mobil telefonra. Symbian Windows mobile Android IPhone Blackberry 1.Symbian Operációs Rendszer 1. Először telepítenie kell a
Rövid leírás a Make Your Mark szoftver használatához
Rövid leírás a Make Your Mark szoftver használatához Ahhoz, hogy egy gyors példán keresztül bemutassunk, a program működését, egy Plytex címkét hozunk létre. Először létre kell hozni egy címkét, majd kinyomtatni
Csatlakozás a BME eduroam hálózatához Setting up the BUTE eduroam network
Csatlakozás a BME eduroam hálózatához Setting up the BUTE eduroam network Table of Contents Windows 7... 2 Windows 8... 6 Windows Phone... 11 Android... 12 iphone... 14 Linux (Debian)... 20 Sebők Márton
Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt
Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt segédlet A Szilipet programok az adatok tárolásához Firebird adatbázis szervert használnak. Hálózatos
A belső hálózat konfigurálása
DHCP A belső hálózat konfigurálása Hozzuk létre a virtuális belső hálózatunkat. Szerver (Windows 2012) SWITCH Kliens gép (Windows 7) Hálózati kártya (LAN1) Hálózati kártya (LAN1) Állítsunk be egy lan1
Swing GUI készítése NetBeans IDE segítségével
Programozási Swing e NetBeans IDE segítségével Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 2 2 Eddig a grafikus felhasználói felületet kódból hoztuk létre kézzel. A mi feladatunk volt az
3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla
1. Az adatbázistábla létrehozása a, Ha még nem hoztunk létre egy adatbázistáblát sem, akkor a jobb egérrel a DDIC-objekt. könyvtárra kattintva, majd a Létrehozás és az Adatbázistábla menüpontokat választva
Miről lesz szó? Setup Project készítése. Tulajdonságok. 1. Készítsünk egy setup project alkalmazást egy már elkészített, lefordított programhoz.
Miről lesz szó? Setup Project készítése Szabadi Tamás tobias@inf.elte.hu Setup project készítése egy már meglévő, lefordított programhoz Specifikus Setup project készítése egy általunk készített projecthez
GIRO GSM MODEM/VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ
GIRO GSM MODEM/VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ Készítette A jelen dokumentum tartalma szerzői jogi védelem alatt áll, a mű felhasználói jogai a -t illetik. A dokumentumot az Ügyfél korlátlan számban
Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás
Programozás BMEKOKAA146 Dr. Bécsi Tamás 8. előadás Visszatekintés A Windows Console alkalmazások egy karakteres képernyőt biztosítottak, ahol a kimenet a kiírt szöveg, míg a bemenet a billentyűzet volt.
Titkosított kommunikáció. Mindenkivel. Egyszerűen.
Felhasználói kézikönyv Android 2 Bevezető Android okostelefon beállítása A felhasználói kézikönyv abban segít, hogy a titkositott.email weboldalon megrendelt e-mail titkosítási szolgáltatást igénybe tudja
CIB Internet Bank asztali alkalmazás Hasznos tippek a telepítéshez és a használathoz Windows operációs rendszer esetén
CIB Internet Bank asztali alkalmazás Hasznos tippek a telepítéshez és a használathoz Windows operációs rendszer esetén A CIB Internet Bankba való webes felületen keresztül történő belépés az Oracle által
A számítógép beállításainak megváltoztatása
Megjelenés és témák Először tekintsük át, hogy hogyan lehet a képernyőn megjelenő elemek küllemét módosítani. Válasszuk a Start menü Vezérlőpultban a Megjelenés és témák hivatkozást. Itt kattintsunk a
WIN-TAX programrendszer frissítése
WIN-TAX programrendszer frissítése A WIN-TAX programrendszert a verzió érvényességének lejártakor illetve jelentősebb változás esetén (pl.: elkészült fejlesztések, munkahelyi hálózati szinkronitás miatt)
BioAdmin 4.1 könnyű telepítés csak Kliens használatra
1 BioAdmin 4.1 könnyű telepítés csak Kliens használatra A BioAdmin 4.1 programot szerver-kliens működésre fejlesztették, de ennek a leírásnak a használatával feltelepíthető a számítógépre normál (csak
FTP Az FTP jelentése: File Transfer Protocol. Ennek a segítségével lehet távoli szerverek és a saját gépünk között nagyobb állományokat mozgatni. Ugyanez a módszer alkalmas arra, hogy a kari web-szerveren
Választó lekérdezés létrehozása
Választó lekérdezés létrehozása A választó lekérdezés egy vagy több rekordforrásból származó adatokat jelenít meg. A választó lekérdezések a táblák, illetve az adatbázis tartalmát nem változtatják meg,
Webshop készítése ASP.NET 3.5 ben I.
Webshop készítése ASP.NET 3.5 ben I. - Portál kialakíása - Mesteroldal létrehozása - Témák létrehozása Site létrehozása 1. File / New Web site 2. A Template k közül válasszuk az ASP.NEt et, nyelvnek (Language)
EDInet Connector telepítési segédlet
EDInet Connector telepítési segédlet A cégünk által küldött e-mail-ben található linkre kattintva, a következő weboldal jelenik meg a böngészőben: Az EdinetConnectorInstall szövegre klikkelve(a képen pirossal
Fontos megjegyzés: Telepítse először az illesztőprogramot, majd csatlakoztassa a VideoCAM ExpressII eszközt az USB porthoz!
Fontos megjegyzés: Telepítse először az illesztőprogramot, majd csatlakoztassa a VideoCAM ExpressII eszközt az USB porthoz! Telepítés előtt olvassa el ezt a fontos megjegyzést! 1. A VideoCAM ExpressII
HVK Adminisztrátori használati útmutató
HVK Adminisztrátori használati útmutató Tartalom felöltés, Hírek karbantartása A www.mvfportal.hu oldalon a bejelentkezést követően a rendszer a felhasználó jogosultsági besorolásának megfelelő nyitó oldalra
PTE-PROXY VPN használata, könyvtári adatbázisok elérhetősége távolról
PTE-PROXY VPN használata, könyvtári adatbázisok elérhetősége távolról Az Informatikai Igazgatóság minden aktív egyetemi hallgató és munkaviszonnyal rendelkező egyetemi dolgozó részére úgynevezett proxy
Delphi programozás I.
Delphi programozás I. Konzol alkalmazások készítése Delphiben A Delphi konzol alkalmazása (console application) olyan 32 bites program, amely nem grafikus felületen, hanem egy szöveges konzol ablakban
T Á J É K O Z T A T Ó. A 1108INT számú nyomtatvány a http://www.nav.gov.hu webcímen a Letöltések Nyomtatványkitöltő programok fülön érhető el.
T Á J É K O Z T A T Ó A 1108INT számú nyomtatvány a http://www.nav.gov.hu webcímen a Letöltések Nyomtatványkitöltő programok fülön érhető el. A Nyomtatványkitöltő programok fület választva a megjelenő
Windows hálózati adminisztráció segédlet a gyakorlati órákhoz
Windows hálózati adminisztráció segédlet a gyakorlati órákhoz Szerver oldal: Kliens oldal: Csoport Házirend 1. A belső hálózat konfigurálása Hozzuk létre a virtuális belső hálózatunkat. INTERNET in NAT
FÁJLOK ÉS MAPPÁK MÁSOLÁSA PENDRIVE-RA ÉS CD-RE A LEGEGYSZERŰBBEN WINDOWS XP-N
FÁJLOK ÉS MAPPÁK MÁSOLÁSA PENDRIVE-RA ÉS CD-RE A LEGEGYSZERŰBBEN WINDOWS XP-N Ezek a cikkek Atom Manó rovattársam kérdésfeltevése alapján jöttek létre, és mivel Ő a fényképekkel végezhető műveletek kapcsán
Az internet ökoszisztémája és evolúciója. Gyakorlat 1
Az internet ökoszisztémája és evolúciója Gyakorlat 1 GNS3: installálás és konfiguráció GNS3: hálózatszimulátor Valódi router/hoszt image-ek hálózatba kapcsolása emulált linkeken keresztül: CISCO, Juniper,
Webcasting Editor Felhasználói kézikönyv és bemutató. A kapott Url -el valamint a kiadott felhasználónév jelszó párossal belépünk:
Webcasting Editor Felhasználói kézikönyv és bemutató A kapott Url -el valamint a kiadott felhasználónév jelszó párossal belépünk: A sikeres belépés után az alábbi oldal jelenik meg: A második lépés a zenei
A szerzõrõl... xi Bevezetés... xiii
TARTALOMJEGYZÉK A szerzõrõl...................................................... xi Bevezetés...................................................... xiii I. rész A Visual Basic 2005 környezet 1. óra Irány
Jelszóváltás a ludens gépen
Jelszóváltás a ludens gépen Az alábbi ismertető feltételezi, hogy Windows alapú gépet használunk, és innen szeretnénk megváltoztatni meglevő ludenses jelszavunkat. Az ismertető elkészítésekor Windows XP
Az Evolut Főkönyv program telepítési és beállítási útmutatója v2.0
Az Evolut Főkönyv program telepítési és beállítási útmutatója v2.0 Az Ön letölthető fájl tartalmazza az Evolut Főkönyv 2013. program telepítőjét. A jelen leírás olyan telepítésre vonatkozik, amikor Ön
Órarendkészítő szoftver
SchoolTime Órarendkészítő szoftver 2.0 verzió Tartalomjegyzék: 1., Belépés a programba...3 2., Órarend főtábla...3 3., Tanátok...4 3.1., Új tanár felvitele, módosítása...4 3.2., Tanár törlése...4 3.3.,
Gyakorló 9. feladat megoldási útmutató
Gyakorló 9. feladat megoldási útmutató 1. Minek a leírása a következő? Aktív hálózati hardver eszközök (pl.: routerek) és szoftverek segítségével létrehozott biztonsági rendszer két hálózat (jellemzően
Számítógépes Hálózatok. 5. gyakorlat
Számítógépes Hálózatok 5. gyakorlat PYTHON ALAPOK V. Socket programozás, UDP 2 Óra eleji kiszh Elérés: https://canvas.elte.hu Számítógépes Hálózatok Gyakorlat 1 3 A kommunikációs csatorna kétféle típusa
Java-s Nyomtatványkitöltő Program Súgó
Java-s Nyomtatványkitöltő Program Súgó Hálózatos telepítés Windows és Linux operációs rendszereken A program nem használja a Registry-t. A program három könyvtárstruktúrát használ, melyek a következők:
Bevezetés a Python programozási nyelvbe
Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban
1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7
1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7 1.1. Új virtuális gép és Windows Server 2008 R2 Enterprise alap lemez létrehozása 1.2. A differenciális lemezek és a két új virtuális
Internetkonfigurációs követelmények. A számítógép konfigurálása. Beállítások Windows XP alatt
Internetkonfigurációs követelmények Annak érdekében, hogy csatlakoztatni tudja a Hozzáférési Pontját a Hozzáférési Pont Kezelőhöz, a következő konfigurációs paramétereket kell beállítania a számítógépe
Youtube videó letöltés és konvertálás Linuxon
Youtube videó letöltés és konvertálás Linuxon A szkript futtatásához szükségünk van 2 program telepítésére (youtube dl, mencoder), ezeket a következő parancs kiadásával tudjuk a legegyszerűbben telepíteni:
II. év. Adatbázisok és számítógépek programozása
II. év Adatbázisok és számítógépek programozása A programozási ismeretek alapfogalmai a) algoritmus b) kódolás c) program a) algoritmus: elemi lépések sorozata, amely a következı tulajdonságokkal rendelkezik:
Adabáziselérés ODBC-n keresztül utasításokkal C#-ban
Adabáziselérés ODBC-n keresztül utasításokkal C#-ban 1. Előkészítés Access adatbázis lemásolása, ODBC DSN létrehozása Másoljuk le az alábbiakat: Mit Honnan Hova list.mdb p:\johanyák Csaba\Vizualis programozas\data\
RAJZ1. vezetett gyakorlat
Inventor R4 1 Rajz1. vezetett gyakorlat RAJZ1. vezetett gyakorlat Műhelyrajz készítés A feladat megoldásához szükséges fájlok: Tutorial Files\body1 Feladat: Készítse el a szelepház műhelyrajzát! 1) Indítson
DogsWorld nevelde telepítése és beállítása
DogsWorld nevelde telepítése és beállítása Kérdés vagy probléma esetén: dogsworld@uw.hu 1 Tartalomjegyzék DogsWorld nevelde telepítése és beállítása... 1 1. Az UW tárhelyen regisztráció... 3 2. Az UW beállítása...
Full Circle. 2010. December - 44. SZÁM. tartalom ^
Full Circle 2010. December - 44. SZÁM QUAKE LIVE - EGY ÉV 1 Full Circle Írjunk a Full Circle magazinba Csapat interjúk Linkrövidítés 24 Játékok Ubuntun 25 14 Programozzunk Python-ban 18. rész 7 Mentés
Szoftvertechnolo gia gyakorlat
Szoftvertechnolo gia gyakorlat Dr. Johanyák Zsolt Csaba http://johanyak.hu 1. Dependency Injection (függőség befecskendezés) tervezési minta A tervezési minta alapgondolata az, hogy egy konkrét feladatot
Szia Ferikém! Készítek neked egy leírást mert bánt, hogy nem sikerült személyesen megoldani a youtube problémát. Bízom benne, hogy segít majd.
Szia Ferikém! Készítek neked egy leírást mert bánt, hogy nem sikerült személyesen megoldani a youtube problémát. Bízom benne, hogy segít majd. Első lépés: Töltsd le a programot innen: http://download.vessoft.com/files/fyds/freeyoutubedownoad.exe
1.1.1 Dátum és idő függvények
1.1.1 Dátum és idő függvények Azt már tudjuk, hogy két dátum különbsége az eltelt napok számát adja meg, köszönhetően a dátum tárolási módjának az Excel-ben. Azt is tudjuk a korábbiakból, hogy a MA() függvény
Alcatel PCSuite 1 installálása. Mielőtt elkezdenénk installálni a PCSuit programot bizonyosodjunk meg a következőkről:
Alcatel PCSuite 1 installálása Mielőtt elkezdenénk installálni a PCSuit programot bizonyosodjunk meg a következőkről: Operációs rendszerünk minimum Windows 98se, Windows Me (nem ajánlott), Windows 2000+SP4
Az FMH weboldal megnyitásakor megjelenő angol nyelvű üzenetek eltüntetése
Az FMH weboldal megnyitásakor megjelenő angol nyelvű üzenetek eltüntetése A Java kliensprogram telepítése, és megfelelő beállítása szükséges az FMH weblap megfelelő működéséhez. Ha nincs telepítve vagy
NINJA kezelői program letöltése és installálása
NINJA kezelői program letöltése és installálása A regisztrálás, illetve feltöltés után Ön kapott egy e-mailt tőlünk, melyben leírtuk Önnek a szolgáltatás eléréséhez nélkülözhetetlen, fontos adatokat. A
VisualBaker Telepítési útmutató
VisualBaker Telepítési útmutató Office Hungary Bt web: www.visualbaker.hu e-mail: info@visualbaker.hu Tartalomjegyzék: Telepítési útmutató... 1 Tartalomjegyzék:... 2 Első lépések:... 3 Telepítési kulcs...
Felhasználói Útmutató. Center V2
Felhasználói Útmutató Center V2 Verzió: v8.5 Készült: Budapest, 2012 Riarex Kft. megbízásából - 1 - Riarex Kft. 1.3 A Center V2 képernyője 1 2 3 4 5 6 7 8 9 10 11 12 13 14 16 15 17 17 18 19 20 21 22 1-1
OpenVPN kliens telepítése a RITEK Zrt. szervereinek eléréséhez.
OpenVPN kliens telepítése a RITEK Zrt. szervereinek eléréséhez. Az OpenVPN kliens programra akkor van szükség, ha egy nyílt Internet elérésű helyről szeretnénk elérni magas biztonság mellett a RITEK Zrt.
4. Válasszuk ki a dolgozót, majd nyomjuk meg az gombot. Megjelenik a dolgozó adatlapja. 5. Nézzük át, hogy minden adat helyesen van-e kitöltve, szüksé
Útmutató A 2005. évi kontroll adatszolgáltatás elkészítéséhez Előzetes teendők: 1. Töltse le és telepítse az APEH Internet lapjáról (www.apeh.hu) az ABEV2006 programot és a hozzá tartozó nyomtatványokat.
II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK
Mérési Utasítás Linux/Unix jogosultságok és fájlok kezelése Linux fájlrendszerek és jogosultságok Linux alatt, az egyes fájlokhoz való hozzáférések szabályozása érdekében a fájlokhoz tulajdonost, csoportot
PHP-MySQL. Adatbázisok gyakorlat
PHP-MySQL Adatbázisok gyakorlat Weboldalak és adatbázisok Az eddigiek során megismertük, hogyan lehet a PHP segítségével dinamikus weblapokat készíteni. A dinamikus weboldalak az esetek többségében valamilyen
PYTHON. Avagy hosszú az út a BioPythonig
PYTHON Avagy hosszú az út a BioPythonig Miért a Python? Mert ez áll a legközelebb az ember által beszélt nyelvhez. Mert ez a leggyorsabb az ismert script nyelvek közül Mert rengeteg modul érhető el hozzá
Az internet ökoszisztémája és evolúciója. Gyakorlat 1
Az internet ökoszisztémája és evolúciója Gyakorlat 1 GNS3: installálás és konfiguráció GNS3: hálózatszimulátor Valódi router/hoszt image-ek hálózatba kapcsolása emulált linkeken keresztül: CISCO, Juniper,
M-Files Dokumentumkezelő telepítése
Az Jelen dokumentum a következő fejezetek tartalmazza: a szoftver telepítése az M-Files telepítő programmal; az irattár létrehozása, a felhasználók felvétele az M-Files Server Administrator (szerver) programmal;
Oktatási segédanyag. Weboldalszerkesztési gyakorlatok
Oktatási segédanyag Weboldalszerkesztési gyakorlatok Bevezetés A korábbi oktatási segédanyagokban megismertük a weboldalszerkesztés gyakorlatát. Ennek a segédanyagnak a célja, hogy gyakorlati példákon
A webáruház kezdőlapján háromféle diavetítés beállítására van lehetőség:
KRYPTON sablon Részletes leírás a sablonhoz kapcsoló új beállításokról Diavetítés a kezdőlapon A webáruház kezdőlapján háromféle diavetítés beállítására van lehetőség: Képes diavetítés Termékes diavetítés
Széchenyi István Egyetem www.sze.hu/~herno
Oldal: 1/6 A feladat során megismerkedünk a C# és a LabVIEW összekapcsolásának egy lehetőségével, pontosabban nagyon egyszerű C#- ban írt kódból fordítunk DLL-t, amit meghívunk LabVIEW-ból. Az eljárás
9. óra operációs rendszerek. Grafikus operációs rendszer
9. óra operációs rendszerek Grafikus operációs rendszer Grafikus képernyőkezelés (egér) Ikonorientált rendszer Ablakos vezérlés Ablak, ikon: fájl, fájlcsoport Egységes kezelői felület Ablakkezelés Menü
Java és web programozás
Budapesti M szaki Egyetem 2013. november 20. 10. El adás SQLite SQLite: Adatbázis kezel rendszer SQL standardokat nagyrészt követi Nagyon elterjedt, pl böngész kben is használt Nehéz olyan programnyelvet
Mire jó az önéletrajz? Az önéletrajz egy olyan dokumentum, ami bemutat minket a munkaadó számára.
Mire jó az önéletrajz? A felnőtt önálló élethez szükségünk van egy fizető állásra. Az álláskereséshez szükség van egy önéletrajzra. Az önéletrajz egy olyan dokumentum, ami bemutat minket a munkaadó számára.
MEDITOR 5 KLÓN telepítési segédlete
MEDITOR 5 KLÓN telepítési segédlete I. Az adatbázis motor telepítése II. A MEDITOR 5 KLÓN program telepítése III. Adatok feltöltése a KLÓN programba I. Adatbázis motor telepítése Kérem, hogy a telepítések
Tanúsítványkérelem készítése, tanúsítvány telepítése Lotus Domino szerveren
Tanúsítványkérelem készítése, tanúsítvány telepítése Lotus Domino szerveren Tartalomjegyzék 1. BEVEZETÉS...3 2. KEY RING KÉSZÍTÉSE...3 3. SERVER CERTIFICATE REQUEST KÉSZÍTÉSE...4 4. TANÚSÍTVÁNYKÉRELEM
Mobil Telefonon Keresztüli Felügyelet Felhasználói Kézikönyv
Mobil Telefonon Keresztüli Felügyelet Felhasználói Kézikönyv Tartalomjegyzék 1. Symbian rendszer...2 1.1 Funkciók és követelmények...2 1.2 Telepítés és használat...2 2. Windows Mobile rendszer...6 2.1
Integráció LadyBirddel
Integráció LadyBirddel 1 A ShopRenter és a Ladybird integrációjához beállításokat kell eszközölnünk mind a ShopRenter, mind a LadyBird felületén. Elsőként a LadyBirdben kell elvégeznünk teendőinket, mert
MOME WiFi hálózati kapcsolat beállítása 2010. február 25.
MOME WiFi hálózati kapcsolat beállítása 2010. február 25. A MOME wifi hálózatában három hálózati azonosító (SSID) került beállításra: 1. SSID: guest Titkosítatlan hálózati forgalom, szabad csatlakozási
A LOGO MOTION TANÍTÁSA
A LOGO MOTION TANÍTÁSA ÍRTA: SZABÓ JÁNOS TANÍTÓ 2010, KECEL LOGO MOTION TANÍTÁSA KÉSZÍTETTE: SZABÓ JÁNOS TANÍTÓ 2010. 1 1. FOGLALKOZÁS Kattintsunk a Logo motion ikonjára. A Színes teki. Ez a program ablaka.
Digitális aláírás általános telepítése és ellenőrzése
Digitális aláírás általános telepítése és ellenőrzése A digitális aláírásból (tanúsítványból) két fajta létezik! Egyik az úgynevezett hardveres tanúsítvány, amelynél az ügyfél rendelkezik fizikailag egy
Gyakran ismételt kérdések
Gyakran ismételt kérdések Mi az ACN2Go Europe ipad alkalmazás? Az ACN2Go Europe ipad alkalmazással megismerheti a vállalatot és annak termékeit. Ez az alkalmazás lehetővé teszi, hogy Ön bárhol és bármikor
Szabadkai Műszaki Szakfőiskola. Web programozás. dr Zlatko Čović chole@vts.su.ac.rs
Szabadkai Műszaki Szakfőiskola Web programozás dr Zlatko Čović chole@vts.su.ac.rs 1 DOM események (events) JavaScriptben interaktív programok készítésére az események által vezérelt programozási modellt
A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.
Függvények 1.Függvények...1 1.1.A függvény deníció szintaxisa... 1..Függvények érték visszatérítése...3 1.3.Környezettel kapcsolatos kérdések...4 1.4.Lokális változók használata...4 1.5.Rekurzív hívások...5.kód
7. Előadás. Makrók alkalmazása. Salamon Júlia. Előadás I. éves mérnök hallgatók számára
7. Előadás Makrók alkalmazása. Salamon Júlia Előadás I. éves mérnök hallgatók számára Feltételes ciklusok Ha a ciklusváltozó intervallumát, előre nem tudjuk mert például a program futása során megszerzett
3. Gyakorlat ellenőrzés nélküli osztályozás
3. Gyakorlat ellenőrzés nélküli osztályozás Hozzávalók: MultiSpec program (d: meghajtó, MultiSpecWin32 könyvtár, MultiSpecWin32.exe); ag020522_dpac_cd.lan állomány Ebben a gyakorlatban az ellenőrzés nélküli
Általános e-mail fiók beállítási útmutató
Általános e-mail fiók beállítási útmutató Ennek az összeállításnak az a célja, hogy segítséget nyújtsunk azon Ügyfeleink számára, akik az IntroWeb Kft. által nyújtott e-mail szolgáltatáshoz be szeretnék