wm8ball.py.txt

#! /usr/bin/env python
""" Consult the magic 8 ball for all your decisions
This code is partially based on Robert Vollmert's wmdock.py
 (See description below)
"""
## wmdock -- a python module to create WindowMaker dockapps
## Copyright (C) 1999 Robert Vollmert <rvollmert@gmx.net>
## 
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
## 
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
## 
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""a simple module to program WindowMaker dock applications
This module contains one class, DockWindow. DockWindow is an extension
of Toplevel. It can be used to create a dock window WindowMaker (see
http://www.windowmaker.org/).
"""
VERSION = 0.6
import Tkinter, time, whrandom
# delay between map event of toplevel window and grouping
DELAY = 0.1
# used to centre icon window
ICONWIDTH = ICONHEIGHT = 64
# default maximum width/height
DEFWIDTH = DEFHEIGHT = 56
class DockWindow(Tkinter.Toplevel):
 """a window for the WindowMaker dock.
 This class implements a simple window for the WindowMaker dock. It
 does this by extending the basic Tkinter.Toplevel class. The
 Toplevel window becomes its own icon window. For it to be
 displayed, a toplevel window is created offscreen which,
 when mapped, adds itself to the icon windows group. It can then
 (after the icon window is mapped) safely be withdrawn and
 destroyed.
 methods:
 __init__ -- initialize instance
 setsize -- set the size of the iconwindow
 center -- center the icon window
 top_handle_map -- handle map event of the toplevel window
 dock_handle_map -- create appicon and destroy toplevel window
 """
 
 def __init__(self, master=None, width=None, height=None,
 *args, **kw):
 """initialize dockapp instance.
 keyword arguments:
 width, height -- initial width and height of window (equivalent
 to calling setsize(width, height)
 """
 apply(Tkinter.Toplevel.__init__, (self, master)+args, kw)
 self.iconwindow(self)
 
 self.center_when_mapped = 1
 if width is not None and height is not None:
 self.setsize(width, height)
 else:
 self.geometry("+%d+0" % ICONWIDTH)
 self.toplevel = Tkinter.Toplevel(self)
 self.toplevel.geometry('+%d+0' % self.winfo_screenwidth())
 self.toplevel.bind('<Map>', self.top_handle_map)
 self.dock_mapped = 0
 self.bind('<Map>', self.dock_handle_map)
 def setsize(self, width, height):
 """set window size and center
 """
 self.geometry("%dx%d+%d+%d" % (
 width, height, (ICONWIDTH-width)/2, (ICONHEIGHT-height)/2))
 self.center_when_mapped = 0
 def center(self):
 """center window (use only after map)
 """
 self.setsize(self.winfo_width(), self.winfo_height())
 def top_handle_map(self, event):
 """handle the map event of the toplevel window.
 """
 time.sleep(DELAY)
 self.toplevel.group(self)
 def dock_handle_map(self, event):
 """handle the first map event of the dock window
 """
 if not self.dock_mapped:
 self.dock_mapped = 1
 if self.center_when_mapped:
 self.center()
 self.toplevel.withdraw()
 self.toplevel.destroy()
 del self.toplevel
EIGHTBALLIMAGE = """
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
"""
def answer():
 # in, out, in, out, shake it all about
 for n in range(3):
 button8.config(relief=Tkinter.SUNKEN)
	root.update_idletasks()
	time.sleep(0.05)
 button8.config(relief=Tkinter.RAISED)
	root.update_idletasks()
	time.sleep(0.05)
 buttonanswer.config(text=whrandom.choice(answers))
 button8.lower()
 
def ball():
 buttonframe.lower()
def main():
 global root
 root = Tkinter.Tk()
 root.withdraw()
 dock = DockWindow(name='8ball', class_='8ball')
 global img
 img = Tkinter.PhotoImage(data=EIGHTBALLIMAGE) #file="8ball.gif")
 global button8
 button8 = Tkinter.Button(dock, image=img, command=answer)
 button8.grid(row=0,column=0)
 global buttonanswer
 global buttonframe
 buttonframe = Tkinter.Frame(dock, height=60, width=60)
 buttonframe.pack_propagate(0) # don't shrink
 buttonanswer = Tkinter.Button(buttonframe, text="init", command=ball, wraplength=60)
 buttonanswer.pack(fill=Tkinter.BOTH, expand=1)
 buttonframe.grid(row=0,column=0,sticky=Tkinter.W+Tkinter.E+Tkinter.S+Tkinter.N)
 buttonframe.lower()
 global answers
 answers = [
 'Signs point to yes.',
 'Yes.',
 'Reply hazy, try again.',
 'Without a doubt.',
 'My sources say no.',
 'As I see it, yes.',
 'You may rely on it.',
 'Outlook not so good.',
 'It is decidedly so.',
 'Better not tell you now.',
 'Very doubtful.',
 'Yes - definitely.',
 'It is certain.',
 'Cannot predict now.',
 'Most likely.',
 'Ask again later.',
 'My reply is no.',
 'Outlook good.',
 'Don\'t count on it.']
 root.mainloop()
if __name__ == '__main__':
 main()

AltStyle によって変換されたページ (->オリジナル) /