Akarok csinalni egy kis python programot aminek van GUI-ja... vagyis inkabb csak "GUI", mert nagyon egyszeru. Pythonban kezdo vagyok... de nem ez a gond, hanem, hogy GUI-t meg sosem csinaltam, abban abszolut nem vagyok kepben. (GUI alatt Linux dextopon mukodo grafikus interface-t ertek most)
Nagyon egyszeru dologrol lenne szo. Amikor a program elindul, dobjon fel egy menut amibol valasztani lehet. De nem kell igazi window, meg becsuk gomb es egyebek, csak egy popup menu nehany elemmel (mintha csak jobb gombbal kattintanank), ha valaszt valamit akkor a GUI be is csukodhat, a tobbit megoldom (persze azt tudnom kell mire kattintott a user).
Minek olvassak utana? A python GUI-ra keresve hamar a wxwidget-be botlottam ami szimpatikus, de nagyon komplikalt ahhoz kepest ami nekem kell. Van egyszerubb mod, vagy kenytelen leszek a wx-nek rendesen utanaolvasni? Az tetszik a wxwidget-ben, hogy nincs a pythonhoz drotozva, mashol is jol johet meg ha ezt hasznalom. A wx+python+popup+menu kereses meg csupa olyan lehetoseget ad, ahol van window is es azon belul csinalnak egy menut. De nekem a window nem kell!
A teljes megoldast tartalmazo minta kodokat is szivesen latok a jotanacsok mellett. ;)
--------------------------------------------------------------------------------
Update (2013.08.08.)
A szamomra eppen megfelelo tk-ra epulo megoldas Lajatol:
from Tkinter import *
root = Tk()
def hello():
print "hello!"
root.destroy()
# create a popup menu
menu = Menu(root, tearoff=0)
menu.add_command(label="Undo", command=hello)
menu.add_command(label="Redo", command=hello)
menu.post(100, 100)
root.withdraw()
root.mainloop()
--------------------------------------------------------------------------------
Update 2 (2013.08.12.)
Akadt meg egy kis bajom. A fenti szuperul mukodik... csakhogy a menuket dinamikusan generalom a hozza tartozo commandoknak meg parametere van, valami ilyesmi (lenne):
for one in list:
menu.add_command(label=one, command=hello(one)) # WRONG!
Ez igy persze nem megy... kicsit modositva mar legalabb fut, de meg mindig nem jo:
for one in list:
menu.add_command(label=one, command=lambda:hello(one))
Aki a lambda-t nalam jobban erti, annak bizos leesett, ami nekem csak sok probalkozas utan.... hogy ez igy annyira dinamikus, hogy a "one" csak a hivas pillanataban helyettesitodik be, akkor meg persze a "list" utolso eleme lesz mar az erteke, szoval az osszes menuelem, ugyanazt a hello(legutolso elem a list-bol) hivast hajtja vegre.
Hogy lehetne ezt normalisan lekezelni? Vagy ha az ennyire dinamikus parameter atadas nem megy, akkor a "hello" fuggvenybol hogyan tudnam lekerdezni, hogy melyik menu elemre kattintott a user?
--------------------------------------------------------------------------------
Update 3 (2013.08.12.)
Laja nagyon porog, erre a problemara is szallitotta a megoldast:
for one in myList:
menu.add_command(label=one, command=lambda one=one: hello(one))
--------------------------------------------------------------------------------
Update 4 (2013.08.21.)
Koszi meg egyszer mindenkinek. Ez lett belole:
hup.hu: blog/traktor: BrowserSelector
Meg van mit rajta mit csiszolni, de az mar foleg nem a GUI lesz. A GUI-val most mar csak annyi bajom van, hogy nem lesz aktiv a menu amikor felugrik (nem kap fokuszt), igy a billentyuzet nem mukodik raja (le, fel, enter, shortcut-ok), de ez mar aprosag es remelem majd megoldom.