<div dir="ltr">To iné odsadenie vzniklo  iba"zdeformovaním" textu s pri kopírke z editoru (zalomenie riadkov, odsadenia atd)<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">Dňa 12. január 2013 22:47, David Rohleder <span dir="ltr"><<a href="mailto:davro@ics.muni.cz" target="_blank">davro@ics.muni.cz</a>></span> napísal(-a):<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Zdá se mně to, nebo používáš v každé úrovni jiné odsazení?<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
Roman Beno píše v So 12. 01. 2013 v 18:08 +0100:<br>
><br>
> Dobrý deň,<br>
><br>
> chcel by som sa spýtať na váš názor ohľadne môjho štýlu písania<br>
> programov v OOP.<br>
> Rád prijmem akukolvek kritiku, mojim cielom je sa v tomto ohľade<br>
> zlepšit a v tejto oblasti som si nie som príliš istý.<br>
><br>
> Tu sú ukážky mojich kódov:<br>
><br>
> # -*- coding: utf-8 -*-<br>
> #################Definícia triedy#######################<br>
> class Fibonacci:<br>
>     "Fibonacciho trieda"<br>
>     def __init__(self,a=0,b=1,pocet_cisiel=10,default=0):<br>
>         "Vyrobíme stavebný materiál pre fibonaccciho postupnosť."<br>
>         self.a=a<br>
>         self.b=b<br>
>         self.pocet_cisiel=pocet_cisiel<br>
>         self.default=default<br>
>     def proces(self):<br>
>         print(self.a,self.b,end=" ")<br>
>         while True:<br>
>             self.a=(self.a+self.b)<br>
>             self.default+=1<br>
>             if self.default>=self.pocet_cisiel:<br>
>                 print("\n")<br>
>                 break<br>
>             print(self.a,end=" ")<br>
>             # postupnost bude a,b,a,b,a,b... tento blok je pre všetky<br>
> a<br>
>             self.b=(self.a+self.b)<br>
>             self.default+=1<br>
>             if self.default>=self.pocet_cisiel:<br>
>                 print("\n")<br>
>                 break<br>
>             print(self.b,end=" ")<br>
>             # a tento pre všetky b<br>
> #################Hlavný program##########################<br>
> MojaInstancia=Fibonacci(pocet_cisiel=20)<br>
> MojaInstancia.proces()<br>
><br>
> ************************************************************************************************************<br>
> Tu je další:<br>
><br>
> # -*- coding: utf-8 -*-<br>
> # program Záznamník adries<br>
> # tréning Tkinter + OOP<br>
> # autor JA, dnes<br>
> # ver. 1.0<br>
> # * opravená chyba pri vytvárani poľa pre zadávaní adresy, použitá<br>
> neexistujúca farba okna<br>
> # * opravená chyba pri vytváraní tlačítka ukončujúceho okno zadávania,<br>
> použitý neexistujúci názov prvku<br>
> # * zmenené umiestnenie a veľkosť tlačítka pre zavretie okna pri<br>
> pridávaní adries<br>
> # ver. 1.1<br>
> # * opravená chyba pri potvrdení voľby mena pri pridávaní mena,<br>
> použitá neexistujúca premenná<br>
> # * opravená chyba pri potvrdení voľby mena pri pridávaní adresy,<br>
> použitá neexistujúca premenná<br>
> # ver. 1.2<br>
> # * polia pre zadávaní mena aj adresy sa po zadaní oboch údajov teraz<br>
> vymažú (ich hodnota)m<br>
> #   uživatel ich teraz nemusí zadávať sám<br>
> # * opravená chyba pri  načítaní údajov zo zoznamu, použitá<br>
> neexistujúca premenná<br>
> # ver. 1.2.1<br>
> # * opravená chyba pri zobrazovaní načítaných údajov,použitá<br>
> neexistujúca premenná<br>
> # ver. 1.3<br>
> # * opravená chyba pri vytváraní tlačítka na zavretie okna načítania<br>
> údajov, použitá neexistujúca<br>
> #   premenná<br>
> # * opravená chyba pri zobrazovaní načítaných údajov (druhá chyba v<br>
> tomto), použitá neexistujúca premenná<br>
> # * zmenený text niektorých tlačítok v úvodnom menu<br>
> # * v popisku okna sa teraz zobrazuje aj aktuálna verzia programu<br>
> # ver. 1.3.1<br>
> # * pri načítaní údajov upravená oddelovacia čiara údajov<br>
> # * zmenené rozmery tlačítka ukončujúceho okno načítania údajov<br>
> # ver. 1.3.2<br>
> # * v okne ukladania súboru zmenená farba informačného textu na<br>
> prehľadnejšiu<br>
> # * opravená chyba pri ukladaní súborov, použitá neexistujúca premenná<br>
> # ver. 1.4<br>
> # * opravená chyba pri ukladaní súborov, použitá ďalšia neexistujúca<br>
> premenná<br>
> # * zmenená farba riadku pre chybové hlásenia v okne ukladania dát na<br>
> prirodzenú bledomodrú<br>
> # * pridaná možnosť odstránenia položiek zo zoznamu<br>
><br>
><br>
> from tkinter import *<br>
> import sys<br>
> import os<br>
><br>
> class Zaznamnik:<br>
>     "Toto je trieda môjho záznamníku"<br>
><br>
>     def __init__(self):<br>
>         self.hlavneOkno=Tk()<br>
>         self.hlavneOkno.title("Záznamník, Ver. 1.4")<br>
>         self.adresy=[]<br>
>         self.zoznamMena=[]<br>
><br>
>     def program(self):<br>
>         "Táto časť programu bude mať za úlohu čisto len grafiku<br>
> hlavného menu (nie logiku)."<br>
><br>
> self.HOuvodnypopisokLabel=Label(self.hlavneOkno,bg="lightblue",text="Vitajte v mojom záznamníku adries.\nDúfam, že sa vám bude páčiť.")<br>
>         self.HOuvodnypopisokLabel.grid(row=0,column=0,sticky=W+E+N+S)<br>
>         # uvodny popisok - label - ktorý nás privíta v programe<br>
><br>
> self.HOtlacitkoZadavatAdresy=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Pridať adresy do záznamníka")<br>
>         self.HOtlacitkoZadavatAdresy.grid(row=1,column=0,sticky=W+E+N<br>
> +S)<br>
>         # tlačítko, ktoré by malo umožniť zadávanie adries<br>
><br>
> self.HOtlacitkoOdstranitAdresy=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Odstrániť adresu zo záznamníka")<br>
>         self.HOtlacitkoOdstranitAdresy.grid(row=2,column=0,sticky=W+E<br>
> +N+S)<br>
>         # tlačítko, ktoré by malo umožniť odstránenie adries<br>
><br>
> self.HOtlacitkoUlozit=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Uložiť do súboru")<br>
>         self.HOtlacitkoUlozit.grid(row=3,column=0,sticky=W+E+N+S)<br>
>         # tlačítko, ktoré by malo umožnit uloženie do súboru<br>
><br>
> self.HOtlacitkoNacitat=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Načítať dáta zo zoznamu")<br>
>         self.HOtlacitkoNacitat.grid(row=4,column=0,sticky=W+E+N+S)<br>
>         # tlačítko, ktoré by malo umožniť načítanie dát zo súboru<br>
><br>
> self.HOtlacitkoNapoveda=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Zobrazenie nápovedy")<br>
>         self.HOtlacitkoNapoveda.grid(row=5,column=0,sticky=W+E+N+S)<br>
>         # tlačítko, ktoré by malo zobraziť nápovedu<br>
><br>
> self.HOtlacitkoUkoncit=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Ukončiť program",command=self.hlavneOkno.quit)<br>
>         self.HOtlacitkoUkoncit.grid(row=6,column=0,sticky=W+E+N+S)<br>
>         # tlačítko, ktoré by malo ukončiť program<br>
><br>
>         def zadavanie_adries():<br>
>             "Táto časť bude zachytávať logiku programu. Kvoli velkému<br>
> rozsahu rozdelenú na niekoľko častí. Konkrétne zadávanie adries."<br>
>             # prvá časť tejto funkcie<br>
>             # vzhľad podokna na zadávanie<br>
>             self.OknoZadavanie=Toplevel()<br>
>             self.OknoZadavanie.title("Zadávanie adries")<br>
><br>
> self.OknoZadavanieLabel=Label(self.OknoZadavanie,bg="lightblue",text="<br>
> Aktuálna činnosť: Zadávanie adries                 \nPre potvrdenie<br>
> údaju z okna stlačte ENTER.\n")<br>
><br>
> self.OknoZadavanieLabel.grid(row=0,column=0,columnspan=4,sticky=W+E+N<br>
> +S)<br>
>             # Vytvorenie podokna na zadávanie adries, nastavený<br>
> titulok + úvodný Label<br>
>             self.VarPPCH=StringVar()<br>
><br>
> self.OknoZadavanieLabelChybHlasky=Label(self.OknoZadavanie,bg="lightblue",textvariable=self.VarPPCH)<br>
><br>
> self.OknoZadavanieLabelChybHlasky.grid(row=1,column=0,columnspan=4,sticky=W+E+N+S)<br>
>             # Vytvorená textová premenná pre prípadné chybové hlášky.<br>
> Pre začiatok sa bude tváriť ako<br>
>             # neviditeľná súčasť okna<br>
><br>
> self.RamecZadajMeno=Frame(self.OknoZadavanie,bd=3,bg="lightblue")<br>
><br>
> self.RamecZadajMeno.grid(row=2,column=0,columnspan=4,sticky=W+E+N+S)<br>
>             self.VarPZM=StringVar()<br>
>             # Vytvorený rámec pre zadanie mena + popisok k nemu.<br>
> Taktiež premenná pre políčko<br>
>             # pre vstup<br>
><br>
> self.RamecPopisokPola=Label(self.RamecZadajMeno,text="Zadajte meno<br>
> dotyčného:",bg="lightblue")<br>
>             self.RamecPopisokPola.grid(row=2,column=0,sticky=W+E+N+S)<br>
><br>
> self.PolePreVstupMena=Entry(self.RamecZadajMeno,bg="lightyellow",textvariable=self.VarPZM,font="Arial 8")<br>
><br>
> self.PolePreVstupMena.grid(row=2,column=1,columnspan=3,sticky=W+E+N+S)<br>
>             # Vytvorený popisok pre pole pre vstup + políčko samotné<br>
><br>
> self.RamecZadajAdresu=Frame(self.OknoZadavanie,bd=4,bg="lightblue")<br>
><br>
> self.RamecZadajAdresu.grid(row=3,column=0,columnspan=4,sticky=W+E+N+S)<br>
><br>
> self.LabelPreDruhePole=Label(self.RamecZadajAdresu,bg="lightblue",text="Zadajte adresu dotyčného: ")<br>
>             self.LabelPreDruhePole.grid(row=3,column=0,sticky=W+E+N+S)<br>
>             self.VarPPA=StringVar()<br>
><br>
> self.PolePreAdresu=Entry(self.RamecZadajAdresu,bg="lightyellow",textvariable=self.VarPPA,font="Arial 8")<br>
>             self.PolePreAdresu.grid(row=3,column=1,columnspan=3)<br>
>             # Vytvorený rámec pre zadanie adresy, popis pre neho,<br>
> premennú pre neho a taktiež pole<br>
>             # samé.<br>
><br>
> self.ZadavacieTlacitkoUkoncit=Button(self.OknoZadavanie,bg="lightblue",activebackground="lightgreen",command=self.OknoZadavanie.destroy,text="Zavrieť toto okno")<br>
><br>
> self.ZadavacieTlacitkoUkoncit.grid(row=4,column=0,columnspan=4,sticky=W+E+N+S)<br>
>             self.OverovaciToken=0<br>
>             # Vytvorené tlačítko pre zavretie tohto okna pre zadanie<br>
> adresy.<br>
>             def enter(BoloStlacene):<br>
>                 BoloStlacene.widget.configure(state=DISABLED)<br>
>                 self.udajMeno=str(self.PolePreVstupMena.get())<br>
>                 self.OverovaciToken+=1<br>
>                 if self.OverovaciToken==2:<br>
>                     self.PolePreVstupMena.configure(state=NORMAL)<br>
>                     self.PolePreAdresu.configure(state=NORMAL)<br>
>                     self.zoznamMena.append(self.udajMeno)<br>
>                     self.VarPZM.set("")<br>
>                     self.VarPPA.set("")<br>
><br>
> self.adresy.append([self.udajMeno,self.udajAdresu])<br>
>                     self.OverovaciToken=0<br>
>             # funkcia, čo sa má stať po zdarnom zadaní informácie do<br>
> políčka Meno. Dané políčko<br>
>             # sa disabluje, údaj z neho sa uloží. + špecialita<br>
> overovací token. Ak dosiahne hodnotu 2,<br>
>             # program zistí, že má spravit ďalšiu "obrátku" pri<br>
> pridávaní do zoznamu<br>
>             def entri(StlaceneBolo):<br>
>                 StlaceneBolo.widget.configure(state=DISABLED)<br>
>                 self.udajAdresu=str(self.PolePreAdresu.get())<br>
>                 self.OverovaciToken+=1<br>
>                 if self.OverovaciToken==2:<br>
>                     self.PolePreVstupMena.configure(state=NORMAL)<br>
>                     self.PolePreAdresu.configure(state=NORMAL)<br>
>                     self.zoznamMena.append(self.udajMeno)<br>
>                     self.VarPZM.set("")<br>
>                     self.VarPPA.set("")<br>
><br>
> self.adresy.append([self.udajMeno,self.udajAdresu])<br>
>                     self.OverovaciToken=0<br>
>             # táto funkcia zase slúži na definovanie činnosti políčka<br>
> Adresy. Zapíše údaj<br>
>             # do zoznamu a disabluje políčko. Malo by to zabezpečiť<br>
> zadávanie.<br>
>             self.PolePreVstupMena.bind("<Return>",enter)<br>
>             self.PolePreAdresu.bind("<Return>",entri)<br>
>             # čo sa má stať po stlačení Entrov v rôznych okienkach<br>
><br>
>         def nacitanie_dat():<br>
>             "Táto funkcia by mala zabezpečiť zobrazenie, resp.<br>
> načítanie dát zo zoznamu."<br>
>             self.OknoNacitanie=Toplevel()<br>
>             self.OknoNacitanie.title("Načítanie dát")<br>
>             # vytvorené vlastné okno pre načítanie dát, kde by sa<br>
> teoreticky mali zobrazovať<br>
>             # dáta uložené v zozname adries<br>
><br>
> self.oknoNacitanieZobrazenie=Label(self.OknoNacitanie,bg="lightblue",text="")<br>
>             self.oknoNacitanieZobrazenie.grid(row=0,column=0)<br>
>             self.premenna="""\tMená\t\tAdresy<br>
> \n***************************************\n"""<br>
>             if len(self.adresy)==0:<br>
>                 self.oknoNacitanieZobrazenie.configure(text="Zoznam je<br>
> prázdny.")<br>
>             else:<br>
>                 for p in self.adresy:<br>
>                     self.coNacitaj="\t{0}\t\t{1}\n".format(p[0],p[1])<br>
>                     self.premenna+=self.coNacitaj<br>
><br>
> self.oknoNacitanieZobrazenie.configure(text=self.premenna)<br>
>             # toto by malo zabezpečiť zdarné zobrazovanie položiek<br>
> zoznamu<br>
><br>
><br>
> self.tlacitkoUkoncitON=Button(self.OknoNacitanie,bg="lightblue",activebackground="lightgreen",text="Zavrieť toto okno",command=self.OknoNacitanie.destroy)<br>
>             self.tlacitkoUkoncitON.grid(row=1,column=0,sticky=N+S+E+W)<br>
>             # toto tvorí tlačítko, ktoré by mohlo zavrieť okno<br>
><br>
>         def ulozenie_do_suboru():<br>
>             "Toto má na starosti zdarné uloženie dát do súboru. Trošku<br>
> nám pomôže predošlá funkcia, načítanie dát."<br>
>             self.OknoUlozenie=Toplevel()<br>
>             self.OknoUlozenie.title("Uloženie do súboru")<br>
><br>
> self.OknoUlozenieLabelVyber=Label(self.OknoUlozenie,text="Vyberte meno<br>
> súboru, do ktorého chcete uložiť dáta zo súboru.",bg="lightblue")<br>
><br>
> self.OknoUlozenieLabelVyber.grid(row=0,column=0,columnspan=2,sticky=W<br>
> +E+N+S)<br>
>             # vytvorené ukladacie okno, nastavený popisok pre neho +<br>
> popisok pre políčko pre zadanie mena ukladacieho súboru<br>
>             self.OUPPV=StringVar()<br>
><br>
> self.OUPolePreVstup=Entry(self.OknoUlozenie,bg="lightyellow",font="Arial 8",textvariable=self.OUPPV)<br>
><br>
> self.OUPolePreVstup.grid(row=0,column=2,columnspan=2,sticky=W+E+N+S)<br>
>             # pole, kam môžeme zadávať samotný názov súboru<br>
><br>
> self.OUPosudzovaciaHlaska=Label(self.OknoUlozenie,bg="lightblue",text="")<br>
><br>
> self.OUPosudzovaciaHlaska.grid(row=1,column=0,columnspan=4,sticky=W+E<br>
> +N+S)<br>
>             # tu sa vypíš prípadná chybová hláška, v závislosti od<br>
> toho, čo zadáme do zmieneného políčka<br>
>             def entricek(ppv):<br>
>                 self.result=str(self.OUPolePreVstup.get())<br>
>                 if len(self.result)==0:<br>
>                     self.OUPosudzovaciaHlaska.configure(text="Nezadali<br>
> ste meno žiadneho súboru.")<br>
>                     self.OUPPV.set("")<br>
>                     return<br>
>                 # ak ste nezadali nič, tak vypíše hlášku, znuluje<br>
> hodnotu pola a zavrie funkciu<br>
>                 if len(self.adresy)==0:<br>
>                     self.OUPosudzovaciaHlaska.configure(text="Zoznam<br>
> adries je prázdny.")<br>
>                     self.OUPPV.set("")<br>
>                     return<br>
>                 # podobné ako v predchádzajúcom prípade, ibaže ak je<br>
> zoznam adries prázdny<br>
>                 self.subor=open(self.result,"wt")<br>
>                 try:<br>
>                     self.subor.write(self.premenna)<br>
>                 except:<br>
>                     self.OUPosudzovaciaHlaska.configure(text="Zatial<br>
> ste nenačítali žiadne dáta. Urobte tak cez hlavné menu.")<br>
>                     self.subor.close()<br>
>                     self.OUPPV.set("")<br>
>                     return<br>
>                     # stale je možnost že uživatel nenačítal<br>
> požadované dáta na vloženie<br>
>                 self.OUPosudzovaciaHlaska.configure(text="Zatial ste<br>
> nenačítali žiadne dáta. Urobte tak cez hlavné menu.")<br>
>                 self.subor.close()<br>
>                 self.OUPolePreVstup.configure(state=DISABLED)<br>
>                 # toto sa stane v pripade že chyba nenastala,<br>
>             self.OknoUlozenie.bind("<Return>",entricek)<br>
><br>
> self.OUTlacitkoZavri=Button(self.OknoUlozenie,bg="lightblue",activebackground="lightgreen",text="Zavrieť toto okno",command=self.OknoUlozenie.destroy)<br>
><br>
> self.OUTlacitkoZavri.grid(row=2,column=0,columnspan=4,sticky=W+E+N+S)<br>
>             # urobené tlačítko, ktoré zavrie okno<br>
><br>
>         def odstranenie_poloziek():<br>
>             "Odstránenie jedného záznamu zo zoznamu adries a mien"<br>
>             self.OknoOdstranenie=Toplevel()<br>
>             self.OknoOdstranenie.title("Odstranenie poloziek")<br>
>             self.OOpripravenytext=[]<br>
>             # vytvorené okno odstránenia, nastavený popisok +<br>
> náradíčko = prázdny zoznam<br>
>             for x in self.zoznamMena:<br>
>                 self.OOpripravenytext.append(x)<br>
><br>
> self.OOodstranenieLabel=Label(self.OknoOdstranenie,bg="lightblue",text="Vyberte si položku zoznamu,ktorú\nchcete odstrániť:")<br>
>             self.OOodstranenieLabel.grid(row=0,column=0)<br>
>             # pripraví zoznam položiek pre neskoršie odstranovanie +<br>
> vytvorenie labelu na odstranenie<br>
>             # položky<br>
>             self.OOPPO=StringVar()<br>
><br>
> self.OOPolePreOdstranenie=Entry(self.OknoOdstranenie,bg="lightyellow",textvariable=self.OOPPO,font="Arial 8")<br>
><br>
> self.OOPolePreOdstranenie.grid(row=0,column=1,columnspan=2,sticky=W+E<br>
> +S+N)<br>
><br>
> self.OOLabelChybovaHlaska=Label(self.OknoOdstranenie,bg="lightblue",text="")<br>
><br>
> self.OOLabelChybovaHlaska.grid(row=1,column=0,columnspan=3,sticky=W+E<br>
> +S+N)<br>
>             # samotné políčko, kam možete zadat meno položky (meno<br>
> konk.osoby, ktorú chcete odstrániť<br>
>             def stlacil_entri(gangnam):<br>
>                 coBoloStlacenee=str(self.OOPolePreOdstranenie.get())<br>
>                 if coBoloStlacenee in self.zoznamMena:<br>
><br>
> indexCoBoloStlacenee=self.zoznamMena.index(coBoloStlacenee)<br>
>                 else:<br>
><br>
> self.OOLabelChybovaHlaska.configure(text="Neexistujúce meno.")<br>
>                     self.OOPPO.set("")<br>
>                 del self.adresy[indexCoBoloStlacenee]<br>
>                 del<br>
> self.zoznamMena[self.zoznamMena.index(coBoloStlacenee)]<br>
>                 self.OOPPO.set("")<br>
>                 # zoberieme to z políčka pre vstup, ak je v zozname<br>
> mien, odstrán z oboch zoznamov<br>
>                 # ak nie, vyhod chybove hlasky. Samozrejmostou je<br>
> nasledne premazanie policka<br>
>             self.OOPolePreOdstranenie.bind("<Return>",stlacil_entri)<br>
><br>
> self.OOZavriOkno=Button(self.OknoOdstranenie,bg="lightblue",activebackground="lightgreen",text="Zavrieť toto okno",command=self.OknoOdstranenie.destroy)<br>
>             self.OOZavriOkno.grid(row=2,column=0,columnspan=3,sticky=W<br>
> +E+S+N)<br>
>             # zabezpečená akcia pre pole pre vstup po stlačení Enteru.<br>
>             # vytvorené tlačítko na zavretie okna<br>
><br>
><br>
>         self.HOtlacitkoNacitat.configure(command=nacitanie_dat)<br>
>         self.HOtlacitkoUlozit.configure(command=ulozenie_do_suboru)<br>
><br>
> self.HOtlacitkoZadavatAdresy.configure(command=zadavanie_adries)<br>
><br>
> self.HOtlacitkoOdstranitAdresy.configure(command=odstranenie_poloziek)<br>
><br>
>         self.hlavneOkno.mainloop()<br>
><br>
> #########################################################<br>
><br>
> inst=Zaznamnik()<br>
> inst.program()<br>
><br>
> Ďakujem za akúkolvek odpoved<br>
><br>
><br>
> _______________________________________________<br>
> Python mailing list<br>
> <a href="mailto:Python@py.cz">Python@py.cz</a><br>
> <a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
<br>
<br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@py.cz">Python@py.cz</a><br>
<a href="http://www.py.cz/mailman/listinfo/python" target="_blank">http://www.py.cz/mailman/listinfo/python</a><br>
</div></div></blockquote></div><br></div>