[python] otázka ohladom mojho štýlu písania v OOP
Roman Beno
romanbeno273 na gmail.com
Neděle Leden 13 11:30:01 CET 2013
Ahoj,
ten problém s if __name__ ... co si opisoval som vyriešil takto:
if __name__=="__main__":
instancia=PrikazovyRiadok()
instancia.proces()
elif __name__!="__main__":
instancia=PrikazovyRiadok()
proces=instancia.proces
Neviem či je to dobré, ale osvedčilo, ked som chcel importovat metody z
PrikazovehoRiadka,
Roman
Dňa 13. január 2013 10:45, rajcze <rajcze na gmail.com> napísal(-a):
> Co se dodrzovani PEP8 tyka: Use pyling, Luke! <
> http://pypi.python.org/pypi/pylint>
> Na druhou stranu, je potreba si uvedomit, ze pylint je nacek, a prebrat si
> co ktera chybova hlaska znamena (samozrejme to jde nastavit tak, aby se
> urcity typ chyb nehlasil, atd.)
>
> _Vzdy_ prosim pouzivej new-style classes, tj. PrikazovyRiadok(object).
> Nema to zadne nevyhody, a prinasi to spoustu vyhod (ty sice zatim mozna
> neocenis, ale jednou se ti budou jiste hodit) <
> http://realmike.org/blog/2010/07/18/introduction-to-new-style-classes-in-python/
> >
>
> Ad if __name__ == "__main__": z praktickeho hlediska je _temer vzdy_
> nespravne mit vykonny kod mimo tenhle blok, a v tomhle pripade to plati
> obzvlast. Duvod je jednoduchy - predstav si, ze tam ten __main__ blok
> nemas, a rozhodnes se tenhle soubor importovat jako knihovnu (protoze z
> nejakeho duvodu chces pouzivat tridu PrikazovyRiadok. Pri importovani
> modulu pak Python "vykona" celou tu knihovnu, a pak ti zpristupni symboly.
> Tedy v tomhle pripade (pokud bys nemel volani te metody proces v __main__
> bloku) by se ti pri importu spustila metoda proces a zacala poskytovat
> "prikazovy radek". Coz asi neni to co by clovek pri importu cekal.
>
> Joza
>
>
> 2013/1/13 Roman Beno <romanbeno273 na gmail.com>
>
>> Dobrý den,
>> tento štýl by mohol vyhovovat?
>>
>>
>> #! /usr/bin/python3
>>
>> # -*- coding: utf-8 -*-
>>
>> from os import getcwd,system
>>
>>
>>
>> class PrikazovyRiadok:
>> """Trieda pracujúca ako príkazový riadok."""
>>
>> def proces(self):
>> """"Metóda umožňujúca zadávanie príkazov cez os.system a
>> os.getcwd"""
>> while True:
>> self.prikaz=str(input("Zadajte príkaz alebo 0 pre ukončenie:
>> "))
>> # Zadaj lubovolný príkaz. Ten sa vo forme výstupu z input()
>> # neskor stane argumentom os.system alebo os.getcwd
>> if self.prikaz=="0":
>> break
>> # ak však napíšete 0, zoberie si program, že chcete skončit
>> if self.prikaz.startswith("cd"):
>> getcwd(self.prikaz)
>> continue
>> # mám dojem, že os.system() sa nevztahuje napríkaz cd. Preto
>> dostal
>> # priestor príkaz os.getcwd() v prípade, že sa self.prikaz
>> začina
>> # na cd
>> system(self.prikaz)
>> # ked sme ešte cyklus nezačali znova, alebo neskončili, spln
>> # konečne ten príkaz
>>
>>
>>
>> ##############################################################################
>> if __name__=="__main__":
>> instancia=PrikazovyRiadok()
>> instancia.proces()
>>
>> Nie som si istý, či je dobré dať vytvorenie instancie a volanie metódy do
>> if__name__...
>>
>> Ďakujem za odpoveď
>>
>>
>> Dňa 12. január 2013 21:51, Jan Bednařík <jan.bednarik na gmail.com>napísal(-a):
>>
>> Rád bych ti poradil konkrétněji, ale tím že nedodržuješ PEP8 a
>>> nestandardně mícháš různé způsoby zápisu kódu dohromady (CamelCase v
>>> zázvech proměnných apod.), je ten tvůj kód na první pohled nepřehledný,
>>> alespoň já to tak vnímám. A těžko se to luští.
>>>
>>> Nicméně rozhodně by ses měl vyvarovat importování hvězdiček (from
>>> tkinter import *). Měl bys mít přehled o tom co importuješ - měl bys
>>> konkrétně importovat jen třídy, funkce, atd., které používáš.
>>>
>>> Definování funkcí uvnitř metod je myslím taky na pováženou - měl by si
>>> spíše využít pomocné metody. Jak si sám napsal, rozkouskování pro
>>> zpřehlednění programu určitě neuškodí - přehlednost a srozumitelnost by
>>> měla být na prvním místě, protože až se k tomu kódu budeš někdy vracet,
>>> oceníš, když se v něm snadno zorientuješ.
>>>
>>> Ono to rozkouskování na metody a funkce je hlavně otázka citu a
>>> zkušeností, které nabereš časem. Případně se zkus přiučit čtením zdrojových
>>> kódů nějakých větších open-source projektů.
>>>
>>>
>>> 2013/1/12 Roman Beno <romanbeno273 na gmail.com>
>>>
>>>> Dobrý den,
>>>>
>>>> zmienený dokument som už prezeral.
>>>> Ako editor používam Stany Python editor, a pri kopírovaní sa kód mohol
>>>> trošku zdeformovat (na zarovnanie, zalomenia riadkov atd)..
>>>>
>>>> V mojej otázke som mal viac na mysli, či je vhodné písat jednu velkú
>>>> metódu bez atribútov ako program, prípadne viac metód na rozkúskovanie a
>>>> trochu sprehladnenie programu, resp. sa snažit aby čast kódu pri vytváranií
>>>> instancie triedy (čiže už za dokončením definície triedy) bola čo
>>>> najstručnejšia?
>>>>
>>>> Tieto konkrétne informácie som bohužial zatial nikde nenašiel :-(
>>>> Ďakujem za odpoved
>>>>
>>>>
>>>> Dňa 12. január 2013 18:23, Jan Bednařík <jan.bednarik na gmail.com>napísal(-a):
>>>>
>>>> Ahoj,
>>>>>
>>>>> v prvé řadě bych doporučil nastudovat si PEP-8, což je doporučení
>>>>> (de-facto standard) jak psát kód v Pythonu.
>>>>> http://www.python.org/dev/peps/pep-0008/
>>>>>
>>>>> Honza
>>>>>
>>>>>
>>>>>
>>>>> 2013/1/12 Roman Beno <romanbeno273 na gmail.com>
>>>>>
>>>>>> <http://programujte.com/anonymni-profil/170094/>
>>>>>>
>>>>>> Dobrý deň,
>>>>>>
>>>>>> chcel by som sa spýtať na váš názor ohľadne môjho štýlu písania
>>>>>> programov v OOP.
>>>>>> Rád prijmem akukolvek kritiku, mojim cielom je sa v tomto ohľade
>>>>>> zlepšit a v tejto oblasti som si nie som príliš istý.
>>>>>>
>>>>>> Tu sú ukážky mojich kódov:
>>>>>>
>>>>>> # -*- coding: utf-8 -*-
>>>>>> #################Definícia triedy#######################
>>>>>> class Fibonacci:
>>>>>> "Fibonacciho trieda"
>>>>>> def __init__(self,a=0,b=1,pocet_cisiel=10,default=0):
>>>>>> "Vyrobíme stavebný materiál pre fibonaccciho postupnosť."
>>>>>> self.a=a
>>>>>> self.b=b
>>>>>> self.pocet_cisiel=pocet_cisiel
>>>>>> self.default=default
>>>>>> def proces(self):
>>>>>> print(self.a,self.b,end=" ")
>>>>>> while True:
>>>>>> self.a=(self.a+self.b)
>>>>>> self.default+=1
>>>>>> if self.default>=self.pocet_cisiel:
>>>>>> print("\n")
>>>>>> break
>>>>>> print(self.a,end=" ")
>>>>>> # postupnost bude a,b,a,b,a,b... tento blok je pre všetky
>>>>>> a
>>>>>> self.b=(self.a+self.b)
>>>>>> self.default+=1
>>>>>> if self.default>=self.pocet_cisiel:
>>>>>> print("\n")
>>>>>> break
>>>>>> print(self.b,end=" ")
>>>>>> # a tento pre všetky b
>>>>>> #################Hlavný program##########################
>>>>>> MojaInstancia=Fibonacci(pocet_cisiel=20)
>>>>>> MojaInstancia.proces()
>>>>>>
>>>>>>
>>>>>> ************************************************************************************************************
>>>>>> Tu je další:
>>>>>>
>>>>>> # -*- coding: utf-8 -*-
>>>>>> # program Záznamník adries
>>>>>> # tréning Tkinter + OOP
>>>>>> # autor JA, dnes
>>>>>> # ver. 1.0
>>>>>> # * opravená chyba pri vytvárani poľa pre zadávaní adresy, použitá
>>>>>> neexistujúca farba okna
>>>>>> # * opravená chyba pri vytváraní tlačítka ukončujúceho okno
>>>>>> zadávania, použitý neexistujúci názov prvku
>>>>>> # * zmenené umiestnenie a veľkosť tlačítka pre zavretie okna pri
>>>>>> pridávaní adries
>>>>>> # ver. 1.1
>>>>>> # * opravená chyba pri potvrdení voľby mena pri pridávaní mena,
>>>>>> použitá neexistujúca premenná
>>>>>> # * opravená chyba pri potvrdení voľby mena pri pridávaní adresy,
>>>>>> použitá neexistujúca premenná
>>>>>> # ver. 1.2
>>>>>> # * polia pre zadávaní mena aj adresy sa po zadaní oboch údajov teraz
>>>>>> vymažú (ich hodnota)m
>>>>>> # uživatel ich teraz nemusí zadávať sám
>>>>>> # * opravená chyba pri načítaní údajov zo zoznamu, použitá
>>>>>> neexistujúca premenná
>>>>>> # ver. 1.2.1
>>>>>> # * opravená chyba pri zobrazovaní načítaných údajov,použitá
>>>>>> neexistujúca premenná
>>>>>> # ver. 1.3
>>>>>> # * opravená chyba pri vytváraní tlačítka na zavretie okna načítania
>>>>>> údajov, použitá neexistujúca
>>>>>> # premenná
>>>>>> # * opravená chyba pri zobrazovaní načítaných údajov (druhá chyba v
>>>>>> tomto), použitá neexistujúca premenná
>>>>>> # * zmenený text niektorých tlačítok v úvodnom menu
>>>>>> # * v popisku okna sa teraz zobrazuje aj aktuálna verzia programu
>>>>>> # ver. 1.3.1
>>>>>> # * pri načítaní údajov upravená oddelovacia čiara údajov
>>>>>> # * zmenené rozmery tlačítka ukončujúceho okno načítania údajov
>>>>>> # ver. 1.3.2
>>>>>> # * v okne ukladania súboru zmenená farba informačného textu na
>>>>>> prehľadnejšiu
>>>>>> # * opravená chyba pri ukladaní súborov, použitá neexistujúca premenná
>>>>>> # ver. 1.4
>>>>>> # * opravená chyba pri ukladaní súborov, použitá ďalšia neexistujúca
>>>>>> premenná
>>>>>> # * zmenená farba riadku pre chybové hlásenia v okne ukladania dát na
>>>>>> prirodzenú bledomodrú
>>>>>> # * pridaná možnosť odstránenia položiek zo zoznamu
>>>>>>
>>>>>> from tkinter import *
>>>>>> import sys
>>>>>> import os
>>>>>>
>>>>>> class Zaznamnik:
>>>>>> "Toto je trieda môjho záznamníku"
>>>>>>
>>>>>> def __init__(self):
>>>>>> self.hlavneOkno=Tk()
>>>>>> self.hlavneOkno.title("Záznamník, Ver. 1.4")
>>>>>> self.adresy=[]
>>>>>> self.zoznamMena=[]
>>>>>>
>>>>>> def program(self):
>>>>>> "Táto časť programu bude mať za úlohu čisto len grafiku
>>>>>> hlavného menu (nie logiku)."
>>>>>>
>>>>>> self.HOuvodnypopisokLabel=Label(self.hlavneOkno,bg="lightblue",text="Vitajte
>>>>>> v mojom záznamníku adries.\nDúfam, že sa vám bude páčiť.")
>>>>>> self.HOuvodnypopisokLabel.grid(row=0,column=0,sticky=W+E+N+S)
>>>>>> # uvodny popisok - label - ktorý nás privíta v programe
>>>>>>
>>>>>> self.HOtlacitkoZadavatAdresy=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Pridať
>>>>>> adresy do záznamníka")
>>>>>>
>>>>>> self.HOtlacitkoZadavatAdresy.grid(row=1,column=0,sticky=W+E+N+S)
>>>>>> # tlačítko, ktoré by malo umožniť zadávanie adries
>>>>>>
>>>>>> self.HOtlacitkoOdstranitAdresy=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Odstrániť
>>>>>> adresu zo záznamníka")
>>>>>>
>>>>>> self.HOtlacitkoOdstranitAdresy.grid(row=2,column=0,sticky=W+E+N+S)
>>>>>> # tlačítko, ktoré by malo umožniť odstránenie adries
>>>>>>
>>>>>> self.HOtlacitkoUlozit=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Uložiť
>>>>>> do súboru")
>>>>>> self.HOtlacitkoUlozit.grid(row=3,column=0,sticky=W+E+N+S)
>>>>>> # tlačítko, ktoré by malo umožnit uloženie do súboru
>>>>>>
>>>>>> self.HOtlacitkoNacitat=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Načítať
>>>>>> dáta zo zoznamu")
>>>>>> self.HOtlacitkoNacitat.grid(row=4,column=0,sticky=W+E+N+S)
>>>>>> # tlačítko, ktoré by malo umožniť načítanie dát zo súboru
>>>>>>
>>>>>> self.HOtlacitkoNapoveda=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Zobrazenie
>>>>>> nápovedy")
>>>>>> self.HOtlacitkoNapoveda.grid(row=5,column=0,sticky=W+E+N+S)
>>>>>> # tlačítko, ktoré by malo zobraziť nápovedu
>>>>>>
>>>>>> self.HOtlacitkoUkoncit=Button(self.hlavneOkno,bg="lightblue",activebackground="lightgreen",text="Ukončiť
>>>>>> program",command=self.hlavneOkno.quit)
>>>>>> self.HOtlacitkoUkoncit.grid(row=6,column=0,sticky=W+E+N+S)
>>>>>> # tlačítko, ktoré by malo ukončiť program
>>>>>>
>>>>>> def zadavanie_adries():
>>>>>> "Táto časť bude zachytávať logiku programu. Kvoli velkému
>>>>>> rozsahu rozdelenú na niekoľko častí. Konkrétne zadávanie adries."
>>>>>> # prvá časť tejto funkcie
>>>>>> # vzhľad podokna na zadávanie
>>>>>> self.OknoZadavanie=Toplevel()
>>>>>> self.OknoZadavanie.title("Zadávanie adries")
>>>>>>
>>>>>> self.OknoZadavanieLabel=Label(self.OknoZadavanie,bg="lightblue",text="
>>>>>> Aktuálna činnosť: Zadávanie adries \nPre potvrdenie údaju z
>>>>>> okna stlačte ENTER.\n")
>>>>>>
>>>>>> self.OknoZadavanieLabel.grid(row=0,column=0,columnspan=4,sticky=W+E+N+S)
>>>>>> # Vytvorenie podokna na zadávanie adries, nastavený
>>>>>> titulok + úvodný Label
>>>>>> self.VarPPCH=StringVar()
>>>>>>
>>>>>> self.OknoZadavanieLabelChybHlasky=Label(self.OknoZadavanie,bg="lightblue",textvariable=self.VarPPCH)
>>>>>>
>>>>>> self.OknoZadavanieLabelChybHlasky.grid(row=1,column=0,columnspan=4,sticky=W+E+N+S)
>>>>>> # Vytvorená textová premenná pre prípadné chybové hlášky.
>>>>>> Pre začiatok sa bude tváriť ako
>>>>>> # neviditeľná súčasť okna
>>>>>>
>>>>>> self.RamecZadajMeno=Frame(self.OknoZadavanie,bd=3,bg="lightblue")
>>>>>>
>>>>>> self.RamecZadajMeno.grid(row=2,column=0,columnspan=4,sticky=W+E+N+S)
>>>>>> self.VarPZM=StringVar()
>>>>>> # Vytvorený rámec pre zadanie mena + popisok k nemu.
>>>>>> Taktiež premenná pre políčko
>>>>>> # pre vstup
>>>>>>
>>>>>> self.RamecPopisokPola=Label(self.RamecZadajMeno,text="Zadajte meno
>>>>>> dotyčného:",bg="lightblue")
>>>>>> self.RamecPopisokPola.grid(row=2,column=0,sticky=W+E+N+S)
>>>>>>
>>>>>> self.PolePreVstupMena=Entry(self.RamecZadajMeno,bg="lightyellow",textvariable=self.VarPZM,font="Arial
>>>>>> 8")
>>>>>>
>>>>>> self.PolePreVstupMena.grid(row=2,column=1,columnspan=3,sticky=W+E+N+S)
>>>>>> # Vytvorený popisok pre pole pre vstup + políčko samotné
>>>>>>
>>>>>> self.RamecZadajAdresu=Frame(self.OknoZadavanie,bd=4,bg="lightblue")
>>>>>>
>>>>>> self.RamecZadajAdresu.grid(row=3,column=0,columnspan=4,sticky=W+E+N+S)
>>>>>>
>>>>>> self.LabelPreDruhePole=Label(self.RamecZadajAdresu,bg="lightblue",text="Zadajte
>>>>>> adresu dotyčného: ")
>>>>>> self.LabelPreDruhePole.grid(row=3,column=0,sticky=W+E+N+S)
>>>>>> self.VarPPA=StringVar()
>>>>>>
>>>>>> self.PolePreAdresu=Entry(self.RamecZadajAdresu,bg="lightyellow",textvariable=self.VarPPA,font="Arial
>>>>>> 8")
>>>>>> self.PolePreAdresu.grid(row=3,column=1,columnspan=3)
>>>>>> # Vytvorený rámec pre zadanie adresy, popis pre neho,
>>>>>> premennú pre neho a taktiež pole
>>>>>> # samé.
>>>>>>
>>>>>> self.ZadavacieTlacitkoUkoncit=Button(self.OknoZadavanie,bg="lightblue",activebackground="lightgreen",command=self.OknoZadavanie.destroy,text="Zavrieť
>>>>>> toto okno")
>>>>>>
>>>>>> self.ZadavacieTlacitkoUkoncit.grid(row=4,column=0,columnspan=4,sticky=W+E+N+S)
>>>>>> self.OverovaciToken=0
>>>>>> # Vytvorené tlačítko pre zavretie tohto okna pre zadanie
>>>>>> adresy.
>>>>>> def enter(BoloStlacene):
>>>>>> BoloStlacene.widget.configure(state=DISABLED)
>>>>>> self.udajMeno=str(self.PolePreVstupMena.get())
>>>>>> self.OverovaciToken+=1
>>>>>> if self.OverovaciToken==2:
>>>>>> self.PolePreVstupMena.configure(state=NORMAL)
>>>>>> self.PolePreAdresu.configure(state=NORMAL)
>>>>>> self.zoznamMena.append(self.udajMeno)
>>>>>> self.VarPZM.set("")
>>>>>> self.VarPPA.set("")
>>>>>>
>>>>>> self.adresy.append([self.udajMeno,self.udajAdresu])
>>>>>> self.OverovaciToken=0
>>>>>> # funkcia, čo sa má stať po zdarnom zadaní informácie do
>>>>>> políčka Meno. Dané políčko
>>>>>> # sa disabluje, údaj z neho sa uloží. + špecialita
>>>>>> overovací token. Ak dosiahne hodnotu 2,
>>>>>> # program zistí, že má spravit ďalšiu "obrátku" pri
>>>>>> pridávaní do zoznamu
>>>>>> def entri(StlaceneBolo):
>>>>>> StlaceneBolo.widget.configure(state=DISABLED)
>>>>>> self.udajAdresu=str(self.PolePreAdresu.get())
>>>>>> self.OverovaciToken+=1
>>>>>> if self.OverovaciToken==2:
>>>>>> self.PolePreVstupMena.configure(state=NORMAL)
>>>>>> self.PolePreAdresu.configure(state=NORMAL)
>>>>>> self.zoznamMena.append(self.udajMeno)
>>>>>> self.VarPZM.set("")
>>>>>> self.VarPPA.set("")
>>>>>>
>>>>>> self.adresy.append([self.udajMeno,self.udajAdresu])
>>>>>> self.OverovaciToken=0
>>>>>> # táto funkcia zase slúži na definovanie činnosti políčka
>>>>>> Adresy. Zapíše údaj
>>>>>> # do zoznamu a disabluje políčko. Malo by to zabezpečiť
>>>>>> zadávanie.
>>>>>> self.PolePreVstupMena.bind("<Return>",enter)
>>>>>> self.PolePreAdresu.bind("<Return>",entri)
>>>>>> # čo sa má stať po stlačení Entrov v rôznych okienkach
>>>>>>
>>>>>> def nacitanie_dat():
>>>>>> "Táto funkcia by mala zabezpečiť zobrazenie, resp.
>>>>>> načítanie dát zo zoznamu."
>>>>>> self.OknoNacitanie=Toplevel()
>>>>>> self.OknoNacitanie.title("Načítanie dát")
>>>>>> # vytvorené vlastné okno pre načítanie dát, kde by sa
>>>>>> teoreticky mali zobrazovať
>>>>>> # dáta uložené v zozname adries
>>>>>>
>>>>>> self.oknoNacitanieZobrazenie=Label(self.OknoNacitanie,bg="lightblue",text="")
>>>>>> self.oknoNacitanieZobrazenie.grid(row=0,column=0)
>>>>>>
>>>>>> self.premenna="""\tMená\t\tAdresy\n***************************************\n"""
>>>>>> if len(self.adresy)==0:
>>>>>> self.oknoNacitanieZobrazenie.configure(text="Zoznam
>>>>>> je prázdny.")
>>>>>> else:
>>>>>> for p in self.adresy:
>>>>>> self.coNacitaj="\t{0}\t\t{1}\n".format(p[0],p[1])
>>>>>> self.premenna+=self.coNacitaj
>>>>>>
>>>>>> self.oknoNacitanieZobrazenie.configure(text=self.premenna)
>>>>>> # toto by malo zabezpečiť zdarné zobrazovanie položiek
>>>>>> zoznamu
>>>>>>
>>>>>>
>>>>>> self.tlacitkoUkoncitON=Button(self.OknoNacitanie,bg="lightblue",activebackground="lightgreen",text="Zavrieť
>>>>>> toto okno",command=self.OknoNacitanie.destroy)
>>>>>> self.tlacitkoUkoncitON.grid(row=1,column=0,sticky=N+S+E+W)
>>>>>> # toto tvorí tlačítko, ktoré by mohlo zavrieť okno
>>>>>>
>>>>>> def ulozenie_do_suboru():
>>>>>> "Toto má na starosti zdarné uloženie dát do súboru.
>>>>>> Trošku nám pomôže predošlá funkcia, načítanie dát."
>>>>>> self.OknoUlozenie=Toplevel()
>>>>>> self.OknoUlozenie.title("Uloženie do súboru")
>>>>>>
>>>>>> self.OknoUlozenieLabelVyber=Label(self.OknoUlozenie,text="Vyberte meno
>>>>>> súboru, do ktorého chcete uložiť dáta zo súboru.",bg="lightblue")
>>>>>>
>>>>>> self.OknoUlozenieLabelVyber.grid(row=0,column=0,columnspan=2,sticky=W+E+N+S)
>>>>>> # vytvorené ukladacie okno, nastavený popisok pre neho +
>>>>>> popisok pre políčko pre zadanie mena ukladacieho súboru
>>>>>> self.OUPPV=StringVar()
>>>>>>
>>>>>> self.OUPolePreVstup=Entry(self.OknoUlozenie,bg="lightyellow",font="Arial
>>>>>> 8",textvariable=self.OUPPV)
>>>>>>
>>>>>> self.OUPolePreVstup.grid(row=0,column=2,columnspan=2,sticky=W+E+N+S)
>>>>>> # pole, kam môžeme zadávať samotný názov súboru
>>>>>>
>>>>>> self.OUPosudzovaciaHlaska=Label(self.OknoUlozenie,bg="lightblue",text="")
>>>>>>
>>>>>> self.OUPosudzovaciaHlaska.grid(row=1,column=0,columnspan=4,sticky=W+E+N+S)
>>>>>> # tu sa vypíš prípadná chybová hláška, v závislosti od
>>>>>> toho, čo zadáme do zmieneného políčka
>>>>>> def entricek(ppv):
>>>>>> self.result=str(self.OUPolePreVstup.get())
>>>>>> if len(self.result)==0:
>>>>>>
>>>>>> self.OUPosudzovaciaHlaska.configure(text="Nezadali ste meno žiadneho
>>>>>> súboru.")
>>>>>> self.OUPPV.set("")
>>>>>> return
>>>>>> # ak ste nezadali nič, tak vypíše hlášku, znuluje
>>>>>> hodnotu pola a zavrie funkciu
>>>>>> if len(self.adresy)==0:
>>>>>> self.OUPosudzovaciaHlaska.configure(text="Zoznam
>>>>>> adries je prázdny.")
>>>>>> self.OUPPV.set("")
>>>>>> return
>>>>>> # podobné ako v predchádzajúcom prípade, ibaže ak je
>>>>>> zoznam adries prázdny
>>>>>> self.subor=open(self.result,"wt")
>>>>>> try:
>>>>>> self.subor.write(self.premenna)
>>>>>> except:
>>>>>> self.OUPosudzovaciaHlaska.configure(text="Zatial
>>>>>> ste nenačítali žiadne dáta. Urobte tak cez hlavné menu.")
>>>>>> self.subor.close()
>>>>>> self.OUPPV.set("")
>>>>>> return
>>>>>> # stale je možnost že uživatel nenačítal
>>>>>> požadované dáta na vloženie
>>>>>> self.OUPosudzovaciaHlaska.configure(text="Zatial ste
>>>>>> nenačítali žiadne dáta. Urobte tak cez hlavné menu.")
>>>>>> self.subor.close()
>>>>>> self.OUPolePreVstup.configure(state=DISABLED)
>>>>>> # toto sa stane v pripade že chyba nenastala,
>>>>>> self.OknoUlozenie.bind("<Return>",entricek)
>>>>>>
>>>>>> self.OUTlacitkoZavri=Button(self.OknoUlozenie,bg="lightblue",activebackground="lightgreen",text="Zavrieť
>>>>>> toto okno",command=self.OknoUlozenie.destroy)
>>>>>>
>>>>>> self.OUTlacitkoZavri.grid(row=2,column=0,columnspan=4,sticky=W+E+N+S)
>>>>>> # urobené tlačítko, ktoré zavrie okno
>>>>>>
>>>>>> def odstranenie_poloziek():
>>>>>> "Odstránenie jedného záznamu zo zoznamu adries a mien"
>>>>>> self.OknoOdstranenie=Toplevel()
>>>>>> self.OknoOdstranenie.title("Odstranenie poloziek")
>>>>>> self.OOpripravenytext=[]
>>>>>> # vytvorené okno odstránenia, nastavený popisok +
>>>>>> náradíčko = prázdny zoznam
>>>>>> for x in self.zoznamMena:
>>>>>> self.OOpripravenytext.append(x)
>>>>>>
>>>>>> self.OOodstranenieLabel=Label(self.OknoOdstranenie,bg="lightblue",text="Vyberte
>>>>>> si položku zoznamu,ktorú\nchcete odstrániť:")
>>>>>> self.OOodstranenieLabel.grid(row=0,column=0)
>>>>>> # pripraví zoznam položiek pre neskoršie odstranovanie +
>>>>>> vytvorenie labelu na odstranenie
>>>>>> # položky
>>>>>> self.OOPPO=StringVar()
>>>>>>
>>>>>> self.OOPolePreOdstranenie=Entry(self.OknoOdstranenie,bg="lightyellow",textvariable=self.OOPPO,font="Arial
>>>>>> 8")
>>>>>>
>>>>>> self.OOPolePreOdstranenie.grid(row=0,column=1,columnspan=2,sticky=W+E+S+N)
>>>>>>
>>>>>> self.OOLabelChybovaHlaska=Label(self.OknoOdstranenie,bg="lightblue",text="")
>>>>>>
>>>>>> self.OOLabelChybovaHlaska.grid(row=1,column=0,columnspan=3,sticky=W+E+S+N)
>>>>>> # samotné políčko, kam možete zadat meno položky (meno
>>>>>> konk.osoby, ktorú chcete odstrániť
>>>>>> def stlacil_entri(gangnam):
>>>>>> coBoloStlacenee=str(self.OOPolePreOdstranenie.get())
>>>>>> if coBoloStlacenee in self.zoznamMena:
>>>>>>
>>>>>> indexCoBoloStlacenee=self.zoznamMena.index(coBoloStlacenee)
>>>>>> else:
>>>>>>
>>>>>> self.OOLabelChybovaHlaska.configure(text="Neexistujúce meno.")
>>>>>> self.OOPPO.set("")
>>>>>> del self.adresy[indexCoBoloStlacenee]
>>>>>> del
>>>>>> self.zoznamMena[self.zoznamMena.index(coBoloStlacenee)]
>>>>>> self.OOPPO.set("")
>>>>>> # zoberieme to z políčka pre vstup, ak je v zozname
>>>>>> mien, odstrán z oboch zoznamov
>>>>>> # ak nie, vyhod chybove hlasky. Samozrejmostou je
>>>>>> nasledne premazanie policka
>>>>>> self.OOPolePreOdstranenie.bind("<Return>",stlacil_entri)
>>>>>>
>>>>>> self.OOZavriOkno=Button(self.OknoOdstranenie,bg="lightblue",activebackground="lightgreen",text="Zavrieť
>>>>>> toto okno",command=self.OknoOdstranenie.destroy)
>>>>>>
>>>>>> self.OOZavriOkno.grid(row=2,column=0,columnspan=3,sticky=W+E+S+N)
>>>>>> # zabezpečená akcia pre pole pre vstup po stlačení Enteru.
>>>>>> # vytvorené tlačítko na zavretie okna
>>>>>>
>>>>>>
>>>>>> self.HOtlacitkoNacitat.configure(command=nacitanie_dat)
>>>>>> self.HOtlacitkoUlozit.configure(command=ulozenie_do_suboru)
>>>>>>
>>>>>> self.HOtlacitkoZadavatAdresy.configure(command=zadavanie_adries)
>>>>>>
>>>>>> self.HOtlacitkoOdstranitAdresy.configure(command=odstranenie_poloziek)
>>>>>>
>>>>>> self.hlavneOkno.mainloop()
>>>>>>
>>>>>> #########################################################
>>>>>>
>>>>>> inst=Zaznamnik()
>>>>>> inst.program()
>>>>>>
>>>>>> Ďakujem za akúkolvek odpoved
>>>>>>
>>>>>> _______________________________________________
>>>>>> Python mailing list
>>>>>> Python na py.cz
>>>>>> http://www.py.cz/mailman/listinfo/python
>>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Python mailing list
>>>>> Python na py.cz
>>>>> http://www.py.cz/mailman/listinfo/python
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Python mailing list
>>>> Python na py.cz
>>>> http://www.py.cz/mailman/listinfo/python
>>>>
>>>
>>>
>>> _______________________________________________
>>> Python mailing list
>>> Python na py.cz
>>> http://www.py.cz/mailman/listinfo/python
>>>
>>
>>
>> _______________________________________________
>> Python mailing list
>> Python na py.cz
>> http://www.py.cz/mailman/listinfo/python
>>
>
>
>
> --
> Rules of Optimization:
> Rule 1: Don't do it.
> Rule 2 (for experts only): Don't do it yet.
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20130113/142afaa3/attachment.html>
Další informace o konferenci Python