symbian-qemu-0.9.1-12/python-2.6.1/Demo/tkinter/guido/dialog.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #! /usr/bin/env python
       
     2 
       
     3 # A Python function that generates dialog boxes with a text message,
       
     4 # optional bitmap, and any number of buttons.
       
     5 # Cf. Ousterhout, Tcl and the Tk Toolkit, Figs. 27.2-3, pp. 269-270.
       
     6 
       
     7 from Tkinter import *
       
     8 import sys
       
     9 
       
    10 
       
    11 def dialog(master, title, text, bitmap, default, *args):
       
    12 
       
    13     # 1. Create the top-level window and divide it into top
       
    14     # and bottom parts.
       
    15 
       
    16     w = Toplevel(master, class_='Dialog')
       
    17     w.title(title)
       
    18     w.iconname('Dialog')
       
    19 
       
    20     top = Frame(w, relief=RAISED, borderwidth=1)
       
    21     top.pack(side=TOP, fill=BOTH)
       
    22     bot = Frame(w, relief=RAISED, borderwidth=1)
       
    23     bot.pack(side=BOTTOM, fill=BOTH)
       
    24 
       
    25     # 2. Fill the top part with the bitmap and message.
       
    26 
       
    27     msg = Message(top, width='3i', text=text,
       
    28                   font='-Adobe-Times-Medium-R-Normal-*-180-*')
       
    29     msg.pack(side=RIGHT, expand=1, fill=BOTH, padx='3m', pady='3m')
       
    30     if bitmap:
       
    31         bm = Label(top, bitmap=bitmap)
       
    32         bm.pack(side=LEFT, padx='3m', pady='3m')
       
    33 
       
    34     # 3. Create a row of buttons at the bottom of the dialog.
       
    35 
       
    36     var = IntVar()
       
    37     buttons = []
       
    38     i = 0
       
    39     for but in args:
       
    40         b = Button(bot, text=but, command=lambda v=var,i=i: v.set(i))
       
    41         buttons.append(b)
       
    42         if i == default:
       
    43             bd = Frame(bot, relief=SUNKEN, borderwidth=1)
       
    44             bd.pack(side=LEFT, expand=1, padx='3m', pady='2m')
       
    45             b.lift()
       
    46             b.pack (in_=bd, side=LEFT,
       
    47                     padx='2m', pady='2m', ipadx='2m', ipady='1m')
       
    48         else:
       
    49             b.pack (side=LEFT, expand=1,
       
    50                     padx='3m', pady='3m', ipadx='2m', ipady='1m')
       
    51         i = i+1
       
    52 
       
    53     # 4. Set up a binding for <Return>, if there's a default,
       
    54     # set a grab, and claim the focus too.
       
    55 
       
    56     if default >= 0:
       
    57         w.bind('<Return>',
       
    58                lambda e, b=buttons[default], v=var, i=default:
       
    59                (b.flash(),
       
    60                 v.set(i)))
       
    61 
       
    62     oldFocus = w.focus_get()
       
    63     w.grab_set()
       
    64     w.focus_set()
       
    65 
       
    66     # 5. Wait for the user to respond, then restore the focus
       
    67     # and return the index of the selected button.
       
    68 
       
    69     w.waitvar(var)
       
    70     w.destroy()
       
    71     if oldFocus: oldFocus.focus_set()
       
    72     return var.get()
       
    73 
       
    74 # The rest is the test program.
       
    75 
       
    76 def go():
       
    77     i = dialog(mainWidget,
       
    78                'Not Responding',
       
    79                "The file server isn't responding right now; "
       
    80                "I'll keep trying.",
       
    81                '',
       
    82                -1,
       
    83                'OK')
       
    84     print 'pressed button', i
       
    85     i = dialog(mainWidget,
       
    86                'File Modified',
       
    87                'File "tcl.h" has been modified since '
       
    88                'the last time it was saved. '
       
    89                'Do you want to save it before exiting the application?',
       
    90                'warning',
       
    91                0,
       
    92                'Save File',
       
    93                'Discard Changes',
       
    94                'Return To Editor')
       
    95     print 'pressed button', i
       
    96 
       
    97 def test():
       
    98     import sys
       
    99     global mainWidget
       
   100     mainWidget = Frame()
       
   101     Pack.config(mainWidget)
       
   102     start = Button(mainWidget, text='Press Here To Start', command=go)
       
   103     start.pack()
       
   104     endit = Button(mainWidget, text="Exit", command=sys.exit)
       
   105     endit.pack(fill=BOTH)
       
   106     mainWidget.mainloop()
       
   107 
       
   108 if __name__ == '__main__':
       
   109     test()