Recitation 11 - Tel Aviv University

Download Report

Transcript Recitation 11 - Tel Aviv University

Programming for Engineers in Python
Recitation 11
Plan
 GUI
 Swampy
 Text widgets
 PyPad
2
Install Swampy
 Download Swampy:
 http://greenteapress.com/thinkpython/swampy/swampy



3
2.0.python2.zip
Unzip to C:\Python27\Lib\site-packages
Now you should have a directory C:\Python27\Lib\sitepackages\swampy-2.0
Download this file http://db.tt/gQqPvRok (it might open as a
text file, right click and choose ‘Save as…’) and also put it in
C:\Python27\Lib\site-packages, making sure its name is
swampy.pth
Now you should have a file C:\Python27\Lib\sitepackages\swampy.pth
Check Swampy was installed
 Open the shell (IDLE)
 Run the following commands to check that Swampy is
working:
>>> import Tkinter
>>> from Gui import *
>>> g=Gui()
>>> g.mainloop()
 If you see a window like this ->
then the installation worked
4
GUI - reminder
 Graphical User Interface
 The part of the program that communicates with the human
user
 Computer → Human: graphics (sometimes audio & even
vibrations)
 Human → Computer: keyboard & mouse (sometimes even
touchscreen & microphone)
 In many applications this is the most important part of the
program
5
History of GUI
6
http://www.youtube.com/watch?v=TZGGUrom1Mg
Widgets
 In class:
 Button
 Label
 Canvas
7
More widgets!
 Textual input widgets:
 Entry – single line
entry_example.py: https://gist.github.com/1523427
 Text – multiple lines
text_example.py: https://gist.github.com/1523471
8
Think Python 19.5
More complex example
 Change the color of a circle based on the color name given by
the user
circle_demo.py: thinkpython.com/code/circle_demo.py
9
Think Python 19.5 pg. 185
PyNote – a Python Notepad
10
Packing
>>> g = Gui()
>>> g.title('PyNote 0.1')
Creates the GUI & title
11
Packing
>>>
g.col(weights=[1,0])
Creates a column that
holds widgets
Weights – later…
12
Packing
>>> g.st(…)
st:
Scrollable text widget
13
Packing
>>> g.row(weights=[1,0,0,0])
Creates a row that holds widgets
 The weights option determines which widget is resized and by
how much when the window is resized
14
Resizing
 With weights=[1,0,0,0]
 Without specifying weights
15
Packing
filename = g.en(text='filename.txt', width=16)
g.bu(text='...', command=browse)
g.bu(text='Save', command=save)
g.bu(text='Load', command=load)
g.bu(text='New', command=new)
g.bu(text='Quit', command=quit_)
g.bu: button widget
g.en: entry widget (one line of text)
16
Check if a file exists
 os.path.exists(filename)
 Returns True if file exists, False if it does not
17
Command
g.bu(text='Save', command=save)
18
def save():
'''Saves the current note in a file'''
if exists(filename.get()): # exists is os.path.exists
if not tkMessageBox.askyesno ('Save','File already
exists, do you want to overwrite?'):
return
f = open(filename.get(),'w')
f.write(textbox.text.get(0.0, END))
f.close()
tkMessageBox.showinfo('Save','File saved: ‘
+filename.get())
Event driven programming
 Nothing happens until the user initiates an event
 When the user clicks the button the command is called
 Now the GUI is “frozen” until the command returns
 When it returns, the GUI is released
>>> def freeze():
time.sleep(5)
>>> g=Gui()
>>> g.bu(text=‘Freeze!’,command=freeze)
>>> g.mainloop()
19
http://www.tutorialspoint.com/python/tk_messagebox.htm
tkMessageBox
 Creates a message box that asks the user a question or gives
him information
 Usually with a button or two
 Examples:
tkMessageBox.showinfo('Load','File does
not exist: '+filename.get())
tkMessageBox.askyesno('Save','File already exists, do you want to
overwrite?')
20
tkMessageBox.askyesno('Quit?','Do you want to quit?')
tkMessageBox.askyesno('Save','File already exists, do you want to
overwrite?')
21
tkMessageBox.askyesno('Quit?','Do you want to quit?')
22
tkMessageBox.showinfo('Load','File does not exist: ‘ +
filename.get())
23
Load command
def load():
'''Opens a file to the text widget'''
if not exists(filename.get()):
tkMessageBox.showinfo('Load','File does not exist: '
+filename.get())
return
new() # delete previous note from text widget
f = open(filename.get())
t = f.read()
textbox.text.insert(0.0, t)
f.close()
24
File dialog box
 We can get the file by writing/copy-pasting its name, but it’s
easier with a file dialog box:
t = tkFileDialog.askopenfilename()
25
File dialog box – contd.
 We use the dialog box in the browse function which is called
by the ‘…’ button
def browse():
'''opens a file dialog and sets its result to the
filename entry'''
t = tkFileDialog.askopenfilename()
if t:
filename.delete(0,END)
filename.insert(0,t)
26
Exit the GUI
 User:
 By clicking the windows X icon
 By pressing Ctrl-C in the shell
 Program:
 By calling g.destroy()
 Example – quit_() function (‘_’ is used in the name because quit is a
python word):
def quit_():
'''asks the user if he wants to quit'''
if tkMessageBox.askyesno ('Quit?','Do you want to
quit?'):
g.destroy() # this actually quits the GUI
27
Reverse text
 We create a button that will reverse all the words in the text
28
Reverse text
 We create a button that will reverse all the words in the text
29
Reverse word
def reverse_word(word):
return word[-1::-1].capitalize()
 We used capitalize so that the words will look nice:
January -> Yraunaj and not yraunaJ
30
Reverse text
def reverse():
orig = textbox.text.get(0.0, END)
new() # delete the current text
for line in orig.split('\n'):
for word in line.split(' '):
textbox.text.insert(END, reverse_word(word))
textbox.text.insert(END, ' ') # ‘ ‘ is a space
textbox.text.insert(END, '\n') # newline
31
Reverse button
g.bu(text='Reverse', command=reverse)
 Add functionality, then add a button
 We can now add other functionalities (if time permits):
 Count words
 Count characters (frequency counter)
 Count lines
 Decipher (HW 5)
 Markov analysis (HW 4)
 Translate (http://www.catonmat.net/blog/python-library-for-
google-translate/)
32