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 _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python