Objektově orientované programování – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Objektově orientované programování – Python – Fórum – Programujte.comObjektově orientované programování – Python – Fórum – Programujte.com

 

to_jsem_ja0
Stálý člen
12. 2. 2007   #1
-
0
-

zdravím,
Pokouším se v pythonu udělat objektově orientovaný kódér či dekódér textu v GUI. Bohužel mi to zatím nejde a já absolutně nevím v čem je problém, tak jestli bude mít někdo tu trpělivost, podívá se na to a poradí mi, budu vděčný:))

z důvodu přehlednosti odstraněno

háže mi to chybu
  File "C:\Python25\programy\koder_objektovany.py", line 9

self.vybuduj()
^
SyntaxError: invalid syntax

jenomže na stránce kde jsem čerpal-http://www.skil.cz/python/ (v menu dejte případová studie)-to tak mají a funguje jim to

Nahlásit jako SPAM
IP: ...–
geon0
Grafoman
12. 2. 2007   #2
-
0
-

na předchozím řádku jsi neuzavřel závorku ;-)

Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
to_jsem_ja0
Stálý člen
13. 2. 2007   #3
-
0
-

To geon:ups. překlep. opravil jsem to. díky za upozornění. ale stále to nefunguje. ještě jsem to dočasně zjednodušil takže to vypadá takto:

# -*- coding: cp1250 -*-

from Tkinter import*

class aplikace(Frame):
def __init__(self, rodic=0):
Frame.__init__(self, rodic)
self.type = 1
self.master.title(unicode("kódér", "cp1250"))
self.vybuduj()

def kodovat(text):
kodovany=""""""
for x in text:
znak=chr(ord(x)+1)
#znak=str(znak)
kodovany+=znak
self.txtBox.insert(kodovany)

def dekodovat(text):
kodovany=""""""
for x in text:
znak=chr(ord(x)-1)
#znak=str(znak)
kodovany+=znak
self.txtBox.insert(kodovany)


def vymaz(self):
exit()

def vybuduj(self):
ram=Frame(self)

pisem=Frame(ram,borderwidth=1, relief=SUNKEN)
self.txtBox=Text(self, width=60, height=10)
self.txtBox.pack
text=self.txtBox.get(1.0, END)

tlacitka=Frame(ram)
self.kod=Button(tlacitka, text=unicode("kóduj","cp1250"), command=self.kodovat())
self.kod.pack()
self.dekod=Button(tlacitka, text=unicode("dekóduj","cp1250"), command=self.dekodovat())
self.dekod.pack()
self.vypni=Button(tlacitka, text=unicode("Ukonči","cp1250"), comand=self.vymaz())
self.vypni.pack()

program=aplikace()
program.mainloop()

a háže to chybu:
Traceback (most recent call last):

File "C:\Python25\programy\koder_objektovany(uprava).py", line 48, in <module>

program=aplikace()
File "C:\Python25\programy\koder_objektovany(uprava).py", line 9, in __init__
self.vybuduj()
File "C:\Python25\programy\koder_objektovany(uprava).py", line 41, in vybuduj
self.analyzuj=Button(tlacitka, text=unicode("kˇduj","cp1250"), command=self.
kodovat())
File "C:\Python25\programy\koder_objektovany(uprava).py", line 14, in kodovat
for x in text:
File "C:\Python25\lib\lib-tk\Tkinter.py", line 1201, in cget
return self.tk.call(self._w, 'cget', '-' + key)
TypeError: cannot concatenate 'str' and 'int' objects

což znamená že nemám kombinovat "str" a "int" řetězce, ale nevím jak se toho zbavit.

Nahlásit jako SPAM
IP: ...–
Jakub Vojáček
~ Moderátor
0
Grafoman
13. 2. 2007   #4
-
0
-

používat global ve třídě? se mi nezdá úplně optimální...
místo:



text=unicode("Ukonči","cp1250")

stačí:


text=u"Ukonči"

pak je chyba tady:


comand=self.vymaz()

Tkinter ru funkci zavolá před vytvořením tlačítka a konkrétně funkce vymaz vrací None. Takže k tlačítku nebude přiřazený příkaz. Takže takle by to bylo správně...


command=self.vymaz

tohle ti taky nebude fungovat:


self.txtBox.insert(kodovany)

protože když něco vkládáš do Text, musíš určit kam se to vloží, takžře třeba INSERT,END.1.0 atd...


self.txtBox.insert(END,kodovany)

máš tam špatný odsazení atd...
teď když opravíš tyhle chyby tak snad zvládneš opravit proč ti to háže tu chybu jak si ukazoval.
já bych volal funkce kodocat a dekodovat bez parameru, jenom s self. Potom by ta funkce mohla vypadat nějak takto:


def dekodovat(self):
kodovany=""
for x in self.txtBox.get(1.0,END):
znak=chr(ord(x)-1)
kodovany=kodovany+znak
self.txtBox.delete(0,END)#smaze celej obsah
self.txtBox.insert(END,kodovany)#vlozi vysledek do textu

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
to_jsem_ja0
Stálý člen
13. 2. 2007   #5
-
0
-

To Blujacker:díky moc. opravil jsem to, pak jsem opravil ještě asi deset chyb a už to funguje:))

Nahlásit jako SPAM
IP: ...–
to_jsem_ja0
Stálý člen
13. 2. 2007   #6
-
0
-

zkusil jsem to převést do exe a nejde to. setup.py mám určitě správný(stejný jako jsem použil už hodněkrát a pokaždé fungoval), ale po převedení to nefunguje. nemůže to být chyba py2exe?

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 23 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý