File: ScrolledFrame.py

package info (click to toggle)
python-pmw 0.8.1-1
  • links: PTS
  • area: main
  • in suites: potato
  • size: 1,972 kB
  • ctags: 3,391
  • sloc: python: 13,563; makefile: 44; sh: 24
file content (123 lines) | stat: -rw-r--r-- 3,193 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
""" Demonstration of the Pmw ScrolledFrame megawidget.
"""

# Import Pmw from the sibling directory.
import sys
sys.path[:0] = ['../../..']

import Tkinter
import Pmw

class Demo:
    def __init__(self, parent):
	# Create the ScrolledFrame.
	self.sf = Pmw.ScrolledFrame(parent,
		labelpos = 'n', label_text = 'ScrolledFrame',
		usehullsize = 1,
		hull_width = 400,
		hull_height = 220,
	)

	# Create a group widget to contain the flex options.
	w = Pmw.Group(parent, tag_text='Flex')
	w.pack(side = 'bottom', padx = 5, pady = 3)

	hflex = Pmw.OptionMenu(w.interior(),
		labelpos = 'w',
		label_text = 'Horizontal:',
		items = ['fixed', 'expand', 'shrink', 'elastic'],
		command = self.sethflex,
		menubutton_width = 8,
	)
	hflex.pack(side = 'left', padx = 5, pady = 3)
	hflex.invoke('fixed')

	vflex = Pmw.OptionMenu(w.interior(),
		labelpos = 'w',
		label_text = 'Vertical:',
		items = ['fixed', 'expand', 'shrink', 'elastic'],
		command = self.setvflex,
		menubutton_width = 8,
	)
	vflex.pack(side = 'left', padx = 5, pady = 3)
	vflex.invoke('fixed')

	# Create a group widget to contain the scrollmode options.
	w = Pmw.Group(parent, tag_text='Scroll mode')
	w.pack(side = 'bottom', padx = 5, pady = 0)

	hmode = Pmw.OptionMenu(w.interior(),
		labelpos = 'w',
		label_text = 'Horizontal:',
		items = ['none', 'static', 'dynamic'],
		command = self.sethscrollmode,
		menubutton_width = 8,
	)
	hmode.pack(side = 'left', padx = 5, pady = 3)
	hmode.invoke('dynamic')

	vmode = Pmw.OptionMenu(w.interior(),
		labelpos = 'w',
		label_text = 'Vertical:',
		items = ['none', 'static', 'dynamic'],
		command = self.setvscrollmode,
		menubutton_width = 8,
	)
	vmode.pack(side = 'left', padx = 5, pady = 3)
	vmode.invoke('dynamic')

	button = Tkinter.Button(parent,
	    text = 'Add a button',
	    command = self.addButton)
	button.pack(side = 'bottom')

	# Pack this last so that the buttons do not get shrunk when
	# the window is resized.
	self.sf.pack(padx = 5, pady = 3, fill = 'both', expand = 1)

	self.frame = self.sf.interior()

	self.row = 0
	self.col = 0

	self.addButton()

    def sethscrollmode(self, tag):
	self.sf.configure(hscrollmode = tag)

    def setvscrollmode(self, tag):
	self.sf.configure(vscrollmode = tag)

    def sethflex(self, tag):
	self.sf.configure(horizflex = tag)

    def setvflex(self, tag):
	self.sf.configure(vertflex = tag)

    def addButton(self):
	button = Tkinter.Button(self.frame,
	    text = '(%d,%d)' % (self.col, self.row))
	button.grid(row = self.row, col = self.col, sticky = 'nsew')

	self.frame.grid_rowconfigure(self.row, weight = 1)
	self.frame.grid_columnconfigure(self.col, weight = 1)
	self.sf.reposition()

	if self.col == self.row:
	    self.col = 0
	    self.row = self.row + 1
	else:
	    self.col = self.col + 1

######################################################################
 
# Create demo in root window for testing.
if __name__ == '__main__': 
    root = Tkinter.Tk()
    Pmw.initialise(root, fontScheme = 'pmw1')
    root.title('Pmw ScrolledFrame demonstration')
 
    exitButton = Tkinter.Button(root, text = 'Exit', command = root.destroy)
    exitButton.pack(side = 'bottom')
    widget = Demo(root)
    root.mainloop()