Tkinter menügeneráló listával

Eredetileg a python listákról szóló 3. bejegyzésben írtam ezt, de a hozzászólások jogos megállapítása szerint ez inkább haladó téma. Aki ott elolvasta, annak ez nem újdonság, ugyanaz szerepel itt, ami ott volt

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