Az alábbi kódrészlet egy Tkinterrel készült gui-s (grafikus felületű) alkalmazás menüjének legenerálását végzi. Ugyanezt a megoldást alkalmaztam a szótanuló programocskámban, ott bevált:
#!/usr/env/python
# -*- coding: utf-8 -*-
# menüdemo Tkinterrel by sipiatti
from Tkinter import *
class Alkalmazas():
"""Az alkalmazás osztály"""
def __init__(self,frame):
"""Indul az alkalmazás"""
# beállítjuk az alkalmazás toplevel frame-jét
self.frame=frame
self.frame.title('Szótanuló')
# menüelemek listakonténere. a menügenerátor ebből dolgozik. ha változtatni kell
# egyszerűen a listát kell módosítani. szerkezete: [[menüpont neve,[[menüparancs neve, futtatandó metódus]]]]
self.menuelemek=[['menu1',
[['almenu1',self.semmi],
['almenu2',self.semmi],
['almenu3',self.semmi],
['almenu4',self.semmi]]],
['menu2',
[['almenu1',self.semmi],
['almenu2',self.semmi]]]]
# létrehozzuk a menüsávot és csatoljuk az ablakhoz
self.menusav_letrehoz()
self.frame.config(menu=self.menusav)
self.cimke=Label(self.frame,text="Ez egy címke, nem kell semmire",font=("", "24"),fg="darkred")
self.cimke.pack()
def menusav_letrehoz(self):
"""Főmenü generáló függvény"""
self.menusav=Menu(self.frame)
for elem in self.menuelemek:
almenu=Menu(self.menusav,tearoff=0)
for almenuelem in elem[1]:
almenu.add_command(
label=almenuelem[0],command=almenuelem[1])
self.menusav.add_cascade(label=elem[0],menu=almenu)
def semmi(self):
"""Mivel ez csak demó, a menüparancsokra történő kattintás
nem csinál semmit, azaz pont hogy azt csinál :)"""
print "semmi sem történik :)"
# gyökér frame létrehozása
root=Tk()
# alkalmazás példány létrehozása
app=Alkalmazas(root)
# indulás
app.frame.mainloop()
A lényeg a két for cikluson van, amik végig lépkednek az átadott listák elemein. Az ilyen megoldások hallatlanul rugalmassá teszik a kódunkat, illetve ezeket könnyedén fel tudjuk használni más programjainkban is, ami nagyon fontos, mert időt tudunk spórolni a fejlesztéshez.
UI: a szótanulót, ami tulajdonképpen nekem egy ismerkedés volt a Tkinterrel, le lehet tölteni innen
Nincsenek megjegyzések:
Megjegyzés küldése