Kaydet (Commit) 8ec03e05 authored tarafından Martin v. Löwis's avatar Martin v. Löwis

Patch #485959: Various changes to Tix demos.

üst 42ab61ee
#!/usr/local/bin/python # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
# #
# $Id$ # $Id$
# #
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program. # program.
...@@ -17,29 +17,52 @@ ...@@ -17,29 +17,52 @@
import Tix import Tix
def RunSample(w): TCL_ALL_EVENTS = 0
status = Tix.Label(w, width=40, relief=Tix.SUNKEN, bd=1)
status.pack(side=Tix.BOTTOM, fill=Tix.Y, padx=2, pady=1) def RunSample (root):
balloon = DemoBalloon(root)
balloon.mainloop()
balloon.destroy()
class DemoBalloon:
def __init__(self, w):
self.root = w
self.exit = -1
z = w.winfo_toplevel()
z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
status = Tix.Label(w, width=40, relief=Tix.SUNKEN, bd=1)
status.pack(side=Tix.BOTTOM, fill=Tix.Y, padx=2, pady=1)
# Create two mysterious widgets that need balloon help # Create two mysterious widgets that need balloon help
button1 = Tix.Button(w, text='Something Unexpected', button1 = Tix.Button(w, text='Something Unexpected',
command=lambda w=w: w.destroy()) command=self.quitcmd)
button2 = Tix.Button(w, text='Something Else Unexpected') button2 = Tix.Button(w, text='Something Else Unexpected')
button2['command'] = lambda w=button2: w.destroy() button2['command'] = lambda w=button2: w.destroy()
button1.pack(side=Tix.TOP, expand=1) button1.pack(side=Tix.TOP, expand=1)
button2.pack(side=Tix.TOP, expand=1) button2.pack(side=Tix.TOP, expand=1)
# Create the balloon widget and associate it with the widgets that we want # Create the balloon widget and associate it with the widgets that we want
# to provide tips for: # to provide tips for:
b = Tix.Balloon(w, statusbar=status) b = Tix.Balloon(w, statusbar=status)
b.bind_widget(button1, balloonmsg='Close Window', b.bind_widget(button1, balloonmsg='Close Window',
statusmsg='Press this button to close this window') statusmsg='Press this button to close this window')
b.bind_widget(button2, balloonmsg='Self-destruct button', b.bind_widget(button2, balloonmsg='Self-destruct button',
statusmsg='Press this button and it will destroy itself') statusmsg='Press this button and it will destroy itself')
def quitcmd (self):
self.exit = 0
def mainloop(self):
foundEvent = 1
while self.exit < 0 and foundEvent > 0:
foundEvent = self.root.tk.dooneevent(TCL_ALL_EVENTS)
def destroy (self):
self.root.destroy()
if __name__ == '__main__': if __name__ == '__main__':
root = Tix.Tk() root = Tix.Tk()
RunSample(root) RunSample(root)
root.mainloop()
#!/usr/local/bin/python # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
# #
# $Id$ # $Id$
# #
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program. # program.
......
#!/usr/local/bin/python # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
# #
# $Id$ # $Id$
# #
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program. # program.
......
#!/usr/local/bin/python # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
# #
# $Id$ # $Id$
# #
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program. # program.
...@@ -85,13 +85,15 @@ def RunSample(w): ...@@ -85,13 +85,15 @@ def RunSample(w):
top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
def select_month(event=None): def select_month(event=None):
print "Month =", demo_month.get() # tixDemo:Status "Month = %s" % demo_month.get()
pass
def select_year(event=None): def select_year(event=None):
print "Year =", demo_year.get() # tixDemo:Status "Year = %s" % demo_year.get()
pass
def ok_command(w): def ok_command(w):
print "Month =", demo_month.get(), ", Year=", demo_year.get() # tixDemo:Status "Month = %s, Year= %s" % (demo_month.get(), demo_year.get())
w.destroy() w.destroy()
if __name__ == '__main__': if __name__ == '__main__':
......
#!/usr/local/bin/python # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
# #
# $Id$ # $Id$
# #
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program. # program.
...@@ -17,57 +17,82 @@ ...@@ -17,57 +17,82 @@
# This example program uses three Control widgets. One lets you select # This example program uses three Control widgets. One lets you select
# integer values; one lets you select floating point values and the last # integer values; one lets you select floating point values and the last
# one lets you select a few names. # one lets you select a few names.
#
import Tix import Tix
def RunSample(w): TCL_ALL_EVENTS = 0
global demo_maker, demo_thrust, demo_num_engines
def RunSample (root):
demo_maker = Tix.StringVar() control = DemoControl(root)
demo_thrust = Tix.DoubleVar() control.mainloop()
demo_num_engines = Tix.IntVar() control.destroy()
demo_maker.set('P&W')
demo_thrust.set(20000.0) class DemoControl:
demo_num_engines.set(2) def __init__(self, w):
self.root = w
top = Tix.Frame(w, bd=1, relief=Tix.RAISED) self.exit = -1
# $w.top.a allows only integer values global demo_maker, demo_thrust, demo_num_engines
#
# [Hint] The -options switch sets the options of the subwidgets. demo_maker = Tix.StringVar()
# [Hint] We set the label.width subwidget option of the Controls to demo_thrust = Tix.DoubleVar()
# be 16 so that their labels appear to be aligned. demo_num_engines = Tix.IntVar()
# demo_maker.set('P&W')
a = Tix.Control(top, label='Number of Engines: ', integer=1, demo_thrust.set(20000.0)
variable=demo_num_engines, min=1, max=4, demo_num_engines.set(2)
options='entry.width 10 label.width 20 label.anchor e')
top = Tix.Frame(w, bd=1, relief=Tix.RAISED)
b = Tix.Control(top, label='Thrust: ', integer=0,
min='10000.0', max='60000.0', step=500, # $w.top.a allows only integer values
variable=demo_thrust, #
options='entry.width 10 label.width 20 label.anchor e') # [Hint] The -options switch sets the options of the subwidgets.
# [Hint] We set the label.width subwidget option of the Controls to
c = Tix.Control(top, label='Engine Maker: ', value='P&W', # be 16 so that their labels appear to be aligned.
variable=demo_maker, #
options='entry.width 10 label.width 20 label.anchor e') a = Tix.Control(top, label='Number of Engines: ', integer=1,
variable=demo_num_engines, min=1, max=4,
# We can't define these in the init because the widget 'c' doesn't options='entry.width 10 label.width 20 label.anchor e')
# exist yet and we need to reference it
c['incrcmd'] = lambda w=c: adjust_maker(w, 1) b = Tix.Control(top, label='Thrust: ', integer=0,
c['decrcmd'] = lambda w=c: adjust_maker(w, -1) min='10000.0', max='60000.0', step=500,
c['validatecmd'] = lambda w=c: validate_maker(w) variable=demo_thrust,
options='entry.width 10 label.width 20 label.anchor e')
a.pack(side=Tix.TOP, anchor=Tix.W)
b.pack(side=Tix.TOP, anchor=Tix.W) c = Tix.Control(top, label='Engine Maker: ', value='P&W',
c.pack(side=Tix.TOP, anchor=Tix.W) variable=demo_maker,
options='entry.width 10 label.width 20 label.anchor e')
box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
box.add('ok', text='Ok', underline=0, width=6, # We can't define these in the init because the widget 'c' doesn't
command=lambda w=w: ok_command(w)) # exist yet and we need to reference it
box.add('cancel', text='Cancel', underline=0, width=6, c['incrcmd'] = lambda w=c: adjust_maker(w, 1)
command=lambda w=w: w.destroy()) c['decrcmd'] = lambda w=c: adjust_maker(w, -1)
box.pack(side=Tix.BOTTOM, fill=Tix.X) c['validatecmd'] = lambda w=c: validate_maker(w)
top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
a.pack(side=Tix.TOP, anchor=Tix.W)
b.pack(side=Tix.TOP, anchor=Tix.W)
c.pack(side=Tix.TOP, anchor=Tix.W)
box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
box.add('ok', text='Ok', underline=0, width=6,
command=self.okcmd)
box.add('cancel', text='Cancel', underline=0, width=6,
command=self.quitcmd)
box.pack(side=Tix.BOTTOM, fill=Tix.X)
top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
def okcmd (self):
# tixDemo:Status "Selected %d of %s engines each of thrust %d", (demo_num_engines.get(), demo_maker.get(), demo_thrust.get())
self.quitcmd()
def quitcmd (self):
self.exit = 0
def mainloop(self):
while self.exit < 0:
self.root.tk.dooneevent(TCL_ALL_EVENTS)
def destroy (self):
self.root.destroy()
maker_list = ['P&W', 'GE', 'Rolls Royce'] maker_list = ['P&W', 'GE', 'Rolls Royce']
...@@ -92,11 +117,6 @@ def validate_maker(w): ...@@ -92,11 +117,6 @@ def validate_maker(w):
# Works here though. Why ? Beats me. # Works here though. Why ? Beats me.
return maker_list[i] return maker_list[i]
def ok_command(w):
print "Selected", demo_num_engines.get(), "of", demo_maker.get(), " engines each of thrust", demo_thrust.get()
w.destroy()
if __name__ == '__main__': if __name__ == '__main__':
root = Tix.Tk() root = Tix.Tk()
RunSample(root) RunSample(root)
root.mainloop()
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "widget": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program using tixwish. # program using tixwish.
...@@ -19,15 +19,9 @@ ...@@ -19,15 +19,9 @@
import Tix, os, copy import Tix, os, copy
from Tkconstants import * from Tkconstants import *
TCL_DONT_WAIT = 1<<1
TCL_WINDOW_EVENTS = 1<<2
TCL_FILE_EVENTS = 1<<3
TCL_TIMER_EVENTS = 1<<4
TCL_IDLE_EVENTS = 1<<5
TCL_ALL_EVENTS = 0 TCL_ALL_EVENTS = 0
def RunSample (root): def RunSample (root):
global dirlist
dirlist = DemoDirList(root) dirlist = DemoDirList(root)
dirlist.mainloop() dirlist.mainloop()
dirlist.destroy() dirlist.destroy()
...@@ -38,7 +32,7 @@ class DemoDirList: ...@@ -38,7 +32,7 @@ class DemoDirList:
self.exit = -1 self.exit = -1
z = w.winfo_toplevel() z = w.winfo_toplevel()
z.wm_title('Tix.DirList Widget Demo') z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
# Create the tixDirList and the tixLabelEntry widgets on the on the top # Create the tixDirList and the tixLabelEntry widgets on the on the top
# of the dialog box # of the dialog box
...@@ -98,7 +92,6 @@ class DemoDirList: ...@@ -98,7 +92,6 @@ class DemoDirList:
command = lambda self=self: self.quitcmd () ) command = lambda self=self: self.quitcmd () )
box.pack( anchor='s', fill='x', side=BOTTOM) box.pack( anchor='s', fill='x', side=BOTTOM)
z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
def copy_name (self, dir, ent): def copy_name (self, dir, ent):
# This should work as it is the entry's textvariable # This should work as it is the entry's textvariable
...@@ -108,24 +101,21 @@ class DemoDirList: ...@@ -108,24 +101,21 @@ class DemoDirList:
ent.entry.insert(0, self.dlist_dir) ent.entry.insert(0, self.dlist_dir)
def okcmd (self): def okcmd (self):
# tixDemo:Status "You have selected the directory" + $self.dlist_dir # tixDemo:Status "You have selected the directory" + self.dlist_dir
self.quitcmd() self.quitcmd()
def quitcmd (self): def quitcmd (self):
# self.root.destroy()
self.exit = 0 self.exit = 0
def mainloop(self): def mainloop(self):
while self.exit < 0: while self.exit < 0:
self.root.tk.dooneevent(TCL_ALL_EVENTS) self.root.tk.dooneevent(TCL_ALL_EVENTS)
# self.root.tk.dooneevent(TCL_DONT_WAIT)
def destroy (self): def destroy (self):
self.root.destroy() self.root.destroy()
# This "if" statement makes it possible to run this script file inside or # This "if" statement makes it possible to run this script file inside or
# outside of the main demo program "widget". # outside of the main demo program "tixwidgets.py".
# #
if __name__== '__main__' : if __name__== '__main__' :
import tkMessageBox, traceback import tkMessageBox, traceback
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "widget": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program using tixwish. # program using tixwish.
...@@ -19,16 +19,21 @@ ...@@ -19,16 +19,21 @@
import Tix, os, copy import Tix, os, copy
from Tkconstants import * from Tkconstants import *
def RunSample (w): TCL_ALL_EVENTS = 0
DemoDirTree(w)
def RunSample (root):
dirtree = DemoDirTree(root)
dirtree.mainloop()
dirtree.destroy()
class DemoDirTree: class DemoDirTree:
def __init__(self, w): def __init__(self, w):
self.root = w self.root = w
self.exit = -1
z = w.winfo_toplevel() z = w.winfo_toplevel()
z.wm_title('Tix.DirTree Widget Demo') z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
# Create the tixDirTree and the tixLabelEntry widgets on the on the top # Create the tixDirTree and the tixLabelEntry widgets on the on the top
# of the dialog box # of the dialog box
...@@ -90,19 +95,24 @@ class DemoDirTree: ...@@ -90,19 +95,24 @@ class DemoDirTree:
ent.entry.insert(0, self.dlist_dir) ent.entry.insert(0, self.dlist_dir)
def okcmd (self): def okcmd (self):
# tixDemo:Status "You have selected the directory" + $self.dlist_dir # tixDemo:Status "You have selected the directory" + self.dlist_dir
self.quitcmd() self.quitcmd()
def quitcmd (self): def quitcmd (self):
# tixDemo:Status "You have selected the directory" + self.dlist_dir
self.exit = 0
def mainloop(self):
while self.exit < 0:
self.root.tk.dooneevent(TCL_ALL_EVENTS)
def destroy (self):
self.root.destroy() self.root.destroy()
# This "if" statement makes it possible to run this script file inside or # This "if" statement makes it possible to run this script file inside or
# outside of the main demo program "widget". # outside of the main demo program "tixwidgets.py".
# #
if __name__== '__main__' : if __name__== '__main__' :
root=Tix.Tk() root=Tix.Tk()
RunSample(root) RunSample(root)
root.mainloop()
root.destroy()
#!/usr/local/bin/python # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
# #
# $Id$ # $Id$
# #
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program. # program.
......
#!/usr/local/bin/python # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
# #
# $Id$ # $Id$
# #
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program. # program.
...@@ -59,7 +59,7 @@ def RunSample(w): ...@@ -59,7 +59,7 @@ def RunSample(w):
top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
def ok_command(w): def ok_command(w):
print "Convert file from", demo_opt_from.get(), " to", demo_opt_to.get() # tixDemo:Status "Convert file from %s to %s" % ( demo_opt_from.get(), demo_opt_to.get())
w.destroy() w.destroy()
if __name__ == '__main__': if __name__ == '__main__':
......
# Tix Demostration Program # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
# #
# $Id$ # $Id$
# #
# Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "widget": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program using tixwish. # program using tixwish.
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program using tixwish. # program using tixwish.
...@@ -15,94 +15,118 @@ ...@@ -15,94 +15,118 @@
import Tix import Tix
def RunSample (w) : TCL_ALL_EVENTS = 0
# We create the frame and the ScrolledHList widget
# at the top of the dialog box
#
top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
# Put a simple hierachy into the HList (two levels). Use colors and
# separator widgets (frames) to make the list look fancy
#
top.a = Tix.ScrolledHList(top)
top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
# This is our little relational database
#
bosses = [
('jeff', 'Jeff Waxman'),
('john', 'John Lee'),
('peter', 'Peter Kenson')
]
employees = [
('alex', 'john', 'Alex Kellman'),
('alan', 'john', 'Alan Adams'),
('andy', 'peter', 'Andreas Crawford'),
('doug', 'jeff', 'Douglas Bloom'),
('jon', 'peter', 'Jon Baraki'),
('chris', 'jeff', 'Chris Geoffrey'),
('chuck', 'jeff', 'Chuck McLean')
]
hlist=top.a.hlist
# Let configure the appearance of the HList subwidget
#
hlist.config( separator='.', width=25, drawbranch=0, indent=10)
count=0
for boss,name in bosses :
if count :
f=Tix.Frame(hlist, name='sep%d' % count, height=2, width=150,
bd=2, relief=Tix.SUNKEN )
hlist.add_child( itemtype=Tix.WINDOW,
window=f, state=Tix.DISABLED )
hlist.add(boss, itemtype=Tix.TEXT, text=name)
count = count+1
for person,boss,name in employees :
# '.' is the separator character we chose above
#
key= boss + '.' + person
# ^^^^ ^^^^^^
# parent entryPath / child's name
hlist.add( key, text=name )
# [Hint] Make sure the keys (e.g. 'boss.person') you choose
# are unique names. If you cannot be sure of this (because of
# the structure of your database, e.g.) you can use the
# "add_child" command instead:
#
# hlist.addchild( boss, text=name)
# ^^^^
# parent entryPath
# Use a ButtonBox to hold the buttons. def RunSample (root):
# shlist = DemoSHList(root)
box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL ) shlist.mainloop()
box.add( 'ok', text='Ok', underline=0, width=6, shlist.destroy()
command = lambda w=w: w.quit() )
class DemoSHList:
box.add( 'cancel', text='Cancel', underline=0, width=6, def __init__(self, w):
command = lambda w=w: w.quit() ) self.root = w
self.exit = -1
box.pack( side=Tix.BOTTOM, fill=Tix.X)
top.pack( side=Tix.TOP, fill=Tix.BOTH, expand=1 ) z = w.winfo_toplevel()
z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
# We create the frame and the ScrolledHList widget
# at the top of the dialog box
#
top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
# Put a simple hierachy into the HList (two levels). Use colors and
# separator widgets (frames) to make the list look fancy
#
top.a = Tix.ScrolledHList(top)
top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
# This is our little relational database
#
bosses = [
('jeff', 'Jeff Waxman'),
('john', 'John Lee'),
('peter', 'Peter Kenson')
]
employees = [
('alex', 'john', 'Alex Kellman'),
('alan', 'john', 'Alan Adams'),
('andy', 'peter', 'Andreas Crawford'),
('doug', 'jeff', 'Douglas Bloom'),
('jon', 'peter', 'Jon Baraki'),
('chris', 'jeff', 'Chris Geoffrey'),
('chuck', 'jeff', 'Chuck McLean')
]
hlist=top.a.hlist
# Let configure the appearance of the HList subwidget
#
hlist.config( separator='.', width=25, drawbranch=0, indent=10)
count=0
for boss,name in bosses :
if count :
f=Tix.Frame(hlist, name='sep%d' % count, height=2, width=150,
bd=2, relief=Tix.SUNKEN )
hlist.add_child( itemtype=Tix.WINDOW,
window=f, state=Tix.DISABLED )
hlist.add(boss, itemtype=Tix.TEXT, text=name)
count = count+1
for person,boss,name in employees :
# '.' is the separator character we chose above
#
key= boss + '.' + person
# ^^^^ ^^^^^^
# parent entryPath / child's name
hlist.add( key, text=name )
# [Hint] Make sure the keys (e.g. 'boss.person') you choose
# are unique names. If you cannot be sure of this (because of
# the structure of your database, e.g.) you can use the
# "add_child" command instead:
#
# hlist.addchild( boss, text=name)
# ^^^^
# parent entryPath
# Use a ButtonBox to hold the buttons.
#
box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
box.add( 'ok', text='Ok', underline=0, width=6,
command = self.okcmd)
box.add( 'cancel', text='Cancel', underline=0, width=6,
command = self.quitcmd)
box.pack( side=Tix.BOTTOM, fill=Tix.X)
top.pack( side=Tix.TOP, fill=Tix.BOTH, expand=1 )
def okcmd (self):
self.quitcmd()
def quitcmd (self):
self.exit = 0
def mainloop(self):
while self.exit < 0:
self.root.tk.dooneevent(TCL_ALL_EVENTS)
def destroy (self):
self.root.destroy()
# This "if" statement makes it possible to run this script file inside or # This "if" statement makes it possible to run this script file inside or
# outside of the main demo program "widget". # outside of the main demo program "tixwidgets.py".
# #
if __name__== '__main__' : if __name__== '__main__' :
root=Tix.Tk() root=Tix.Tk()
RunSample(root) RunSample(root)
root.mainloop()
root.destroy()
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the PyTix demo program "tixwidget": it must have a # executed from the Tix demo program "tixwidget": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program using tixwish. # program using tixwish.
...@@ -18,128 +18,152 @@ ...@@ -18,128 +18,152 @@
import Tix import Tix
def RunSample (w) : TCL_ALL_EVENTS = 0
# We create the frame and the ScrolledHList widget def RunSample (root):
# at the top of the dialog box shlist = DemoSHList(root)
# shlist.mainloop()
top = Tix.Frame( w, relief=Tix.RAISED, bd=1) shlist.destroy()
# Put a simple hierachy into the HList (two levels). Use colors and class DemoSHList:
# separator widgets (frames) to make the list look fancy def __init__(self, w):
# self.root = w
top.a = Tix.ScrolledHList(top, options='hlist.columns 3 hlist.header 1' ) self.exit = -1
z = w.winfo_toplevel()
z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
# We create the frame and the ScrolledHList widget
# at the top of the dialog box
#
top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
# Put a simple hierachy into the HList (two levels). Use colors and
# separator widgets (frames) to make the list look fancy
#
top.a = Tix.ScrolledHList(top, options='hlist.columns 3 hlist.header 1' )
top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
hlist=top.a.hlist
# Create the title for the HList widget
# >> Notice that we have set the hlist.header subwidget option to true
# so that the header is displayed
#
boldfont=hlist.tk.call('tix','option','get','bold_font')
# First some styles for the headers
style={}
style['header'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist,
anchor=Tix.CENTER, padx=8, pady=2, font = boldfont )
hlist.header_create(0, itemtype=Tix.TEXT, text='Name',
style=style['header'])
hlist.header_create(1, itemtype=Tix.TEXT, text='Position',
style=style['header'])
top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP) # Notice that we use 3 columns in the hlist widget. This way when the user
# expands the windows wide, the right side of the header doesn't look
# chopped off. The following line ensures that the 3 column header is
# not shown unless the hlist window is wider than its contents.
#
hlist.column_width(2,0)
hlist=top.a.hlist # This is our little relational database
#
boss = ('doe', 'John Doe', 'Director')
# Create the title for the HList widget managers = [
# >> Notice that we have set the hlist.header subwidget option to true ('jeff', 'Jeff Waxman', 'Manager'),
# so that the header is displayed ('john', 'John Lee', 'Manager'),
# ('peter', 'Peter Kenson', 'Manager')
]
boldfont=hlist.tk.call('tix','option','get','bold_font') employees = [
('alex', 'john', 'Alex Kellman', 'Clerk'),
('alan', 'john', 'Alan Adams', 'Clerk'),
('andy', 'peter', 'Andreas Crawford', 'Salesman'),
('doug', 'jeff', 'Douglas Bloom', 'Clerk'),
('jon', 'peter', 'Jon Baraki', 'Salesman'),
('chris', 'jeff', 'Chris Geoffrey', 'Clerk'),
('chuck', 'jeff', 'Chuck McLean', 'Cleaner')
]
# First some styles for the headers style['mgr_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist)
style={}
style['header'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top,
anchor=Tix.CENTER, padx=8, pady=2, font = boldfont )
hlist.header_create(0, itemtype=Tix.TEXT, text='Name', style['mgr_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=hlist)
style=style['header'])
hlist.header_create(1, itemtype=Tix.TEXT, text='Position',
style=style['header'])
# Notice that we use 3 columns in the hlist widget. This way when the user style['empl_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist)
# expands the windows wide, the right side of the header doesn't look
# chopped off. The following line ensures that the 3 column header is
# not shown unless the hlist window is wider than its contents.
#
hlist.column_width(2,0)
# This is our little relational database style['empl_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=hlist)
#
boss = ('doe', 'John Doe', 'Director')
managers = [ # Let configure the appearance of the HList subwidget
('jeff', 'Jeff Waxman', 'Manager'), #
('john', 'John Lee', 'Manager'), hlist.config(separator='.', width=25, drawbranch=0, indent=10)
('peter', 'Peter Kenson', 'Manager') hlist.column_width(0, chars=20)
]
employees = [ # Create the boss
('alex', 'john', 'Alex Kellman', 'Clerk'), #
('alan', 'john', 'Alan Adams', 'Clerk'), hlist.add ('.', itemtype=Tix.TEXT, text=boss[1],
('andy', 'peter', 'Andreas Crawford', 'Salesman'), style=style['mgr_name'])
('doug', 'jeff', 'Douglas Bloom', 'Clerk'), hlist.item_create('.', 1, itemtype=Tix.TEXT, text=boss[2],
('jon', 'peter', 'Jon Baraki', 'Salesman'), style=style['mgr_posn'])
('chris', 'jeff', 'Chris Geoffrey', 'Clerk'),
('chuck', 'jeff', 'Chuck McLean', 'Cleaner')
]
style['mgr_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top) # Create the managers
#
style['mgr_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=top) for key,name,posn in managers :
e= '.'+ key
hlist.add(e, itemtype=Tix.TEXT, text=name,
style=style['mgr_name'])
hlist.item_create(e, 1, itemtype=Tix.TEXT, text=posn,
style=style['mgr_posn'])
style['empl_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top)
style['empl_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=top) for key,mgr,name,posn in employees :
# "." is the separator character we chose above
# Let configure the appearance of the HList subwidget entrypath = '.' + mgr + '.' + key
#
hlist.config(separator='.', width=25, drawbranch=0, indent=10)
hlist.column_width(0, chars=20)
# Create the boss # ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^
# # parent entryPath / child's name
hlist.add ('.', itemtype=Tix.TEXT, text=boss[1],
style=style['mgr_name'])
hlist.item_create('.', 1, itemtype=Tix.TEXT, text=boss[2],
style=style['mgr_posn'])
# Create the managers hlist.add(entrypath, text=name, style=style['empl_name'])
# hlist.item_create(entrypath, 1, itemtype=Tix.TEXT,
text = posn, style = style['empl_posn'] )
for key,name,posn in managers :
e= '.'+ key
hlist.add(e, itemtype=Tix.TEXT, text=name,
style=style['mgr_name'])
hlist.item_create(e, 1, itemtype=Tix.TEXT, text=posn,
style=style['mgr_posn'])
# Use a ButtonBox to hold the buttons.
#
box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
box.add( 'ok', text='Ok', underline=0, width=6,
command = self.okcmd )
for key,mgr,name,posn in employees : box.add( 'cancel', text='Cancel', underline=0, width=6,
# "." is the separator character we chose above command = self.quitcmd )
entrypath = '.' + mgr + '.' + key box.pack( side=Tix.BOTTOM, fill=Tix.X)
top.pack( side=Tix.TOP, fill=Tix.BOTH, expand=1 )
# ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ def okcmd (self):
# parent entryPath / child's name self.quitcmd()
hlist.add(entrypath, text=name, style=style['empl_name']) def quitcmd (self):
hlist.item_create(entrypath, 1, itemtype=Tix.TEXT, self.exit = 0
text = posn, style = style['empl_posn'] )
# Use a ButtonBox to hold the buttons. def mainloop(self):
# while self.exit < 0:
box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL ) self.root.tk.dooneevent(TCL_ALL_EVENTS)
box.add( 'ok', text='Ok', underline=0, width=6,
command = lambda w=w: w.quit() )
box.add( 'cancel', text='Cancel', underline=0, width=6, def destroy (self):
command = lambda w=w: w.quit() ) self.root.destroy()
box.pack( side=Tix.BOTTOM, fill=Tix.X)
top.pack( side=Tix.TOP, fill=Tix.BOTH, expand=1 )
# This "if" statement makes it possible to run this script file inside or # This "if" statement makes it possible to run this script file inside or
# outside of the main demo program "widget". # outside of the main demo program "tixwidgets.py".
# #
if __name__== '__main__' : if __name__== '__main__' :
root=Tix.Tk() root=Tix.Tk()
RunSample(root) RunSample(root)
root.mainloop()
root.destroy()
#!/usr/local/bin/python # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
# #
# $Id$ # $Id$
# #
# Tix Demostration Program # Tix Demostration Program
# #
# This sample program is structured in such a way so that it can be # This sample program is structured in such a way so that it can be
# executed from the Tix demo program "tixwidgets": it must have a # executed from the Tix demo program "tixwidgets.py": it must have a
# procedure called "RunSample". It should also have the "if" statment # procedure called "RunSample". It should also have the "if" statment
# at the end of this file so that it can be run as a standalone # at the end of this file so that it can be run as a standalone
# program. # program.
......
...@@ -154,7 +154,8 @@ class Demo: ...@@ -154,7 +154,8 @@ class Demo:
text += line + '\n' text += line + '\n'
try: tkMessageBox.showerror ('Error', text) try: tkMessageBox.showerror ('Error', text)
except: pass except: pass
tkinspect_quit (1) self.exit = 1
raise SystemExit, 1
def destroy (self): def destroy (self):
self.root.destroy() self.root.destroy()
...@@ -420,9 +421,13 @@ def MkFileEnt(w): ...@@ -420,9 +421,13 @@ def MkFileEnt(w):
ent.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3) ent.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)
def MkFileBox(w): def MkFileBox(w):
"""The FileSelectBox is a Motif-style box with various enhancements.
For example, you can adjust the size of the two listboxes
and your past selections are recorded.
"""
msg = Tix.Message(w, msg = Tix.Message(w,
relief=Tix.FLAT, width=240, anchor=Tix.N, relief=Tix.FLAT, width=240, anchor=Tix.N,
text='The TixFileSelectBox is a Motif-style box with various enhancements. For example, you can adjust the size of the two listboxes and your past selections are recorded.') text='The Tix FileSelectBox is a Motif-style box with various enhancements. For example, you can adjust the size of the two listboxes and your past selections are recorded.')
box = Tix.FileSelectBox(w) box = Tix.FileSelectBox(w)
msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3) msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
box.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3) box.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment