[python] Tkinter a OOP
Pavel Svobodník
pavel na svobodnik.cz
Čtvrtek Únor 8 21:16:33 CET 2007
Pavel Kosina napsal(a):
> Pavel Svobodník napsal(a):
>
>> Dobrý den, tak opět jsem narazil na jeden problém který nevím jak
>> vyřešit a tak jsem se rozhodl poprosit o pomoc
>> Mám program ve kterém mám různé funkce a do kterého importuju modul.py
>> ve kterém mám garfické rozhraní.
>> Toto grafické rozhraní bych chtěl udržovat odděleně ve vlastním modulu
>> od ostatního kódu.
>> Ale mám problém s tím jak donutit button OK k tomu aby zavolal funkci
>> test() v hlavním programu ne v importovaném modulu.
>> Děkuju za radu
>> Pavel Svobodník
>>
>> obsah modul.py
>> # -*- coding: utf-8 -*-
>> from Tkinter import *
>>
>> class rozhrani:
>> def __init__(self, master):
>> master.title("test")
>> def zpracuj(self, master):
>> prochazej=Button(master, text='OK', command=test)
>> prochazej.grid(row=0, column=0, sticky='w')
>> def test(self):
>> print "test gui"
>> if __name__=="__main__":
>> root = Tk()
>> app = rozhrani(root)
>> app.zpracuj(root)
>> root.mainloop()
>>
>>
>>
> Tak jednak máš v tomto programu chybu, která nedovolí jeho funkčnost.
> Bud musíš volat command=self.test, nebo def test vysunout ven z definice
> třídy (a odstranit self ze závorky).
toto jsem opravil
> Pokud to uděláš, bude to fungovat,
> ale stále jinak než chceš.
>
>> program do kterého modul importuju
>> # -*- coding: utf-8 -*-
>> from Tkinter import *
>> import modul
>>
>> root = Tk()
>> gui=modul.rozhrani(root)
>> gui.zpracuj(root)
>>
>> def test():
>> print "test v hlavnim programu"
>>
>>
>>
> Myslím, že budeš muset v tomto hlavním programu vytvořit novou třídu,
> která bude potomkem modul.rozhraní, a ve které přetypuješ funkci zpracuj
> (vlastně ji opíšeš). Když definici funkce test() dáš na začátek
> programu, mělo by ti fungovat, jako mně.
>
>
hlavní část programu jsem upravil takto, ale nerozumím tomu co bych si
pomohl když musím znova vytvořit funkci
zpracuj. to přece bude v modul.py zbytečně? nebo jsem to blbě pochopil
protože s OOP teprve začínám?
# -*- coding: utf-8 -*-
from Tkinter import *
import modul
def test():
print "test"
class x(modul.rozhrani):
def zpracuj(self, master):
prochazej=Button(master, text='OK', command=test)
prochazej.grid(row=0, column=0, sticky='w')
root = Tk()
gui=x(root)
gui.zpracuj(root)
> Pokud chceš ale důsledně oddělit grafiku od kodu, možná bys mohl místo
> command používat v hlavním modulu bind (+četné úpravy kodu).
>
tak toto budu muset ještě dostudovat
> Něco k tomu možná i na
> http://www.nabble.com/separation-gui-from-logic-t498927.html#a1354241 .
>
a toto taky
Pavel Svobodník
Další informace o konferenci Python