0% found this document useful (0 votes)
65 views25 pages

Python Short Course Lecture 6: TK Graphics

The document discusses using Tkinter to build a graphical user interface in Python. It provides examples of how to create widgets like labels, buttons, text boxes, menus, checkboxes and radio buttons. It also demonstrates how to use dialog boxes and file browsing dialogs. The goal is to survey the different widgets and show how to construct a basic molecular editor interface.

Uploaded by

saurabh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
65 views25 pages

Python Short Course Lecture 6: TK Graphics

The document discusses using Tkinter to build a graphical user interface in Python. It provides examples of how to create widgets like labels, buttons, text boxes, menus, checkboxes and radio buttons. It also demonstrates how to use dialog boxes and file browsing dialogs. The goal is to survey the different widgets and show how to construct a basic molecular editor interface.

Uploaded by

saurabh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 25

Python Short Course

Lecture 6: Tk Graphics

Richard P. Muller
Materials and Process Simulation Center
June 22, 2000
Tk Overview
• Set of widgets designed by John K. Ousterhout, 1987
• Based on Apple Hypercard idea of putting together
graphics program
• Tk == Tool Kit
• Mean to be driven by Tcl (Toolkit Control Language)
– Many people find Tcl limited
– Can also drive Tk with Perl, Python
• Tkinter is the Python Tk Interface
– Very easy to use

© 2000 Richard P. Muller 2


Hello, World

from Tkinter import *


w=Label(text="Hello, World!")
w.pack()
w.mainloop()
• Label() defines a label to be displayed
– text= specifies a parameter to be passed in
• pack() resizes the window to the proper size
• mainloop() enters the event loop, and the program idles until a
button is pushed, a menu is pulled, etc. It has to idle until the
program is killed, since we didn't define any events.

© 2000 Richard P. Muller 3


Events (Hello, Goodbye)

from Tkinter import *


w=Label(text="Hello, World).pack()
b=Button(text="Goodbye",command='exit').pack()
mainloop()
• Button label defined by text parameter
• Button defines a callback function, something to run
when it is pushed.
• Now mainloop() has an event to catch, so when we push
the button, mainloop() executes the exit command.

© 2000 Richard P. Muller 4


Creating a Molecular Editor

Menu bar
Label

Text area (for geometry input)

Text entry

Radio buttons
Checkbox

© 2000 Richard P. Muller 5


Molecular Editor Overview
• We're going to whiz through this fairly quickly
– Example is online for those who want more
– Just a survey of some different widgets
– How you can build a professional looking interface

© 2000 Richard P. Muller 6


Widgets Creation Routine
def makeWidgets(self):
frame = Frame(self)
self.makeMenuBar(frame)
self.makeLogo(frame)
self.makeMolEdit(frame)
self.makeNameEntry(frame)
self.makeSelectQM(frame)
frame.pack()
self.pack()
return

© 2000 Richard P. Muller 7


Frames & Containers
frame = Frame(self)
• Frame() is a general command to create a container for other
widgets
• It doesn't do much other than hold other things.
• Takes as an argument the parent (here self)
• Returns the frame object (here frame)
• We can then pass the frame object to other widgets as their
parent
self.makeMenuBar(frame)
• Frame is also useful for doing sophisticated layouts
– Tk doesn't give much control over precise layout
– Often have to pack frames within frames within frames

© 2000 Richard P. Muller 8


Menubars and Menus

Menu bar

© 2000 Richard P. Muller 9


Menubars
• A menubar is just a frame that holds menus:
menubar =
Frame(frame,relief=RAISED,borderwidth=1)
menubar.pack(side=TOP)
– We've specified a raised relief, and a slight border
– We've also specified where to pack the widget (TOP)
– We will then pass menubar to all of the subsequent menus we'll define
(File, Edit, Help, etc.) as the parent function.

© 2000 Richard P. Muller 10


Menus
• A menu in Tk is a combination of a Menubutton (the title of
the menu) and the Menu (what drops down when the
Menubutton is pressed
mb_file = Menubutton(menubar, text='File')
mb_file.pack(side=LEFT)
mb_file.menu = Menu(mb_file)
• Once we've specified the menubutton and the menu, we can
add different commands to the menu
mb_file.menu.add_command(
label='New...',
command = self.new_mol)
– Here we've defined a new type of callback, one that points to one of
our functions (self.new_mol) rather than a predefined function

© 2000 Richard P. Muller 11


Text Widgets

Label

Text area (for geometry input)

Text entry

© 2000 Richard P. Muller 12


Text Areas
• Text areas contain room for multiple lines of text
– Define a new frame and put a text area in it
textfr = Frame(frame)
self.text = Text(textfr,height=10,width=50)
– Put a scrollbar in this frame
scroll = Scrollbar(textfr,command =
self.text.yview)
self.text.configure(yscrollcommand=scroll.s
et)
– Pack everything
self.text.pack(side=LEFT)
scroll.pack(side=RIGHT,fill=Y)
textfr.pack(side=TOP)

© 2000 Richard P. Muller 13


Text Entries
• Text entries contain single lines of text
– Create a new frame for the entry, and put a label on it
entry_frame = Frame(frame)
Label(entry_frame,text = 'Name')
.pack(side=LEFT)
– Define the entry, connect it to a variable, and put the current value
of the variable in the entry
entry = Entry(f1,width=40,
textvariable = self.mol_name)
entry.insert(0,self.mol_name)
– Pack everything
entry.pack(side=LEFT)
entry_frame.pack(side=TOP,fill=Y)

© 2000 Richard P. Muller 14


Radiobuttons and Checkboxes

Radio buttons
Checkbox

© 2000 Richard P. Muller 15


Radiobuttons
• Radiobuttons signify a choice between exclusive options
– Create a frame and label
rbfr = Frame(f)
Label(rbfr,text='Basis').pack(side=LEFT)
– Add the buttons. Note that the variable connected to all buttons is self.basis
r321 = Radiobutton(rbfr,text='3-21G',
value = '3-21G',variable=self.basis)
r321.pack(side=LEFT)
r631 = Radiobutton(rbfr,text='6-31G**',
value = '6-31G**', variable=self.basis)
r631.pack(side=LEFT)
– Set the default and pack
r631.select()
rbfr.pack(side=TOP,fill=X)

© 2000 Richard P. Muller 16


Checkboxes
• Check boxes represent boolean choices (T or F)
cbfr = Frame(f)
– Add the buttons. Note that the variables are different.
cbgeo = Checkbutton(cbfr,
text='Optimize Geometry?',
state=NORMAL,
variable=self.geo_opt).pack(side=LEFT)
cbsolv = Checkbutton(cbfr,
text='Solvate?',
state=NORMAL,
variable=self.solvated).pack(side=LEFT)
cbfr.pack(side=TOP)

© 2000 Richard P. Muller 17


Notes
• This interface doesn't do anything; to make it work
– Add Run command to File menu?
– Put Submit button at the bottom?
– Tie these commands to function calls
• Synergy between objects and widgets
– Variables are passed automatically within class; you can refer
to them as self.whatever and not have to worry about passing
variables
– Callback functions are similarly easy to handle; this is a
particularly good deal because often programmers jump
through hoops to define callbacks on the fly (lambda functions).
IMHO this is a source of confusion and should be avoided.

© 2000 Richard P. Muller 18


Dialog boxes

• Convenient way to get feedback from a user


– Confirm quit
– Inputs data directly into program
– Here 0 is returned for Yes, and 1 is returned for No

© 2000 Richard P. Muller 19


Simple Dialog Box Example
import sys
from Tkinter import *
from Dialog import *

def confirm_quit():
d = Dialog(None, title="Goodbye?",
text="Really Leave?", default=0,
bitmap=DIALOG_ICON, strings=("Yes","No"))
if d.num ==0:sys.exit()
return

l = Label(text="Hello, World!").pack()
b = Button(text="Goodbye",
command=confirm_quit).pack()
mainloop()

© 2000 Richard P. Muller 20


File Browser Dialog

© 2000 Richard P. Muller 21


File Dialog Example Code
from Tkinter import *
from FileDialog import *

root = Tk()
– Set up the dialog box
filename=LoadFileDialog(root)
– Run it. Optionally you can give it a default directory and file
filter, as shown here:
filename.go("~/gallery","*.xyz")
print filename

© 2000 Richard P. Muller 22


Python Mega Widgets
• Very extensive set of sophisticated widgets
– counters, panes, dialogs, fields already having scrollbars,
groups of widgets, etc.
• Built from basic Tk widgets
– People are adding new ones all the time
• On MSC machines at /source/python/Pmw
– Not currently installed
– I'll be glad to install if anyone wants them
• Available on the web at http://www.dscpl.com.au/pmw

© 2000 Richard P. Muller 23


wxPython
• Python bindings for wxWindows widget set
• Very professionally done
• wxWindows is available on all platforms
• Many notables in the Python community (Eric Raymond)
are calling for wxPython to become the standard
• Not currently installed at MSC
– I'll be glad to do so if there is desire
– Still much more acceptance and much more use for Tkinter
• Available on the web at http://wxpython.org

© 2000 Richard P. Muller 24


References
• Web Pages
– Tkinter: http://www.python.org/topics/tkinter/doc.html
– Python megawidgets: http://www.dscpl.com.au/pmw
– wxPython: http://wxpython.org
• Books
– Programming Python, Mark Lutz, ORA
– Python and Tkinter Programming, John E. Grayson, Manning
Press
– Tcl and the Tk Toolkit, John K. Ousterhout, Addison-Wesley
Professional Computing Series

© 2000 Richard P. Muller 25

You might also like