Python TkInter a tvorba tlačítek

pist

Python TkInter a tvorba tlačítek
« kdy: 09. 03. 2011, 22:02:25 »
Zdravím,

Potřebuji vytvořit několik stejných buttonů a příjde mi nepraktické je vypisovat všechny zvlášť viz následující kód:
Kód: [Vybrat]
self.btn1= Button(self.fr, width=4, height=1)
self.btn1.grid(row=0, column=0)
self.btn2 = Button(self.fr, width=4, height=1)
self.btn2.grid(row=0, column=1)
                .
                .
                .
self.btnX = Button(self.fr, width=4, height=1)
self.btnX.grid(row=0, column=X)

zkoušel jsem to řešit cyklem:
Kód: [Vybrat]
for i in range(13):
      self.btn+str(i) = Button(self.fr, width=4, height=1)
      self.btn+str(i).grid(row=0, column=i)

Bohužel mi to vyhodilo chybu.
Jde to řešit nějakým podobným způsobem nebo musím vypisovat každé tlačítko zvlášť?

Děkuji za odpovědi
« Poslední změna: 10. 03. 2011, 21:07:04 od Petr Krčmář »


jj

Re: Python Tkinter
« Odpověď #1 kdy: 09. 03. 2011, 22:16:09 »
for i in range(13):
      vars()['btn%s % i] = Button(self.fr, width=4, height=1)
      eval('btn%s' % i).grid(row=0, column=i)


ale je to humus teda...  :D

Inkvizitor

Re: Python Tkinter
« Odpověď #2 kdy: 09. 03. 2011, 22:56:46 »
Těch možností je víc. Například není nutné ty buttony ukládat do samostatných instančních proměnných, ale lze je uložit do seznamu.

Nebo něco jako

Kód: [Vybrat]
self.setattr('btn%u' % i, Button(self.fr, width=4, height=1))
self.getattr('btn%u' % i).grid(row=0, column=i)

Inkvizitor

Re: Python Tkinter
« Odpověď #3 kdy: 09. 03. 2011, 22:58:07 »
Syntakticky to mám blbě, ale jako návod by to mělo stačit.