Hi All, I wrote a small turn delivering graphical app that is supposed to display turns in a queue.
If I instantiate the class and call its methods, thus displaying strings in several canvases, from the interactive prompt, everything works fine. If I do it when running the script as a programs, nothing gets displayed. If I call mainloop() at the end of my program, everything gets displayed, but then I cannot use my own function classes. This program will never respond to events, but just get called from a "queue manager" script for display... Here's the code: #!/usr/bin/env python from __future__ import division import Tkinter import tkFont from Tkconstants import * from time import sleep class TurnQueue(Tkinter.Frame): def __init__(self, master=None, pw=60, ph=60, panels=4): self.ph = ph self.pw = pw self.panels = panels Tkinter.Frame.__init__(self, master) self.createWidgets() self.pack() def createWidgets(self): """Create four canvases and a warning window.""" self.canvases = [Tkinter.Canvas(height=self.ph, width=self.pw, borderwidth=1, background = '#FFFFFF') for i in range(self.panels)] self.textbox_ids = [] # display them all, initialized for i in self.canvases: id = i.create_text(self.pw//2, self.ph//2, text='', font=('bitstream charter', self.ph, 'bold'), fill='red') self.textbox_ids.append(id) i.pack() def write_panel(self, panel_no, newtext): """writepanel(self, panel, newtext) Set panel <panel> to text <newtext>""" self.canvases[panel_no].itemconfigure(self.textbox_ids[panel_no], text=newtext) def read_panel(self, panel_no): """textcontents <- read_panel(self, panel_no) Read panel text contents""" return(self.canvases[panel_no].itemcget(self.textbox_ids[panel_no], 'text')) def insert(self, turn_string): """Insert a new turn into the queue, move the rest upwards, delete oldest.""" current_values = [self.read_panel(i) for i in range(len(self.canvases))] next_values = current_values[:] next_values[:-1] = current_values[1:] next_values[-1] = turn_string # update all panel values for i in range(len(self.canvases)): self.write_panel(i, next_values[i]) if __name__ == "__main__": myturns = TurnQueue(pw=200, ph=100, panels=4) for i in range(100): myturns.insert(str(i)) sleep(0.2) _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor