update of elements in GUI

J

Jah_Alarm

hi, I've already asked this question but so far the progress has been
small.

I'm running Tkinter. I have some elements on the screen (Labels, most
importantly) which content has to be updated every iteration of the
algorithm run, e.g. "Iteration =" for i in range(n), n=100. I'm
using the update_idletasks() command in the function itself after the
variable.set(...) command. The variable type is IntVar(), and the
mistake I'm getting is 'IntVar instance has no attribute
'update_idletasks'. No updates are displayed, of course.

Without the GUI the algorithm (it's a genetic algorithm) is working
fine, but I need to make it available to other people via GUI

cheers,

Alex
 
E

Eric Brunel

Jah_Alarm said:
hi, I've already asked this question but so far the progress has been
small.

I'm running Tkinter. I have some elements on the screen (Labels, most
importantly) which content has to be updated every iteration of the
algorithm run, e.g. "Iteration =" for i in range(n), n=100. I'm
using the update_idletasks() command in the function itself after the
variable.set(...) command. The variable type is IntVar(), and the
mistake I'm getting is 'IntVar instance has no attribute
'update_idletasks'. No updates are displayed, of course.


You have to call update_idletasks on a Tkinter *widget*, not a variable.
You can call it on your window (Tk or Toplevel instance) or on your
label for example. This way, it should work.
 
J

Jah_Alarm

thanks. The thing is, the objects actually get updated without this
command, but when I run the GUI outside of python shell (i.e. in
command prompt as python filename.py or compile it to .exe file) the
objects do not get updated. I tried
Label(mainframe,textvariable=var).grid(column=1,row=1).update_idletasks()
and mainframe.update_idletasks() but it still doesn't work.


 Jah_Alarm said:
hi, I've already asked this question but so far the progress has been
small.
I'm running Tkinter. I have some elements on the screen (Labels, most
importantly) which content has to be updated every iteration of the
algorithm run, e.g. "Iteration =" for i in range(n), n=100. I'm
using the update_idletasks() command in the function itself after the
variable.set(...) command. The variable type is IntVar(), and the
mistake I'm getting is 'IntVar instance has no attribute
'update_idletasks'. No updates are displayed, of course.


You have to call update_idletasks on a Tkinter *widget*, not a variable.
You can call it on your window (Tk or Toplevel instance) or on your
label for example. This way, it should work.


Without the GUI the algorithm (it's a genetic algorithm) is working
fine, but I need to make it available to other people via GUI

Alex
 
J

Jah_Alarm

In MATLAB this command is drawnow, just in case

thanks. The thing is, the objects actually get updated without this
command, but when I run the GUI outside of python shell (i.e. in
command prompt as python filename.py or compile it to .exe file) the
objects do not get updated. I tried
Label(mainframe,textvariable=var).grid(column=1,row=1).update_idletasks()
and mainframe.update_idletasks() but it still doesn't work.

<24dc97b3-a8b5-4638-9cf5-a397f1eae...@q16g2000prf.googlegroups.com>,
 Jah_Alarm said:
hi, I've already asked this question but so far the progress has been
small.
I'm running Tkinter. I have some elements on the screen (Labels, most
importantly) which content has to be updated every iteration of the
algorithm run, e.g. "Iteration =" for i in range(n), n=100. I'm
using the update_idletasks() command in the function itself after the
variable.set(...) command. The variable type is IntVar(), and the
mistake I'm getting is 'IntVar instance has no attribute
'update_idletasks'. No updates are displayed, of course.

You have to call update_idletasks on a Tkinter *widget*, not a variable..
You can call it on your window (Tk or Toplevel instance) or on your
label for example. This way, it should work.
 
E

Eric Brunel

(Top-post corrected; please don't do that, it makes messages very hard
to read via usenetŠ)

thanks. The thing is, the objects actually get updated without this
command, but when I run the GUI outside of python shell (i.e. in
command prompt as python filename.py or compile it to .exe file) the
objects do not get updated. I tried
Label(mainframe,textvariable=var).grid(column=1,row=1).update_idletasks()
and mainframe.update_idletasks() but it still doesn't work.

I think you're really misunderstanding something here: the call to
update_idletasks is a one shot call to the GUI to basically tell it to
refresh itself. So each time you change anything that should be
displayed, you have to call that method again, or your changes will only
be seen when the control returns to the GUI, which is basically at the
end of your processing.

The fact that it works when you're doing it interactively is normal. In
this mode, you don't have a GUI event loop running, so the GUI updates
itself all the time automatically. This is never true in programs you
run the 'normal' way, i.e via: python filename.py

And by the way, Label(Š).grid(Š).update_idletasks() had no chance to
work anyway: the grid method doesn't return anything, so you're trying
to call the update_idletasks method on None hereŠ

HTH
- Eric -
 
W

woooee

hi, I've already asked this question but so far the progress has been
small.

I'm running Tkinter. I have some elements on the screen (Labels, most
importantly) which content has to be updated every iteration of the
algorithm run, e.g. "Iteration =" for i in range(n), n=100. I'm
using the update_idletasks() command in the function itself after the
variable.set(...) command. The variable type is IntVar(), and the
mistake I'm getting is 'IntVar instance has no attribute
'update_idletasks'. No updates are displayed, of course.

Without the GUI the algorithm (it's a genetic algorithm) is working
fine, but I need to make it available to other people via GUI

cheers,

Alex


This program I had lying around and it will hopefully make things
clearer. The integer under the second label (i.e. the 3rd label)
increases by on every time you click the "Print Contents" button. The
variable associated with the second label and the entry box update as
you change the entry box's contents, all with no calls to
update_idletasks().
class EntryTest:
""" shows using the same StringVar in the second list box
and in the entry box
"""
def __init__(self):
self.top = Tkinter.Tk()
self.top.title("Test of Entry")
self.top.geometry("200x150+10+10")

self.str_1 = Tkinter.StringVar()
label_lit = Tkinter.StringVar()
self.int_lit = Tkinter.IntVar()

label_1 = Tkinter.Label(self.top, textvariable = label_lit )
label_1.pack()
label_lit.set( "Test of Label")

label_2 = Tkinter.Label(self.top, textvariable = self.str_1 )
label_2.pack()

label_3 = Tkinter.Label(self.top, textvariable =
self.int_lit )
label_3.pack()
self.int_lit.set(0)

entry_1 = Tkinter.Entry(self.top, textvariable=self.str_1)
entry_1.pack()
self.str_1.set( "Entry Initial Value" )

print_button = Tkinter.Button(self.top, text='PRINT CONTENTS',
command=self.getit, bg='blue', fg='white' )
print_button.pack(fill=Tkinter.X, expand=1)

exit_button= Tkinter.Button(self.top, text='EXIT',
command=self.top.quit, bg='red', fg='white' )
exit_button.pack(fill=Tkinter.X, expand=1)

entry_1.focus_set()
self.top.mainloop()

##-----------------------------------------------------------------
def getit(self) :
print "getit: variable passed =", self.str_1.get()
x = self.int_lit.get()
self.int_lit.set(x+1)


##===============================================================
if "__main__" == __name__ :
ET=EntryTest()
print "under __main__ =", ET.str_1.get()
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top