mirror of https://github.com/python/cpython
132 lines
4.5 KiB
Python
132 lines
4.5 KiB
Python
# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
|
|
#
|
|
# $Id$
|
|
#
|
|
# Tix Demostration Program
|
|
#
|
|
# This sample program is structured in such a way so that it can be
|
|
# executed from the Tix demo program "tixwidgets.py": it must have a
|
|
# 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
|
|
# program using tixwish.
|
|
|
|
# This file demonstrates the use of the tixDirList widget -- you can
|
|
# use it for the user to select a directory. For example, an installation
|
|
# program can use the tixDirList widget to ask the user to select the
|
|
# installation directory for an application.
|
|
#
|
|
|
|
import tkinter.tix, os, copy
|
|
from tkinter.constants import *
|
|
|
|
TCL_ALL_EVENTS = 0
|
|
|
|
def RunSample (root):
|
|
dirlist = DemoDirList(root)
|
|
dirlist.mainloop()
|
|
dirlist.destroy()
|
|
|
|
class DemoDirList:
|
|
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())
|
|
|
|
# Create the tixDirList and the tixLabelEntry widgets on the on the top
|
|
# of the dialog box
|
|
|
|
# bg = root.tk.eval('tix option get bg')
|
|
# adding bg=bg crashes Windows pythonw tk8.3.3 Python 2.1.0
|
|
|
|
top = tkinter.tix.Frame( w, relief=RAISED, bd=1)
|
|
|
|
# Create the DirList widget. By default it will show the current
|
|
# directory
|
|
#
|
|
#
|
|
top.dir = tkinter.tix.DirList(top)
|
|
top.dir.hlist['width'] = 40
|
|
|
|
# When the user presses the ".." button, the selected directory
|
|
# is "transferred" into the entry widget
|
|
#
|
|
top.btn = tkinter.tix.Button(top, text = " >> ", pady = 0)
|
|
|
|
# We use a LabelEntry to hold the installation directory. The user
|
|
# can choose from the DirList widget, or he can type in the directory
|
|
# manually
|
|
#
|
|
top.ent = tkinter.tix.LabelEntry(top, label="Installation Directory:",
|
|
labelside = 'top',
|
|
options = '''
|
|
entry.width 40
|
|
label.anchor w
|
|
''')
|
|
|
|
font = self.root.tk.eval('tix option get fixed_font')
|
|
# font = self.root.master.tix_option_get('fixed_font')
|
|
top.ent.entry['font'] = font
|
|
|
|
self.dlist_dir = copy.copy(os.curdir)
|
|
# This should work setting the entry's textvariable
|
|
top.ent.entry['textvariable'] = self.dlist_dir
|
|
top.btn['command'] = lambda dir=top.dir, ent=top.ent, self=self: \
|
|
self.copy_name(dir,ent)
|
|
|
|
# top.ent.entry.insert(0,'tix'+repr(self))
|
|
top.ent.entry.bind('<Return>', lambda self=self: self.okcmd () )
|
|
|
|
top.pack( expand='yes', fill='both', side=TOP)
|
|
top.dir.pack( expand=1, fill=BOTH, padx=4, pady=4, side=LEFT)
|
|
top.btn.pack( anchor='s', padx=4, pady=4, side=LEFT)
|
|
top.ent.pack( expand=1, fill=X, anchor='s', padx=4, pady=4, side=LEFT)
|
|
|
|
# Use a ButtonBox to hold the buttons.
|
|
#
|
|
box = tkinter.tix.ButtonBox (w, orientation='horizontal')
|
|
box.add ('ok', text='Ok', underline=0, width=6,
|
|
command = lambda self=self: self.okcmd () )
|
|
box.add ('cancel', text='Cancel', underline=0, width=6,
|
|
command = lambda self=self: self.quitcmd () )
|
|
|
|
box.pack( anchor='s', fill='x', side=BOTTOM)
|
|
|
|
def copy_name (self, dir, ent):
|
|
# This should work as it is the entry's textvariable
|
|
self.dlist_dir = dir.cget('value')
|
|
# but it isn't so I'll do it manually
|
|
ent.entry.delete(0,'end')
|
|
ent.entry.insert(0, self.dlist_dir)
|
|
|
|
def okcmd (self):
|
|
# tixDemo:Status "You have selected the directory" + self.dlist_dir
|
|
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
|
|
# outside of the main demo program "tixwidgets.py".
|
|
#
|
|
if __name__== '__main__' :
|
|
import tkinter.messagebox, traceback
|
|
|
|
try:
|
|
root=tkinter.tix.Tk()
|
|
RunSample(root)
|
|
except:
|
|
t, v, tb = sys.exc_info()
|
|
text = "Error running the demo script:\n"
|
|
for line in traceback.format_exception(t,v,tb):
|
|
text = text + line + '\n'
|
|
d = tkinter.messagebox.showerror ( 'Tix Demo Error', text)
|