Assuming you have tkinter installed as part of your Python distribution,
I have attached a demo (courtesy of Mark Hammond) that shows much of
what is possible (e.g., menus, buttons, etc.).
Hope this helps.
-- jv
habtamu gulilat wrote:
am habtamu from Netherlands
I need to prepare userinterface for my Arc GIS model created by
Modelbuilder. I want my userinterface to run my model. So would uyou
please send me those syntax able me to create simple python based user
interface to run my Model.
If possible would you please send me some examples of userinterface by
python.
Thank you
habtamu
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
------------------------------------------------------------------------
_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32
#!/usr/bin/env python
import sys, re, string
from Tkinter import *
from ScrolledText import ScrolledText
class Demo(Frame):
def __init__(self, master):
Frame.__init__(self, master, relief=RAISED, bd=2)
l = Label(self, text=self.label, font=('Helvetica', 12, 'italic
bold'),
background='dark slate blue',
foreground='white')
l.pack(side=TOP, expand=NO, fill=X)
class ReliefDemo(Demo):
label = 'Relief types: Label widgets with 2d/3d borders'
def __init__(self, master):
Demo.__init__(self, master)
for relief in [RAISED, SUNKEN, RIDGE, GROOVE, FLAT, SOLID]:
l = Label(self, text=relief, relief=relief, bd=4)
l.pack(side=LEFT, expand=YES, fill=BOTH,
padx=4, pady=4, ipadx=4, ipady=4)
class OptionDemo(Demo):
label = 'OptionMenu:'
def __init__(self, master):
Demo.__init__(self, master)
f = Frame(self)
Label(f, text='Justify').pack(side=LEFT)
op = OptionMenu(f, app.justifyVar, 'left', 'center', 'right')
op.pack()
f.pack()
f = Frame(self)
Label(f, text='Fit to').pack(side=LEFT)
op = OptionMenu(f, app.sizeVar, 'minimum', 'maximum')
op.pack()
f.pack()
class CanvasDemo(Demo):
label = 'Canvas widget with simple animation:'
def __init__(self, master):
Demo.__init__(self, master)
self.canvas = Canvas(self, relief=SUNKEN, bd=2,
background='gray65',
width=100, height=100)
self.canvas.pack(side=TOP, expand=YES, fill=BOTH)
self.arc = self.canvas.create_arc(0,0, 1,1)
self.start, self.extent = 90,0
def configure(self, event=None):
fillColor = ''
if app.fillVar.get(): fillColor = app.colorVar.get()
outlineColor = ''
if app.outlineVar.get(): outlineColor = 'black'
self.canvas.itemconfigure(self.arc, style=app.styleVar.get())
self.canvas.itemconfigure(self.arc, fill=fillColor)
self.canvas.itemconfigure(self.arc, outline=outlineColor)
def animate(self):
w,h = self.canvas.winfo_width(), self.canvas.winfo_height()
if app.sizeVar.get() == 'minimum':
s = min(w,h)
else:
s = max(w,h)
if app.justifyVar.get() == 'left':
x0,x1 = 10, s-10
elif app.justifyVar.get() == 'center':
x0,x1 = (w-s+20)/2, (w+s-20)/2
else:
x0,x1 = w-s+10, w-10
y0, y1 = (h-s+20)/2, (h+s-20)/2
self.canvas.coords(self.arc, x0,y0, x1,y1)
self.start = self.start - app.animateSpeed1.get()
self.extent = self.extent - app.animateSpeed2.get()
self.canvas.itemconfigure(self.arc,start=self.start,extent=self.extent)
root.after(10, self.animate)
# A small collection (about 16%) of the colors found in the usual X11 color
# data base: .../lib/X11/rgb.txt
COLORS = ['snow', 'ghost white', 'white smoke', 'gainsboro', 'floral white',
'old lace', 'linen', 'antique white', 'papaya whip',
'blanched almond', 'bisque', 'peach puff', 'navajo white',
'moccasin', 'cornsilk', 'ivory', 'lemon chiffon', 'seashell',
'honeydew', 'mint cream', 'azure', 'alice blue', 'lavender',
'lavender blush', 'misty rose', 'white', 'black', 'dark slate
gray',
'dark slate grey', 'dim gray', 'dim grey', 'slate gray',
'slate grey', 'light slate gray', 'light slate grey', 'gray',
'grey', 'light grey', 'light gray', 'midnight blue', 'navy',
'navy blue', 'cornflower blue', 'dark slate blue', 'slate
blue',
'medium slate blue', 'light slate blue', 'medium blue',
'royal blue', 'blue', 'dodger blue', 'deep sky blue', 'sky
blue',
'light sky blue', 'steel blue', 'light steel blue', 'light
blue',
'powder blue', 'pale turquoise', 'dark turquoise',
'medium turquoise', 'turquoise', 'cyan', 'light cyan', 'cadet
blue',
'medium aquamarine', 'aquamarine', 'dark green', 'dark olive
green',
'dark sea green', 'sea green', 'medium sea green',
'light sea green', 'pale green', 'spring green', 'lawn green',
'green', 'chartreuse', 'medium spring green', 'green yellow',
'lime green', 'yellow green', 'forest green', 'olive drab',
'dark khaki', 'khaki', 'pale goldenrod', 'light goldenrod
yellow',
'light yellow', 'yellow', 'gold', 'light goldenrod',
'goldenrod',
'dark goldenrod', 'rosy brown', 'indian red', 'saddle brown',
'sienna', 'peru', 'burlywood', 'beige', 'wheat', 'sandy
brown',
'tan', 'chocolate', 'firebrick', 'brown', 'dark salmon',
'salmon',
'light salmon', 'orange', 'dark orange', 'coral', 'light
coral',
'tomato', 'orange red', 'red', 'hot pink', 'deep pink',
'pink',
'light pink', 'pale violet red', 'maroon', 'medium violet
red',
'violet red', 'magenta', 'violet', 'plum', 'orchid',
'medium orchid', 'dark orchid', 'dark violet', 'blue violet',
'purple', 'medium purple', 'thistle', 'dark grey', 'dark
gray',
'dark blue', 'dark cyan', 'dark magenta', 'dark red', 'light
green']
COLORS.sort(lambda a,b: cmp(string.split(a)[-1], string.split(b)[-1]))
class ListboxDemo(Demo):
label = 'Listbox, Entry, Button,\nand Scrollbar widgets:'
def __init__(self, master):
Demo.__init__(self, master)
e = Entry(self, textvariable=app.colorVar)
e.pack(side=TOP, fill=X)
e.bind('<Return>', self.enterColor)
b = Button(self, text='Select color', command=self.selectColor)
b.pack(side=BOTTOM, fill=X)
self.colorList = Listbox(self, height=6)
self.colorList.pack(side=LEFT, expand=YES, fill=BOTH)
for color in COLORS:
self.colorList.insert(AtEnd(), color)
self.colorList.selection_set(COLORS.index(app.colorVar.get()))
scrollbar = Scrollbar(self)
self.colorList.configure(yscrollcommand=(scrollbar, 'set'))
scrollbar.configure(command=(self.colorList, 'yview'))
scrollbar.pack(side=LEFT, fill=Y)
self.colorList.bind("<Double-Button-1>", self.selectColor)
def enterColor(self, event=None):
app.canvasDemo.configure()
def selectColor(self, event=None):
colorIndex = map(string.atoi,
app.listDemo.colorList.curselection())
if not colorIndex: return
app.colorVar.set(app.listDemo.colorList.get(colorIndex[0]))
app.canvasDemo.configure()
def Char(c): return '0.0+%d char' % c
def Options(**kw): return kw
class TextDemo(Demo):
label = 'Text widget displaying source with cheap syntax
highlighting:\n'+\
'(Move mouse over text and watch indent-structure
highlighting.)'
font = ('Courier', 10, 'normal')
bold = ('Courier', 10, 'bold')
Highlights = {'#.*': Options(foreground='red'),
r'\'.*?\'': Options(foreground='yellow'),
r'\bdef\b\s.*:':Options(foreground='blue',
spacing1=2),
r'\bclass\b\s.*\n':Options(background='pink',
spacing1=5),
r'\b(class|def|for|in|import|from|break|continue)\b':
Options(font=bold)
}
def __init__(self, master):
Demo.__init__(self, master)
self.text = ScrolledText(self, width=80, height=20,
font=self.font, background='gray65',
spacing1=1,
spacing2=1, tabs='24')
self.text.pack(side=TOP, expand=YES, fill=BOTH)
content = open(sys.argv[0], 'r').read()
self.text.insert(AtEnd(), content)
reg = re.compile('([\t ]*).*\n')
pos = 0
indentTags = []
while 1:
match = reg.search(content, pos)
if not match: break
indent = match.end(1)-match.start(1)
if match.end(0)-match.start(0) == 1:
indent = len(indentTags)
tagb = 'Tagb%08d' % match.start(0)
tagc = 'Tage%08d' % match.start(0)
self.text.tag_configure(tagc, background='',
relief=FLAT, borderwidth=2)
self.text.tag_add(tagb, Char( match.start(0)),
Char(match.end(0)))
self.text.tag_bind(tagb, '<Enter>',
lambda
e,self=self,tagc=tagc: self.Enter(tagc))
self.text.tag_bind(tagb, '<Leave>',
lambda
e,self=self,tagc=tagc: self.Leave(tagc))
del indentTags[indent:]
indentTags.extend( (indent-len(indentTags))*[None] )
indentTags.append(tagc)
for tag in indentTags:
if tag:
self.text.tag_add(tag,
Char(match.start(0)),
Char(match.end(0)))
pos = match.end(0)
for key,kw in self.Highlights.items():
self.text.tag_configure(key, cnf=kw)
reg = re.compile(key)
pos = 0
while 1:
match = reg.search(content, pos)
if not match: break
self.text.tag_add(key,
Char(match.start(0)),Char(match.end(0)))
pos = match.end(0)
def Enter(self, tag):
self.text.tag_raise(tag)
self.text.tag_configure(tag, background='gray80', relief=RAISED)
def Leave(self, tag):
self.text.tag_configure(tag, background='', relief=FLAT)
MessageText = '''All the controls in this block control some aspect of the
animation in the Canvas widget. Most should be self explanitory. To choose
the fill color, do one of (a) type a color name into the Entry widget and
RETURN, (b) select a color in the Listbox and hit "Select color" Button, or (c)
double-click a color in the Listbox.'''
class MessageDemo(Demo):
label = 'Message widget:'
def __init__(self, master):
Demo.__init__(self, master)
self.message = Message(self, text=MessageText)
self.message.pack(side=TOP, expand=YES, fill=BOTH)
self.message.bind('<Configure>', self.redoAspectRatio)
def redoAspectRatio(self, event=None):
w,h = self.message.winfo_width(), self.message.winfo_height()
self.message.configure(aspect=(100*w)/h)
class RadiobuttonDemo(Demo):
label = 'Radiobutton:'
def __init__(self, master):
Demo.__init__(self, master)
self.count = IntVar()
self.count.set(1)
Radiobutton(self, text='Pie Slice',
variable=app.styleVar, value='pieslice',
command=app.canvasDemo.configure).pack(anchor=W)
Radiobutton(self, text='Chord',
variable=app.styleVar, value='chord',
command=app.canvasDemo.configure).pack(anchor=W)
Radiobutton(self, text='Arc only',
variable=app.styleVar, value='arc',
command=app.canvasDemo.configure).pack(anchor=W)
class CheckbuttonDemo(Demo):
label = 'Checkbutton:'
def __init__(self, master):
Demo.__init__(self, master)
Checkbutton(self, text='Fill', variable=app.fillVar,
command=app.canvasDemo.configure).pack(anchor=W)
Checkbutton(self, text='Outline', variable=app.outlineVar,
command=app.canvasDemo.configure).pack(anchor=W)
class ScaleDemo(Demo):
label = 'Scale:\n(animation speed)'
def __init__(self, master):
Demo.__init__(self, master)
s1 = Scale(self, from_=-6.0, to=6.0,
resolution=0.1,
label='Start angle increment:',
orient=HORIZONTAL,
variable=app.animateSpeed1)
s1.pack(side=TOP, expand=YES, fill=X)
s2 = Scale(self, from_=-6.0, to=6.0,
resolution=0.1,
label='Extent angle increment:',
orient=HORIZONTAL,
variable=app.animateSpeed2)
s2.pack(side=TOP, expand=YES, fill=X)
class MenubarDemo:
def __init__(self, master):
# Create the menu widgets, and register with their parents.
menubar = Menu(root)
master.config(menu=menubar)
controlmenu = Menu(menubar)
menubar.add_cascade(label='Controls', menu=controlmenu)
radiomenu = Menu(menubar)
controlmenu.add_cascade(label='Radiobutton menu',
menu=radiomenu)
checkmenu = Menu(menubar)
controlmenu.add_cascade(label='Checkbutton menu',
menu=checkmenu)
# Add the command(s) to the menu(s)
controlmenu.add_command(label='Exit', foreground='red',
command=sys.exit)
radiomenu.add_radiobutton(label='Pie Slice',
command=self.notify,
variable=app.styleVar, value='pieslice')
radiomenu.add_radiobutton(label='Chord', command=self.notify,
variable=app.styleVar, value='chord')
radiomenu.add_radiobutton(label='Arc only', command=self.notify,
variable=app.styleVar, value='arc')
checkmenu.add_checkbutton(label='Fill', command=self.notify,
variable=app.fillVar, onvalue=1, offvalue=0)
checkmenu.add_checkbutton(label='Outline', command=self.notify,
variable=app.outlineVar,onvalue=1,offvalue=0)
def notify(self):
app.canvasDemo.configure()
class Application:
def __init__(self):
root.title('tkDemo: Demonstration of Tk widgets')
self.styleVar = StringVar();
self.styleVar.set('pieslice')
self.fillVar = BooleanVar(); self.fillVar.set(1)
self.outlineVar = BooleanVar(); self.outlineVar.set(1)
self.animateSpeed1 = DoubleVar();
self.animateSpeed1.set(1.0)
self.animateSpeed2 = DoubleVar();
self.animateSpeed2.set(1.0)
self.colorVar = StringVar();
self.colorVar.set('aquamarine')
self.justifyVar = StringVar();
self.justifyVar.set('center')
self.sizeVar = StringVar();
self.sizeVar.set('minimum')
def Go(self):
MenubarDemo(root)
self.reliefDemo = ReliefDemo(root)
self.messageDemo = MessageDemo(root)
self.canvasDemo = CanvasDemo(root)
self.optionDemo = OptionDemo(root)
self.listDemo = ListboxDemo(root)
self.radioDemo = RadiobuttonDemo(root)
self.checkDemo = CheckbuttonDemo(root)
self.scaleDemo = ScaleDemo(root)
self.textDemo = TextDemo(root)
self.PackAll(
[
[[self.reliefDemo]],
[[self.messageDemo,self.listDemo,self.scaleDemo],
[self.canvasDemo,self.radioDemo,self.checkDemo,self.optionDemo]],
[[self.textDemo]]
])
self.canvasDemo.configure()
self.canvasDemo.animate()
root.mainloop()
def PackAll(self, batches):
for batch in batches:
b = Frame(root, bd=15, relief=FLAT)
for row in batch:
f = Frame(b)
for widget in row:
widget.pack(in_=f, side=LEFT,
expand=YES, fill=BOTH)
widget.tkraise()
f.pack(side=TOP, expand=YES, fill=BOTH)
b.pack(side=TOP, expand=YES, fill=BOTH)
root = Tk()
if __name__ == '__main__':
app = Application()
app.Go()
_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32