1 / 32

Programming for Engineers in Python

Programming for Engineers in Python. Recitation 11. Plan. GUI Swampy Text widgets PyPad. Install Swampy. Download Swampy: http://greenteapress.com/thinkpython/swampy/swampy-2.0.python2.zip Unzip to C: Python27Libsite-packages

gazit
Download Presentation

Programming for Engineers in Python

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programming for Engineers in Python Recitation 11

  2. Plan • GUI • Swampy • Text widgets • PyPad

  3. Install Swampy • Download Swampy: • http://greenteapress.com/thinkpython/swampy/swampy-2.0.python2.zip • Unzip to C:\Python27\Lib\site-packages • Now you should have a directory C:\Python27\Lib\site-packages\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\site-packages\swampy.pth

  4. Check Swampy was installed • Open the shell (IDLE) • Run the following commands to check that Swampy is working: >>> importTkinter >>> fromGuiimport* >>> g=Gui() >>> g.mainloop() • If you see a window like this -> then the installation worked

  5. 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

  6. History of GUI http://www.youtube.com/watch?v=TZGGUrom1Mg

  7. Widgets • In class: • Button • Label • Canvas

  8. 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 Think Python 19.5

  9. 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 Think Python 19.5 pg. 185

  10. PyNote – a Python Notepad

  11. Packing >>> g = Gui() >>> g.title('PyNote 0.1') Creates the GUI & title

  12. Packing >>> g.col(weights=[1,0]) Creates a column that holds widgets Weights – later…

  13. Packing >>> g.st(…) st: Scrollable text widget

  14. 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

  15. Resizing • With weights=[1,0,0,0] • Without specifying weights

  16. 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)

  17. Check if a file exists • os.path.exists(filename) • Returns True if file exists, False if it does not

  18. Command g.bu(text='Save', command=save) defsave(): '''Saves the current note in a file''' if exists(filename.get()): # exists is os.path.exists ifnottkMessageBox.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())

  19. 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 >>> deffreeze(): time.sleep(5) >>> g=Gui() >>> g.bu(text=‘Freeze!’,command=freeze) >>> g.mainloop()

  20. 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','Filedoes not exist: '+filename.get()) tkMessageBox.askyesno('Save','File already exists, do you want to overwrite?') tkMessageBox.askyesno('Quit?','Do you want to quit?')

  21. tkMessageBox.askyesno('Save','File already exists, do you want to overwrite?')

  22. tkMessageBox.askyesno('Quit?','Do you want to quit?')

  23. tkMessageBox.showinfo('Load','Filedoes not exist: ‘ + filename.get())

  24. Load command defload(): '''Opens a file to the text widget''' ifnot 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()

  25. 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()

  26. File dialog box – contd. • We use the dialog box in the browse function which is called by the ‘…’ button defbrowse(): '''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)

  27. 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): defquit_(): '''asks the user if he wants to quit''' iftkMessageBox.askyesno ('Quit?','Do you want to quit?'): g.destroy() # this actually quits the GUI

  28. Reverse text • We create a button that will reverse all the words in the text

  29. Reverse text • We create a button that will reverse all the words in the text

  30. Reverse word defreverse_word(word): returnword[-1::-1].capitalize() • We used capitalize so that the words will look nice: January -> Yraunaj and not yraunaJ

  31. Reverse text defreverse(): orig = textbox.text.get(0.0, END) new() # delete the current text for line inorig.split('\n'): for word inline.split(' '): textbox.text.insert(END, reverse_word(word)) textbox.text.insert(END, ' ') # ‘ ‘ is a space textbox.text.insert(END, '\n') # newline

  32. 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/)

More Related