1 / 25

Topics in Python GUI Development

Topics in Python GUI Development. Professor Frank J. Rinaldo Creation Core - office 401. Event-Drive Programming. GUI based programs are ‘usually’ event driven programs The GUI based programs will respond to your input: Mouse clicks Typing text Cursor movements Etc

claire
Télécharger la présentation

Topics in Python GUI Development

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. Topics in PythonGUI Development Professor Frank J. Rinaldo Creation Core - office 401

  2. Event-Drive Programming • GUI based programs are ‘usually’ event driven programs • The GUI based programs will respond to your input: • Mouse clicks • Typing text • Cursor movements • Etc • In general, the input can be in any order (it need not be sequential)

  3. Root Window • We will be using TKinter for our GUI development • This is the Python interface to the TK GUI library • First, we need to create a ‘root window’ • This is the main window where all other windows, buttons, boxes, etc will reside

  4. A Simple root window # A simple GUI from Tkinter import * # Create the root window root = Tk() #modify the window root.title(“Simple GUI”) root.geometry(“200x100”) # kick off the window’s event loop root.mainloop() NOTE: the window is now ready to process inputs / requests. We have not yet assigned any requests to this window.

  5. Event Loop • The GUI will run an ‘event loop’ • In other words: • It will check for any input & then execute the necessary commands • It will check for any input & then execute the necessary commands • Etc… • In will continue to loop looking for input to process until we give a command to stop

  6. Creating a FrameUsing a grid • A ‘Frame’ is a widget that can hold other widgets! • A ‘grid’ is a layout manager • It allows us to decide WHERE to put labels, buttons, etc… in a Frame

  7. A Label example program # A label program from Tkinter import * # create the root window root = Tk() root.title(“Labeler”) root.geometry(“200x50”) # create a ‘frame’ in the window to hold other widgets app = Frame(root) app.grid() # create a label in the Frame lbl = Label(app, text = “I’m a label!”) lbl.grid() # kickoff the window’s event loop root.mainloop()

  8. A Sample program using Buttons # Lazy buttons (they do NOTHING!!) from Tkinter import * # Create a root window root = Tk() root.title(“Lazy Buttons”) root.geometry(“200x85”) # Create a Frame & grid app = Frame(root) app.grid() # Create buttons in the Frame bttn1 = Button(app, text = ”I do nothing!”) bttn1.grid() bttn2 = Button(app) bttn2.grid() bttn2.configure(text = “Me too!”) bttn3 = Button(app) bttn3.grid() bttn3[“text”] = “Same here!” # kickoff main event loop root.mainloop()

  9. Buttons • Note: that we were able to crate the 3 buttons using 3 different ways to assign the button label to the button • This flexibility makes it much easier to develop advanced GUI’s that can be configured (designed) dynamically

  10. Developing Buttons using a Class # Lazy buttons 2 (using a Class) from Tkinter import * # Create an Application class class Application(Frame): “”” A GUI Application with 3 buttons””” def __init__(self, master): Frame.__init__(self, master) self.grid() self.create.wigets() def create_widgets(self): self.bttn1 = Button(self, text = “I do nothing!”) self.bttn1.grid() self.bttn2 = Button(self) self.bttn2.grid() self.bttn2.configure(text = “Me too!”)

  11. Developing Buttons using a Classcontinued self.bttn3 = Button(self) self.bttn3.grid() self.bttn3[“text”] = “Same here!” #main root = Tk() root.title(“Lazy Button 2”) root.geometry(“200x85”) app = Application(root) root.mainloop()

  12. Binding widgets and event handlers • To do something useful we need to bind (or connect) widgets to event handlers • For example: • When we click on a certain button then something special should take place • The event (or program code) associated with the widget must be executed!

  13. The Click counter program # Click Counter from Tkinter import * class Application(Frame): “”” GUI application to count button clicks””” def __init__(self, master): “”” Initialize the frame “”” Frame.__init__(self, master) self.grid() self.bttn_clicks = 0 # number of button clicks self.create_widgets() def create_widgets(self): “”” Create button which displays number of clicks””” self.bttn = Button(self) self.bttn[“text”] = “Total Clicks: 0” self.bttn[“command”] = self.update_count # EVENT handler! self.bttn.grid()

  14. The Click counter programcontinued def update_count(self): “”” Increase click count & Display new total “”” self.bttn_clicks +=1 self.bttn[“text”] = “Total clicks: “ + str(self.bttn_clicks) #main root = Tk() root.title(“Click Counter”) root.geometry(“200x50”) app = Application(root) root.mainloop()

  15. Using ‘text’ and ‘entry’ widgetsand the ‘grid’ layout manager • ‘Entry’ is used for one line of input • ‘Text’ is used when you have multiple lines of input • The ‘Grid’ layout manager allows you to organize your window • It allows you to decide where to place buttons, text, etc.

  16. Longevity program # Longevity from Tkinter import * class Application(Frame): “”” GUI application which can reveal the secret of longevity “”” def __init__(self, master): Frame.__init__(self, master) self.grid() self.create_widets() def create_widgets(self): # create button, text, and entry widgets self.inst_lbl = Label(self, text = “Enter password”) self.inst_lbl.grid(row = 0, cpolumn = 0, columnspan = 2, sticky = W) # create label for password self.pw_lbl = Label(self, text = “Password: “) self.pw_lbl, grid(row = 1, column = 0, sticky = W)

  17. Longevity programcontinued # create entry widget to accept password self.pw_ent = Entry(self) self.pw_ent.grid(row = 1, column = 1, sticky = W) # create submit button self.submit_bttn = Button(self, text = “Submit”, comamnd = self.reveal) self.submit_bttn.grid = (row = 2, column = 0, sticky = W) # create text widget to display message self.secret_text = Text(self, width = 25, height = 5, wrap = WORD) self.secret_text.grid(row = 3, column = 0, columnspan = 2, sticky = W)

  18. Longevity programcontinued def reveal(self): “”” Display message based on password “”” # first get the text in the password widget contents = self.pw_ent.get() if contents = “secret”: message = “Here is the secret to living to 100 “ \ live to 99 and then be careful.” else: message = “That’s not the correct password” # first delete text in widget, then insert new text self.secret_txt = delete(0.0, END) self.secret_txt = insert(0.0, message) # main root = Tk() root.title(“Longevity”) root.geometry(“250x150”) app = Application(root) root.mainloop()

  19. Program to useCheck Buttons # Movie Chooser from Tkinter import * class Application(Frame): “”” GUI Application for favorite movie types. “”” def __init__(self, master): Frame.__init__(self, master) self.grid() self.create_widgets() def create_widgets(self): # create description window Label(self, text = “Choose your favorite movie types”).grid(row = 0, column = 0, sticky = W) # create instruction label Label(self, text = “Select all that apply:”).grid(row = 1, column = 0, sticky = W)

  20. Check Buttoncontinued # create comedy check button self.likes_comedy = BooleanVar() Checkbutton(self, text = “Comedy”, variable = self.likes_comedy, command = self.update_text).grid(row = 2, column = 0, sticky = W) # create Drama check button self.likes_drama = BooleanVar() Checkbutton(self, text = “Drama”, variable = self.likes_drama, command = self.update_text).grid(row = 3, column = 0, sticky = W) # create Romance check button self.likes_romance = BooleanVar() Checkbutton(self, text = “Romance”, variable = self.likes_romance, command = self.update_text).grid(row = 4, column = 0, sticky = W)

  21. Check Buttoncontinued # create text field to display results self.results_txt = Text(self, width = 40, height = 5, wrap = WORD) self.results_txt.grid(row = 5, column = 0, columnspan = 3) def update_text(self): likes = “” if self.likes_comedy.get(): likes += “You like comedic movies.\n” if self.likes_drama.get(): likes += “You like dramatic movies.\n” if self.likes_romance.get(): likes += “You like romantic movies.\n” self.results_txt.delete(0.0, END) self.results_txt.insert(0.0, likes) # main program root = Tk() root.title(“Movie Chooser”) app = Application(root) root.mainloop()

  22. Program to useRadio Buttons # Movie chooser 2 from Tkinter import * class Application(Frame): “”” GUI Application for favorite movie types. “”” def __init__(self, master): Frame.__init__(self, master) self.grid() self.create_widgets() def create_widgets(self): # create description window Label(self, text = “Choose your favorite movie types”).grid(row = 0, column = 0, sticky = W) # create instruction label Label(self, text = “Select one:”).grid(row = 1, column = 0, sticky = W)

  23. Radio Buttons continued # create variable for favorits movie type self.favorite = StringVar() # create comedy radio button Radiobutton(self, text = “Comedy”, variable = self.favorite, value = “comedy.”, command = self.update_text).grid(row = 2, column = 0, sticky = W) # create Drama radio button Radiobutton(self, text = “Drama”, variable = self.favorite, value = “drama.”, command = self.update_text).grid(row = 3, column = 0, sticky = W) # create Romance radio button Radiobutton(self, text = “Romance”, variable = self.favorite, value = “romance.”, command = self.update_text).grid(row = 4, column = 0, sticky = W) # create text field to display results self.results_txt = Text(self, width = 40, height = 5, wrap = WORD) self.results_txt.grid(row = 5, column = 0, columnspan = 3)

  24. Radio Buttons continued def update_text(self): message = “Your favorite type of movie is “ message += self.favorite.get() self.results_txt.delete(0.0, END) self.results_txt.insert(0.0, message) # main program root = Tk() root.title(“Movie Chooser”) app = Application(root) root.mainloop()

  25. Homework • Due week 12 • Write a Python Program: • See problem #2 on page 326 of textbook. • In other words, write a GUI interface to the “Guess My Number” game from Chapter 3. • Include: • Simple Specification Document • Simple Pseudocode • Python code • Demonstrate program in class

More Related