problem with tkinter

max(01)* max2 at fisso.casa
Wed Mar 30 04:33:35 EST 2005


Pierre Quentel wrote:
> Instead of indexing self.lab by strings, you can index them by the 
> attributes themselves : self.lab[self.i], and change line 23 into
> 
>      for var in (self.s, self,i)
> 
> For your example, I wouldn't have used the "text" option in the 
> definition of the labels, then "textvariable" in the callback method 
> (procedi) ; I would have used only "text" and no IntVar or StringVar, 
> just an integer and a string :
> 
> class MiaApp:
>     def __init__(self, genitore):
>        self.mioGenitore = genitore
>        self.i = 42
>        self.s = "Baobab"
>        self.lab = {}
>        self.lab[self.i] = Label(self.mioGenitore)
>        self.lab[self.i].configure(width = 30, relief = RIDGE,
>          text = "[vuota]")
>        self.lab[self.i].pack()
>        self.lab[self.s] = Label(self.mioGenitore)
>        self.lab[self.s].configure(width = 30, relief = RIDGE,
>          text = "[vuota]")
>        self.lab[self.s].pack()
>        self.but = Button(self.mioGenitore)
>        self.but.configure(text = "Vai!", command = self.procedi)
>        self.but.pack()
>     def procedi(self):
>        for var in (self.i, self.s):
>          self.lab[var].configure(text = var)
> 
> Regards,
> Pierre

hi pierre.

i don't think this would not have worked as expected (by me). in my 
intentions, the text of the label must be slaved to a variable, so that 
it would change dynamically during the mainloop execution if another 
part of the code had chenged the content of the variable.

maybe here is a more convincing example (the previous one was contrived 
too hastily i guess):

       1 from Tkinter import *
       2
       3 class MiaApp:
       4     def __init__(self, genitore):
       5        self.mioGenitore = genitore
       6        self.var = {0: 42, 1: "Baobab"}
       7        self.lab = {}
       8        self.lab[0] = Label(self.mioGenitore)
       9        self.lab[0].configure(width = 30, relief = RIDGE,
      10          text = "[vuota]")
      11        self.lab[0].pack()
      12        self.lab[1] = Label(self.mioGenitore)
      13        self.lab[1].configure(width = 30, relief = RIDGE,
      14          text = "[vuota]")
      15        self.lab[1].pack()
      16        self.but = Button(self.mioGenitore)
      17        self.but.configure(text = "Vai!", command = self.procedi)
      18        self.but.pack()
      19        self.but2 = Button(self.mioGenitore)
      20        self.but2.configure(text = "Torna!", command = 
self.procedi2)
      21        self.but2.pack()
      22     def procedi(self):
      23        for var in self.lab.keys():
      24          self.lab[var].configure(text = self.var[var])
      25     def procedi2(self):
      26        self.var[0] = 24
      27        self.var[1] = "Cactus"
      28
      29 radice = Tk()
      30 miaApp = MiaApp(radice)
      31 radice.mainloop()

in this example, when user presses "Torna!", the labels are not updated 
as i expect; they only will be when user presses "Vai!" again (not what 
i want).

thanks again

macs



More information about the Python-list mailing list