67 lines
2.1 KiB
Python
67 lines
2.1 KiB
Python
#!/usr/bin/python
|
|
"""\
|
|
@file messageframe.py
|
|
@author Nat Goodspeed
|
|
@date 2013-01-03
|
|
@brief Define MessageFrame class for popping up messages from a command-line
|
|
script.
|
|
|
|
$LicenseInfo:firstyear=2013&license=viewerlgpl$
|
|
Copyright (c) 2013, Linden Research, Inc.
|
|
$/LicenseInfo$
|
|
"""
|
|
|
|
import Tkinter as tk
|
|
import os
|
|
|
|
# Tricky way to obtain the filename of the main script (default title string)
|
|
import __main__
|
|
|
|
# This class is intended for displaying messages from a command-line script.
|
|
# Getting the base class right took a bit of trial and error.
|
|
# If you derive from tk.Frame, the destroy() method doesn't actually close it.
|
|
# If you derive from tk.Toplevel, it pops up a separate Tk frame too. destroy()
|
|
# closes this frame, but not that one.
|
|
# Deriving from tk.Tk appears to do the right thing.
|
|
class MessageFrame(tk.Tk):
|
|
def __init__(self, text="", title=os.path.splitext(os.path.basename(__main__.__file__))[0],
|
|
width=320, height=120):
|
|
tk.Tk.__init__(self)
|
|
self.grid()
|
|
self.title(title)
|
|
self.var = tk.StringVar()
|
|
self.var.set(text)
|
|
self.msg = tk.Label(self, textvariable=self.var)
|
|
self.msg.grid()
|
|
# from http://stackoverflow.com/questions/3352918/how-to-center-a-window-on-the-screen-in-tkinter :
|
|
self.update_idletasks()
|
|
|
|
# The constants below are to adjust for typical overhead from the
|
|
# frame borders.
|
|
xp = (self.winfo_screenwidth() / 2) - (width / 2) - 8
|
|
yp = (self.winfo_screenheight() / 2) - (height / 2) - 20
|
|
self.geometry('{0}x{1}+{2}+{3}'.format(width, height, xp, yp))
|
|
self.update()
|
|
|
|
def set(self, text):
|
|
self.var.set(text)
|
|
self.update()
|
|
|
|
if __name__ == "__main__":
|
|
# When run as a script, just test the MessageFrame.
|
|
import sys
|
|
import time
|
|
|
|
frame = MessageFrame("something in the way she moves....")
|
|
time.sleep(3)
|
|
frame.set("smaller")
|
|
time.sleep(3)
|
|
frame.set("""this has
|
|
several
|
|
lines""")
|
|
time.sleep(3)
|
|
frame.destroy()
|
|
print "Destroyed!"
|
|
sys.stdout.flush()
|
|
time.sleep(3)
|