HELP: Tkinter idiom needed

Discussion in 'Python' started by Pekka Niiranen, Jan 1, 2005.

  1. Hi there,

    after reading TkInter/thread -recipe:
    http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/82965
    I wondered if it was possible to avoid using threads
    for the following problem:

    I have script started from W2K console that normally
    prints ascii messages to the screen. However, I have
    command line "debug" -flag that might cause printing
    of UTF-8 data to the screen. This fails occassionally
    due to Console encoding, of course.

    What I need is Tkinter window where some printouts
    are directed when script is run in Debug -mode
    (Redirection of stdout is out of question).

    While testing, I have got this far already:

    ---script starts----

    from Tkinter import *
    from ScrolledText import ScrolledText
    import os, sys, tkFont, codecs

    class Pyg_message_box:
    def __init__(self, parent):
    self.myParent = parent
    self.myContainer1 = Frame(parent)
    self.myContainer1.option_add("*font",\
    tkFont.Font(family="Arial Unicode MS", size=8))
    self.myContainer1.pack()
    self.text = ScrolledText()
    self.text.pack()
    self.button1 = Button(self.myContainer1, text="Quit",\
    command=self.button1Click)
    self.button1.pack(side=LEFT)
    self.button1.bind("<Button-1>", self.button1Click)

    def button1Click(self, event):
    self.myContainer1.quit()

    def write(self, s):
    self.text.insert(END, s)

    root = Tk()
    widget = Pyg_message_box(root)
    sys.stdout = widget
    a = codecs.open("d:\\test.txt", "r", "utf_16").readlines()
    for x in a:
    print x
    root.mainloop()

    ---script ends----

    My questions are:
    - Can I open Tk -window without enclosing the whole script
    between "root=Tk()" and "root.mainloop()"?
    - What is the idiom of opening Tk -window only when Debug -flag
    is encountered (the script stops running until window is closed)?

    Something like:

    if not my_debug == "ON":
    print "message" # prints to console
    else:
    # 1) open temporary ScrolledText() Tk -window
    # 2) Print stuff to window
    # 3) Ask user to close window

    I would no like to always open Tkwindows just in case user runs script
    with debug -flag on.

    -pekka-
     
    Pekka Niiranen, Jan 1, 2005
    #1
    1. Advertising

  2. Re: HELP: Tkinter idiom needed: SOLUTION

    Hi there,

    got it. Note the root.distroy()-command.

    -pekka-

    ----- CODE STARTS ----

    from Tkinter import *
    from ScrolledText import ScrolledText
    import tkFont

    class Message_box:
    # Graphical message box for printing unicode texts

    def __init__(self, myParent):
    self.myContainer1 = Frame(myParent)
    self.myContainer1.pack(side=TOP, expand=1, fill=BOTH)
    self.button1 = Button(self.myContainer1)
    self.button1["text"]= "Close"
    self.button1.pack(side=BOTTOM)
    self.button1.bind("<Button-1>", self.button1Click)
    self.font = tkFont.Font(family="Arial Unicode MS", size=8)
    self.text = ScrolledText(self.myContainer1, font=self.font,\
    state=NORMAL, height=40, width=120, wrap=NONE)
    self.text.pack(side=TOP, expand=1, fill=BOTH)

    def button1Click(self, event):
    self.myContainer1.quit()

    def write(self,s):
    self.text.insert(END, s)

    def enable_write(self):
    self.text.config(state=NORMAL)

    def disable_write(self):
    self.text.config(state=DISABLED)


    if __name__ == '__main__':
    # first window
    root = Tk()
    print "blah1"
    root.title(' Message window')
    root.protocol("WM_DELETE_WINDOW", NONE)
    widget = Message_box(root)
    m = "blah2"
    widget.write("%s\n" % m)
    widget.disable_write()
    root.mainloop()
    root.destroy()
    print "blah3"
    # second window
    root = Tk()
    root.title(' Message window')
    root.protocol("WM_DELETE_WINDOW", NONE)
    widget = Message_box(root)
    m = "blah4"
    widget.write("%s\n" % m)
    widget.disable_write()
    root.mainloop()
    root.destroy()
    print "blah5"

    ----- CODE ENDS ----

    Pekka Niiranen wrote:
    > Hi there,
    >
    > after reading TkInter/thread -recipe:
    > http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/82965
    > I wondered if it was possible to avoid using threads
    > for the following problem:
    >
    > I have script started from W2K console that normally
    > prints ascii messages to the screen. However, I have
    > command line "debug" -flag that might cause printing
    > of UTF-8 data to the screen. This fails occassionally
    > due to Console encoding, of course.
    >
    > What I need is Tkinter window where some printouts
    > are directed when script is run in Debug -mode
    > (Redirection of stdout is out of question).
    >
    > While testing, I have got this far already:
    >
    > ---script starts----
    >
    > from Tkinter import *
    > from ScrolledText import ScrolledText
    > import os, sys, tkFont, codecs
    >
    > class Pyg_message_box:
    > def __init__(self, parent):
    > self.myParent = parent
    > self.myContainer1 = Frame(parent)
    > self.myContainer1.option_add("*font",\
    > tkFont.Font(family="Arial Unicode MS", size=8))
    > self.myContainer1.pack()
    > self.text = ScrolledText()
    > self.text.pack()
    > self.button1 = Button(self.myContainer1, text="Quit",\
    > command=self.button1Click)
    > self.button1.pack(side=LEFT)
    > self.button1.bind("<Button-1>", self.button1Click)
    >
    > def button1Click(self, event):
    > self.myContainer1.quit()
    >
    > def write(self, s):
    > self.text.insert(END, s)
    >
    > root = Tk()
    > widget = Pyg_message_box(root)
    > sys.stdout = widget
    > a = codecs.open("d:\\test.txt", "r", "utf_16").readlines()
    > for x in a:
    > print x
    > root.mainloop()
    >
    > ---script ends----
    >
    > My questions are:
    > - Can I open Tk -window without enclosing the whole script
    > between "root=Tk()" and "root.mainloop()"?
    > - What is the idiom of opening Tk -window only when Debug -flag
    > is encountered (the script stops running until window is closed)?
    >
    > Something like:
    >
    > if not my_debug == "ON":
    > print "message" # prints to console
    > else:
    > # 1) open temporary ScrolledText() Tk -window
    > # 2) Print stuff to window
    > # 3) Ask user to close window
    >
    > I would no like to always open Tkwindows just in case user runs script
    > with debug -flag on.
    >
    > -pekka-
     
    Pekka Niiranen, Jan 3, 2005
    #2
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jeff Epler
    Replies:
    0
    Views:
    513
    Jeff Epler
    Aug 20, 2004
  2. Jeff Epler
    Replies:
    0
    Views:
    460
    Jeff Epler
    Aug 23, 2004
  3. pekka niiranen
    Replies:
    1
    Views:
    320
    Duncan Booth
    Oct 11, 2004
  4. ishtar2020
    Replies:
    2
    Views:
    854
    Jim Segrave
    Apr 7, 2006
  5. Brandon

    dictionary idiom needed

    Brandon, Dec 11, 2008, in forum: Python
    Replies:
    6
    Views:
    224
    Brandon
    Dec 11, 2008
Loading...

Share This Page