Download - Python Programming - XIII. GUI Programming
Engr. RANEL O. PADON
XIII. GUI PROGRAMMING
PYTHON PROGRAMMING TOPICS
I•Introduction to Python Programming
II•Python Basics
III•Controlling the Program Flow
IV•Program Components: Functions, Classes, Packages, and Modules
V•Sequences (List and Tuples), and Dictionaries
VI•Object-Based Programming: Classes and Objects
VII•Customizing Classes and Operator Overloading
VIII•Object-Oriented Programming: Inheritance and Polymorphism
IX•Randomization Algorithms
X•Exception Handling and Assertions
XI•String Manipulation and Regular Expressions
XII•File Handling and Processing
XIII•GUI Programming Using Tkinter
PYTHON GUI: TKINTER
Python
Operating
System
PYTHON GUI: TKINTER
Python
Tcl
Tk
Operating
System
PYTHON GUI: TKINTER
Python
Tcl
Tk
Operating
System
Tkinter
PYTHON GUI: TKINTER
Tkinter
Operating
System
PYTHON GUI: TKINTER
Tkinter = Tcl + Tk
PYTHON GUI: TKINTER = Tcl + Tk
Tcl: Tool Command Language
invented in 1990
used for web and desktop applications, networking,
administration, scripted applications, embedded system,
rapid prototyping and testing.
PYTHON GUI: TKINTER = Tcl + Tk
Tcl: Tool Command Language
Interfacing with other Languages
Tcl/C++
Tcl/ Java
PYTHON GUI: TKINTER = Tcl + Tk
Tcl: Tool Command Language
allows extension packages, which provide additional functionality,
such as a GUI, terminal-based application automation,
database access, etc.
Tcl/Tk
Tcl/Expect
PYTHON GUI: TKINTER = Tcl + Tk
Tk: ToolKit
open-source, cross platform widget toolkit for building GUI
other common widgets are:
* Java AWT and Java Swing (OpenOffice)
* Qt (Google Earth, Skype, Linux KDE windows)
* GTK+ (Linux Gnome windows)
* Cocoa (Mac OS)
* Silverlight (modern MS Windows NT)
PYTHON GUI: TKINTER = Tcl + Tk
Tk: ToolKit
created originally for Tcl
other language bindings also exist:
* Python/Tk = Tkinter
* Perl/Tk
* Ruby/Tk
PYTHON GUI: TKINTER = Tcl + Tk
Tkinter: Tk Interface
* wrapper for Tcl to access Tk
* Python and Tcl could co-exist in a Python file.
* Python interpreter also contains Tcl and Tk interpreter
PYTHON GUI: TKINTER
Related Projects
Language Widget Toolkit
JavaAbstract Windowing Toolkit
Swing
PHPPHP - GTK
PHP - Qt
JavascriptjQuery UI
ExtJS
Python
Tkinter
Pyjamas
PyGTK
PyQt
PySide
wxPython
PYTHON GUI: TKINTER
Related Projects ( Java’s Swing with Nimbus Theme)
PYTHON GUI: TKINTER = Tcl + Tk
PYTHON GUI: TKINTER = Tcl + Tk
Tk
A GUI toolkit provided as a library of C routines.
This library manages and manipulates the windows and
handles the GUI events and user interaction.
Tcl
The (mostly hidden) language used by Tk and, hence, used
by Tkinter to communicate with the Tk toolkit.
Tkinter
The Python Tk interface. A Python module that provides a
collection of Python classes and methods for accessing the Tk
toolkit from within Python.
PYTHON GUI: TKINTER
Widget
A user interface element
(text box, combo box, or top-level window).
On Windows, the common terminology is control or window.
PYTHON GUI: Pros
Brevity
Python programs using Tkinter can be very brief, partly because
of the power of Python, but also due to Tk.
Reasonable default values are defined for many options used in
creating a widget, and packing it
(i.e., placing and displaying).
PYTHON GUI: Pros
Cross platform
Tk provides widgets on Windows, Macs, and most Unix
implementations with very little platform-specific
dependence.
Some newer GUI frameworks are achieving a degree of
platform independence, but it will be some time before
they match Tk's in this respect.
PYTHON GUI: Pros
Maturity
First released in 1990, the core is well developed and stable.
PYTHON GUI: Pros
Extensibility
Many extensions of Tk exist, and more are being frequently
distributed on the Web.
Any extension is immediately accessible from Tkinter,
if not through an extension to Tkinter,
then at least through Tkinter's access to the Tcl language.
PYTHON GUI: Cons
Speed
Most calls to Tkinter are formatted as a Tcl command
(a string) and interpreted by Tcl from where the actual Tk
calls are made.
This theoretical slowdown caused by the successive
execution of two interpreted languages is rarely seen in
practice and most real-world applications spend little time
communicating between the various levels of Python, Tcl, and
Tk.
PYTHON GUI: Cons
Tcl
Python purists often balk at the need to install another
scripting language in order to perform GUI tasks.
There is periodic interest in removing the need for Tcl
by using Tk's C-language API directly, although no such
attempt has ever succeeded.
PYTHON GUI: TKINTER
Python Widget ( Window Gadget) Subclasses
PYTHON GUI: TKINTER
Python Widgets
from Tkinter import *
Frame().mainloop()
PYTHON GUI: Frame
from Tkinter import *
class GuiTest(Frame):def __init__(self):
Frame.__init__(self)self.pack()
GuiTest().mainloop()
PYTHON GUI: Frame
from Tkinter import *
class GuiTest(Frame):def __init__(self):
Frame.__init__(self)self.pack()self.master.title("Ranel's Lugawan")
GuiTest().mainloop()
PYTHON GUI: Frame
from Tkinter import *
class GuiTest(Frame):def __init__(self):
Frame.__init__(self)self.pack()self.master.title("Ranel's Lugawan")
self.label = Label(self, text = "Ako ang Simula")self.label.pack()
GuiTest().mainloop()
PYTHON GUI: Label
from Tkinter import *
class GuiTest(Frame):def __init__(self):
…
self.text = Entry(self, name = “butas”)self.text.pack()
GuiTest().mainloop()
PYTHON GUI: Entry
from Tkinter import *
class GuiTest(Frame):def __init__(self):
…
self.text = Entry(self, name = “butas”)self.text.bind("<Return>", self.anoLaman)self.text.pack()
def anoLaman(self, propeta):print "ang laman ay", propeta.widget.get()
PYTHON GUI: Event Binding
from Tkinter import *from tkMessageBox import *
class GuiTest(Frame):def __init__(self):
…
self.text = Entry(self, name = “butas")self.text.bind("<Return>", self.anoLaman)self.text.pack()
def anoLaman(self, propeta):showinfo()
PYTHON GUI: Message Box
from Tkinter import *from tkMessageBox import *
class GuiTest(Frame):def __init__(self):
…
self.text = Entry(self, name = “butas")self.text.bind("<Return>", self.anoLaman)self.text.pack()
def anoLaman(self, propeta):pangalan = propeta.widget.winfo_name()laman = propeta.widget.get()showinfo("Message", pangalan+" : "+laman)
PYTHON GUI: Message Box
from Tkinter import *from tkMessageBox import *
class GuiTest(Frame):def __init__(self):
…
self.text = Entry(self, name = “butas")self.text.bind("<Return>", self.anoLaman)self.text.insert(INSERT, “Ano ang misyon mo?")self.text.pack()
def anoLaman(self, propeta):pangalan = propeta.widget.winfo_name()laman = propeta.widget.get()showinfo("Message", pangalan + " : " + laman)
PYTHON GUI: Entry Insert Function
from Tkinter import *from tkMessageBox import *
class GuiTest(Frame):def __init__(self):
…
self.button = Button(self, text = "Koya wag po!",\command = self.pinindot)
self.button.pack()
def pinindot(self):showinfo("Mensahe",\
"Bakit nyo ako pinindot? :(")
PYTHON GUI: Button
from Tkinter import *
class GuiTest(Frame):def __init__(self):
…
self.button = Button(self, text = "Koya wag po!",\command = self.pinindot)
self.button.bind("<Enter>", self.iLubog)self.button.bind("<Leave>", self.iAngat) self.button.pack()
def iLubog(self, propeta):propeta.widget.config(relief = GROOVE)
def iAngat(self, propeta):propeta.widget.config(relief = RAISED)
PYTHON GUI: Button Hover
class GuiTest(Frame):def __init__(self):
…
self.imageGoogle = PhotoImage(file = "google.gif")self.buttonPic = Button(self,\
image = self.imageGoogle,\command = self.pinindotPiktyur)
self.buttonPic.bind("<Enter>", self.iLubog)self.buttonPic.bind("<Leave>", self.iAngat)self.buttonPic.pack()
def pinindotPiktyur(self):showinfo("Mensahe", “Di pa po kayo bayad!")
PYTHON GUI: Button with PhotoImage
PYTHON GUI: Radiobutton
PYTHON GUI: Radiobutton
from Tkinter import *
class ChannelButton(Frame):…
ChannelButton().mainloop()
def __init__(self):Frame.__init__(self)self.master.title("Radiobutton Demo")self.master.geometry("250x60")self.pack(expand = YES, fill = BOTH)
self.laman = Entry(self, width = 60, justify = CENTER)self.laman.insert(INSERT, "Ano ang paborito mong \
Channel?")self.laman.config(state = DISABLED)self.laman.pack(padx = 5, pady = 5)
PYTHON GUI: Radiobutton
def __init__(self):…listahanNgChannels = ["GMA","ABS-CBN","TV-5","DZUP"]self.napilingChannel = StringVar()self.napilingChannel.set("DZUP")
for istasyon in listahanNgChannels:isangButones = Radiobutton(self, text = istasyon,\
value = istasyon, variable = self.napilingChannel,\
command = self.ipakitaAngNapili)isangButones.pack(side=LEFT, expand=1, fill=BOTH)
PYTHON GUI: Radiobutton
def __init__(self):…
def ipakitaAngNapili(self):print self.napilingChannel.get()
if self.napilingChannel.get() == "GMA":showinfo("Tagline", "Kapuso")
elif self.napilingChannel.get() == "ABS-CBN":showinfo("Tagline", "Kapamilya")
elif self.napilingChannel.get() == "TV-5":showinfo("Tagline", "Kapatid")
else:showinfo("Tagline", "Itanong Mo Kay Engr: \
Every Monday @ 4-5pm!")
PYTHON GUI: Checkbutton
PYTHON GUI: Checkbutton
from Tkinter import *
class CheckbuttonTest(Frame):…
CheckbuttonTest().mainloop()
PYTHON GUI: Radiobutton
def __init__(self):Frame.__init__(self)self.master.title("Check Box Demo")self.master.geometry("200x50")self.pack(expand = YES, fill = BOTH)
self.laman = Entry(self, width = 20, \font = "Arial 10", justify = CENTER)
self.laman.insert(INSERT, "Tagilid at Makapal")self.laman.pack(padx = 5, pady = 5)
PYTHON GUI: Radiobutton
def __init__(self):…
self.makapalBa = BooleanVar()self.tsekbaksMakapal = Checkbutton(self, text = \
“Pakapalin”, variable = self.makapalBa,\command = self.baguhinAngFont)
self.tsekbaksMakapal.pack(side = LEFT, expand = YES,\fill = X)
PYTHON GUI: Checkbutton
def __init__(self):…
self.tagilidBa = BooleanVar()self.tsekbaksTagilid = Checkbutton(self, text = \
"Itagilid", variable = self.tagilidBa, \command = self.baguhinAngFont)
self.tsekbaksTagilid.pack(side = LEFT, expand = YES, \fill = X)
PYTHON GUI: Checkbutton
def __init__(self):…
def baguhinAngFont(self):hitsuraNgLaman = "Arial 10"
if self.makapalBa.get():hitsuraNgLaman += " bold"
if self.tagilidBa.get():hitsuraNgLaman += " italic"
self.laman.config(font = hitsuraNgLaman)
PYTHON GUI: Checkbutton
PYTHON GUI: Checkbutton
from Tkinter import *
class TikbalangCheckbutton(Frame):…
TikbalangCheckbutton().mainloop()
PYTHON GUI: Radiobutton
def __init__(self):Frame.__init__(self)self.master.title("Checkbutton Tikbalang Demo")self.master.geometry("200x50")self.pack(expand = YES, fill = BOTH)
self.laman = Entry(self, width = 40, font = \"Arial 10", justify = CENTER)
self.laman.insert(INSERT, "Hindi Tao, Hindi Hayop")self.laman.pack(padx = 5, pady = 5)
PYTHON GUI: Radiobutton
def __init__(self):…
self.taoBa = BooleanVar()
self.tsekbaksTao = Checkbutton(self, text = "Tao",\variable = self.taoBa,\command = self.baguhinAngLaman)
self.tsekbaksTao.pack(side = LEFT, expand = YES,\fill = X)
PYTHON GUI: Checkbutton
def __init__(self):…
self.kabayoBa = BooleanVar()
self.tsekbaksKabayo = Checkbutton(self,\text = "Kabayo",\
variable = self.kabayoBa,\command = self.baguhinAngLaman)
self.tsekbaksKabayo.pack(side = LEFT, expand = YES,\fill = X)
PYTHON GUI: Checkbutton
def baguhinAngLaman(self):if self.taoBa.get() and self.kabayoBa.get():
self.laman.delete(0, END)self.laman.insert(INSERT, "Tikbalang")
elif self.taoBa.get() and not self.kabayoBa.get():self.laman.delete(0, END)self.laman.insert(INSERT, "Tao")
elif not self.taoBa.get() and self.kabayoBa.get():self.laman.delete(0, END)self.laman.insert(INSERT, "Kabayo")
else:self.laman.delete(0, END)self.laman.insert(INSERT, "Hindi Tao, Hindi Hayop")
PYTHON GUI: Checkbutton
PYTHON GUI: Grid Layout
from Tkinter import *
class PinasGrid(Frame):…
PinasGrid().mainloop()
PYTHON GUI: Grid Layout
def __init__(self):Frame.__init__(self)self.master.title("Tayo na sa Pinas")self.master.geometry("350x250")self.pack(expand=1, fill=BOTH)
self.hilaga = Button(self, text="Hilaga", \command=self.pumuntaSaHilaga)
self.hilaga.grid(row=0, columnspan=3, sticky = \W+E+N+S, padx=5, pady=5)
self.kanluran = Button(self, text="Kanluran", \command=self.pumuntaSaKanluran)
self.kanluran.grid(row=1, column=0, sticky = \W+E+N+S, padx=5, pady=5)
PYTHON GUI: Grid Layout
def __init__(self):…self.sentro = Label(self, text="Tayo na sa Pinas!",\
foreground="blue")self.sentro.grid(row=1, column=1, sticky = W+E+N+S)
self.silangan = Button(self, text="Silangan",\command=self.pumuntaSaSilangan)
self.silangan.grid(row=1, column=2, sticky = \W+E+N+S, padx=5, pady=5)
self.timog = Button(self, text="Timog",\command=self.pumuntaSaTimog)
self.timog.grid(row=2, columnspan=3, sticky = \W+E+N+S, padx=5, pady=5)
PYTHON GUI: Grid Layout
def __init__(self):…
self.columnconfigure(0, weight = 1)self.columnconfigure(1, weight = 1)self.columnconfigure(2, weight = 1)
self.rowconfigure(0, weight = 1)self.rowconfigure(1, weight = 1)self.rowconfigure(2, weight = 1)
PYTHON GUI: Grid Layout
def __init__(self):…
def pumuntaSaHilaga(self):self.sentro.config(text = "Tayo na sa Batanes!")
def pumuntaSaKanluran(self):self.sentro.config(text = "Tayo na sa Palawan!")
def pumuntaSaSilangan(self):self.sentro.config(text = "Tayo na sa Cebu!")
def pumuntaSaTimog(self):self.sentro.config(text = "Tayo na sa Sulu")
PYTHON GUI: Grid Layout
PYTHON GUI: Calculator
PYTHON GUI: Calculator
PYTHON GUI: Calculator
PYTHON GUI: Calculator
from __future__ import divisionfrom Tkinter import *
class CalcuNiRanie(Frame):…
CalcuNiRanie().mainloop()
PYTHON GUI: Calculator
def __init__(self):Frame.__init__(self)self.master.title("Calcu ni Kuya Ranie")self.master.geometry("250x250")self.pack(expand=1, fill=BOTH)
self.frame1 = Frame(self)self.frame1.pack(expand=0, fill = BOTH)
self.screen = Entry(self.frame1)self.screen.pack(expand=1, fill = BOTH,\
padx = 5, pady = 5)self.screen.config(justify=RIGHT, font = "Arial 18")
PYTHON GUI: Calculator
def __init__(self):…
self.frame2 = Frame(self)self.frame2.pack(expand=1, fill=BOTH)
self.pito = Button(self.frame2, text = "7", \command = self.pito)
self.pito.grid(row=1, column=0, sticky = W+E+N+S)self.walo = Button(self.frame2, text = "8", …self.walo.grid(row=1, column=1, sticky = W+E+N+S)…
self.katimbang = Button(self.frame2, text = "=", \command = self.anoAngSagot)
self.katimbang.grid(row=4, column=2, sticky = W+E+N+S)
PYTHON GUI: Calculator
def __init__(self):…
self.frame2.columnconfigure(0, weight = 1)self.frame2.columnconfigure(1, weight = 1)self.frame2.columnconfigure(2, weight = 1)self.frame2.columnconfigure(3, weight = 1)
self.frame2.rowconfigure(1, weight = 1)self.frame2.rowconfigure(2, weight = 1)self.frame2.rowconfigure(3, weight = 1)self.frame2.rowconfigure(4, weight = 1)
PYTHON GUI: Calculator
def __init__(self):…
def pito(self):self.screen.insert(END,'7')
def walo(self):self.screen.insert(END,'8')
…
def anoAngSagot(self):sagot = eval(self.screen.get())self.screen.delete(0, END)self.screen.insert(END, sagot)
PYTHON GUI: Calculator
use the eval() function for evaluating arithmetic operations
involving string parameters containing numbers
>>print eval("3 + 4")
#prints the answer: 7
PYTHON GUI: Calculator
Python Mega Widgets (Pmw)
toolkit that provides high-level GUI components from the
combinations of Tkinter widgets
* Menubar, ScrolledText, etc.
PYTHON GUI: Pmw
Download Pmw and extract the contents of src folder to a folder
e.g. extract to: C:\Pyhon27\src
PYTHON GUI: Pmw
Run the setup.py executable file in Command Prompt
(install is a command-line parameter of setup.py ):
It means it could not find a python.exe file to run setup.py,
hence you must add the Path of python interpreter/executable file
to the System Path in the Environment variables.
For example add:
;C:\Pyhon27
to the list of Path of your operating system’s Environment Variables.
PYTHON GUI: Pmw
Detailed Step for Adding Python to Environment Variables:
right-click Computer > Properties > Advanced System Settings
> Advanced > Environment Variables
double-click the Path in the list of System Variables
append the location of python.exe (usually located in C:\Python27)
;C:\Python27
Click OK to all window dialog options.
Then, be sure to restart the command prompt!!!
PYTHON GUI: Pmw
PYTHON GUI: Pmw.ScrolledText
PYTHON GUI: Pmw.ScrolledText
from Tkinter import *import Pmw
class LakasNgScrolledText(Frame):…
LakasNgScrolledText().mainloop()
def __init__(self):Frame.__init__(self)Pmw.initialise()self.packself.master.geometry("150x100")
self.butas = Entry(self)self.butas.bind("<Return>", self.iTeleport)self.butas.pack()
self.dingding = Pmw.ScrolledText(self,\text_width = 25, text_height = 12,\text_wrap = WORD)
self.dingding.pack(side=BOTTOM, expand=1, fill=BOTH,\padx=5, pady=5)
PYTHON GUI: Pmw.ScrolledText
S not Z!
def __init__(self): …
def iTeleport(self, propeta):lamanNgButas = propeta.widget.get()
self.dingding.settext(self.dingding.get() + \lamanNgButas)
self.butas.delete(0, END)
self.dingding.insert(END, lamanNgButas + "\n")
PYTHON GUI: Pmw.ScrolledText
PYTHON GUI: Pmw.Menubar
PYTHON GUI: Pmw.Menubar
from Tkinter import *import Pmwimport tkMessageBox
class TindahanNiBudoy (Frame):…
TindahanNiBudoy().mainloop()
def __init__(self):Frame.__init__(self)Pmw.initialise()self.master.geometry("300x200")self.pack(expand=1, fill=BOTH)
self.sabitanNgPaninda = Pmw.MenuBar(self)self.sabitanNgPaninda.pack(fill=X)
self.sabitanNgPaninda.addmenu("Mga Paninda","Bili na")
self.sabitanNgPaninda.addmenuitem("Mga Paninda", \"command", label = "Lugaw",\command = self.initinAngLugaw)
self.sabitanNgPaninda.addcascademenu("Mga Paninda",\"Chichiria")
PYTHON GUI: Pmw.Menubar
def __init__(self):…
self.mayBoyBawang = BooleanVar()
self.sabitanNgPaninda.addmenuitem("Chichiria",\"checkbutton", label = "Boy Bawang",\command = self.idagdagAngBoyBawang,\variable = self.mayBoyBawang)
PYTHON GUI: Pmw.Menubar
def __init__(self): …
def initinAngLugaw(self):tkMessageBox.showinfo(None,\
"Unlimited Lugaw for P20!")
def idagdagAngBoyBawang(self):if self.mayBoyBawang.get():
tkMessageBox.showinfo(None,\"Boy Bawang toppings on the go!")
PYTHON GUI: Pmw.Menubar
PYTHON GUI: Other Tk functionalities
1. File Dialog for file handling
2. Closing inner and main windows
3. Drawing on Canvas widget (lines, text, ovals, etc)
4. Sliding/Adjusting values using the Scale widget
5. Animating Shapes/Blinking Rectangle
PYTHON GUI: FileDialog
PYTHON GUI: FileDialog
from Tkinter import *#Pmw not needed here!import tkFileDialog
class PambukasNgPapeles(Frame):…
PambukasNgPapeles().mainloop()
def __init__(self):Frame.__init__(self)self.master.geometry("200x100")self.pack(expand=1, fill=BOTH)
self.mahiwagangButones = Button(self,\text="Buksan Now Na", command=self.buksan)
self.mahiwagangButones.pack()
PYTHON GUI: FileDialog
PYTHON GUI: FileDialog
Lugaw: 100
Chichiria: 40
Utang: 20
BentaNiBudoy.txt
def __init__(self):…
def buksan(self):inputFile = tkFileDialog.askopenfile()
for linya in inputFile:mgaSalita = linya.split()
print mgaSalita
inputFile.close()
PYTHON GUI: FileDialog
def __init__(self):…
def buksan(self): inputFile = tkFileDialog.askopenfile()
for linya in inputFile:mgaSalita = linya.split(“:”)
print mgaSalita[0]print mgaSalita[1]
inputFile.close()
PYTHON GUI: FileDialog (Remove Colon)
def __init__(self):…
def buksan(self): inputFile = tkFileDialog.askopenfile()
for linya in inputFile:mgaSalita = linya.split(“:”)
for salita in mgaSalita: if salita[-1] == “\n”:
salita = salita[0:-1]print salita
inputFile.close()
PYTHON GUI: FileDialog (Remove Newline)
def __init__(self):…
def buksan(self): inputFile = tkFileDialog.askopenfile()
for linya in inputFile:mgaSalita = linya.split(“:”)
for salita in mgaSalita: if salita[-1] == “\n”:
salita = salita[0:-1]print salita,
inputFile.close()
PYTHON GUI: FileDialog (Remove Newline)
PYTHON GUI: Closing Window
PYTHON GUI: Closing Window
from Tkinter import *import tkMessageBox
class Panggunaw(Frame):…
Panggunaw().mainloop()
def __init__(self):Frame.__init__(self)self.master.geometry("200x100")self.pack(expand=1, fill=BOTH)
self.gunawButones = Button(self,\text="Gunawin and mundo", command=self.gunawin)
self.gunawButones.pack()
PYTHON GUI: Closing Window
def __init__(self):…
def gunawin(self):if tkMessageBox.askokcancel("Gunawin ang Mundo",\
"Sigurado po kayo?"):self.destroy()
PYTHON GUI: Closing Window
PYTHON GUI: Canvas
PYTHON GUI: Canvas Coordinate System
PYTHON GUI: Canvas
from Tkinter import *
class MgaLinya(Frame):…
MgaLinya().mainloop()
def __init__(self):Frame.__init__(self)self.master.geometry("200x300")self.pack()
self.pader = Canvas(self)self.pader.pack()
self.linyangPatayo = self.pader.create_line(\100, 0, 100, 200)
self.linyangPahiga = self.pader.create_line(\0, 100, 200, 100)
self.sentrongLetra = self.pader.create_text(\100, 100, text="Sentro ng Mundo")
PYTHON GUI: Canvas
def __init__(self):...
self.mahiwagangButones = Button(self, \text= "Burahin ang nakasulat",\command=self.burahin)
self.mahiwagangButones.pack()
def burahin(self):self.pader.delete(self.sentrongLetra)
PYTHON GUI: Canvas
PYTHON GUI: Sine Curve
PYTHON GUI: Sine Curve
# plot a function like y = A*sin(x) + C
from Tkinter import *import math
class SineCurve(Frame):def __init__(self):
...
SineCurve().mainloop()
PYTHON GUI: Sine Curve
def __init__(self):Frame.__init__(self)self.pack()
width = 400height = 300sentro = height//2
self.c = Canvas(width=width, height=height,\bg="white")
self.c.pack()
PYTHON GUI: Sine Curve
def __init__(self):...
str1 = "sin(x)=blue cos(x)=red"self.c.create_text(10, 20, anchor=SW, text=str1)
center_line = self.c.create_line(0, sentro, width,\sentro, fill="green")
sin_line = self.c.create_line(self.curve(sentro,\flag="sine"), fill="blue")
cos_line = self.c.create_line(self.curve(sentro,\flag="cosine"), fill="red")
PYTHON GUI: Sine Curve
def curve(self, sentro, flag):x_increment = 1x_factor = 0.04 # width stretchy_amplitude = 80 # height stretch
xy = []for x in range(400):
xy.append(x*x_increment) #x coordinates
#y coordinatesif flag == "sine":
xy.append(int(math.sin(x*x_factor) *\y_amplitude) + sentro)
else:xy.append(int(math.cos(x*x_factor) *\
y_amplitude) + sentro)
return xy
PYTHON GUI: Circle Slider/Scale Widget
PYTHON GUI: Circle Slider/Scale Widget
from Tkinter import *
class CircleSlider(Frame):def __init__(self):
...
CircleSlider().mainloop()
PYTHON GUI: Circle Slider/Scale Widget
def __init__(self):Frame.__init__(self)self.pack(expand=YES, fill=BOTH)self.master.geometry("460x420")
self.slider = Scale(self, from_=0, to=400,\orient=VERTICAL,\
command=self.redraw_bilog)self.slider.pack(side=LEFT, fill=Y)
self.display = Canvas(self, bg="gray")self.display.pack(expand=YES, fill=BOTH)
PYTHON GUI: Circle Slider/Scale Widget
def __init__(self):...
def redraw_bilog(self, current_cursor):self.display.delete("bilog")dulo = int(current_cursor)self.display.create_oval(0, 0, dulo, dulo,\
fill="green", tags="bilog")
PYTHON GUI: Blinking Rectangle
PYTHON GUI: Blinking Rectangle
from Tkinter import *
class BlinkingRectangle(Frame):def __init__(self):
...
BlinkingRectangle().mainloop()
PYTHON GUI: Blinking Rectangle
def __init__(self):Frame.__init__(self)self.pack()
self.canvas = Canvas(self, height = 100, width = 100)self.canvas.pack()
self.rect = self.canvas.create_rectangle(25, 25,\75, 75, fill = "red")
self.do_blink = False
PYTHON GUI: Blinking Rectangle
def __init__(self):...
start_button = Button(self, text="start blinking",\command=self.start_blinking)
start_button.pack()
stop_button = Button(self, text="stop blinking",\command=self.stop_blinking)
stop_button.pack()
PYTHON GUI: Blinking Rectangle
def __init__(self):...
def start_blinking(self):self.do_blink = Trueself.blink()
def stop_blinking(self):self.do_blink = False
PYTHON GUI: Blinking Rectangle
def __init__(self):...
def blink(self):if self.do_blink == True:
current_color = self.canvas.itemcget(self.rect,\"fill")
if current_color == "red":new_color = "blue“
else:new_color = "red"
self.canvas.itemconfigure(self.rect,\fill=new_color)
self.after(1000, self.blink)
REFERENCES
Deitel, Deitel, Liperi, and Wiedermann - Python: How to Program (2001).
Grayson - Python and Tkinter Programming (2000).
Disclaimer: Most of the images/information used here have no proper source citation, and I do not
claim ownership of these either. I don’t want to reinvent the wheel, and I just want to reuse and
reintegrate materials that I think are useful or cool, then present them in another light, form, or
perspective. Moreover, the images/information here are mainly used for illustration/educational
purposes only, in the spirit of openness of data, spreading light, and empowering people with
knowledge.