Python GUI Tk : Button
Button cursor: gumby
from Tkinter import * widget = Button(text='Spam', padx=10, pady=10) widget.pack(padx=20, pady=20) widget.config(cursor='gumby') widget.config(font=('helvetica', 20, 'underline italic')) mainloop()
Button focus
from Tkinter import * class MyApp: def __init__(self, parent): self.myParent = parent self.myContainer1 = Frame(parent) self.myContainer1.pack() button_name = "OK" self.button1 = Button(self.myContainer1, command=self.buttonHandler(button_name, 1, "Good stuff!")) self.button1.configure(text=button_name) self.button1.pack(side=LEFT) self.button1.focus_force() # Put keyboard focus on button1 button_name = "Cancel" self.button2 = Button(self.myContainer1, command=self.buttonHandler(button_name, 2, "Bad stuff!")) self.button2.configure(text=button_name) self.button2.pack(side=LEFT) def buttonHandler(self, arg1, arg2, arg3): print "" def buttonHandler_a(self, event, arg1, arg2, arg3): print "" root = Tk() myapp = MyApp(root) root.mainloop()
Menu Button Demo
from Tkinter import * root = Tk() mbutton = Menubutton(root, text='Food') # the pull-down stands alone picks = Menu(mbutton) mbutton.config(menu=picks) picks.add_command(label='A', command=root.quit) picks.add_command(label='B', command=root.quit) picks.add_command(label='C', command=root.quit) mbutton.pack() mbutton.config(bg='white', bd=4, relief=RAISED) root.mainloop()
Menu Button Demo
from Tkinter import * root = Tk() mbutton = Menubutton(root, text='Food') # the pull-down stands alone picks = Menu(mbutton) mbutton.config(menu=picks) picks.add_command(label='A', command=root.quit) picks.add_command(label='B', command=root.quit) picks.add_command(label='C', command=root.quit) mbutton.pack() mbutton.config(bg='white', bd=4, relief=RAISED) root.mainloop()
Radio Button Menu
from Tkinter import * class TestMenu: def __init__(self, master): self.master = master self.menubar = Menu(self.master) self.radmenu = Menu(self.menubar) self.radmenu.add_radiobutton(label='A') self.radmenu.add_radiobutton(label='B') self.radmenu.add_radiobutton(label='C') self.radmenu.add_radiobutton(label='D') self.radmenu.add_radiobutton(label='E') self.radmenu.add_radiobutton(label='F') self.radmenu.add_radiobutton(label='G') self.radmenu.add_radiobutton(label='H') self.radmenu.add_radiobutton(label='I') self.menubar.add_cascade(label="Radiobutton Menu", menu=self.radmenu) self.top = Toplevel(menu=self.menubar, width=500, relief=RAISED, borderwidth=2) def main(): root = Tk() root.withdraw() app = TestMenu(root) root.mainloop() if __name__ == '__main__': main()
Check box menu
from Tkinter import * class TestMenu: def __init__(self, master): self.master = master self.menubar = Menu(self.master) self.chkmenu = Menu(self.menubar) self.chkmenu.add_checkbutton(label='A') self.chkmenu.add_checkbutton(label='B') self.chkmenu.add_checkbutton(label="C") self.chkmenu.add_checkbutton(label='D') self.chkmenu.add_checkbutton(label='E') self.chkmenu.invoke(self.chkmenu.index('C')) self.menubar.add_cascade(label="Checkbutton Menu", menu=self.chkmenu) self.top = Toplevel(menu=self.menubar, width=500, relief=RAISED, borderwidth=2) def main(): root = Tk() root.withdraw() app = TestMenu(root) root.mainloop() if __name__ == '__main__': main()
Add a button to frame
from Tkinter import * class Hello(Frame): def __init__(self, parent=None): Frame.__init__(self, parent) self.pack() self.make_widgets() def make_widgets(self): widget = Button(self, text='Hello world', command=self.quit) widget.pack(side=LEFT) if __name__ == '__main__': Hello().mainloop()
Simple Button Action
from Tkinter import * class Hello(Frame): def __init__(self, parent=None): Frame.__init__(self, parent) self.pack() self.make_widgets() def make_widgets(self): widget = Button(self, text='Hello world', command=self.quit) widget.pack(side=LEFT) if __name__ == '__main__': Hello().mainloop()
Disable a button
from Tkinter import * class Hello(Frame): def __init__(self, parent=None): Frame.__init__(self, parent) self.pack() self.make_widgets() def make_widgets(self): widget = Button(self, text='Hello world', command=self.quit) widget.pack(side=LEFT) widget.configure(state=DISABLED, background='cadetblue') if __name__ == '__main__': Hello().mainloop()
Enable a button
from Tkinter import * class Hello(Frame): def __init__(self, parent=None): Frame.__init__(self, parent) self.pack() self.make_widgets() def make_widgets(self): widget = Button(self, text='Hello world', command=self.quit) widget.pack(side=LEFT) widget.configure(state=DISABLED, background='cadetblue') widget.configure(state=NORMAL, background='red') if __name__ == '__main__': Hello().mainloop()
Set Button to get focus
from Tkinter import * class Hello(Frame): def __init__(self, parent=None): Frame.__init__(self, parent) self.pack() self.make_widgets() def make_widgets(self): widget = Button(self, text='Hello world', command=self.quit) widget.pack(side=LEFT) widget.configure(state=DISABLED, background='cadetblue') widget.configure(state=NORMAL, background='red') widget.focus_set() if __name__ == '__main__': Hello().mainloop()
Button Border styles
from Tkinter import * class GUI: def __init__(self): self.root = Tk() self.root.title('Button Styles') for bdw in range(5): setattr(self, 'of%d' % bdw, Frame(self.root, borderwidth=0)) Label(getattr(self, 'of%d' % bdw), text='borderwidth = %d ' % bdw).pack(side=LEFT) for relief in [RAISED, SUNKEN, FLAT, RIDGE, GROOVE, SOLID]: Button(getattr(self, 'of%d' % bdw), text=relief, borderwidth=bdw, relief=relief, width=10, command=lambda s=self, r=relief, b=bdw: s.prt(r,b))\ .pack(side=LEFT, padx=7-bdw, pady=7-bdw) getattr(self, 'of%d' % bdw).pack() def prt(self, relief, border): print '%s:%d' % (relief, border) myGUI = GUI() myGUI.root.mainloop()
Button action to set Button background
from Tkinter import * class App: def __init__(self, master): frame = Frame(master) frame.pack() self.button = Button(frame, text="QUIT", fg="red", command=frame.quit) self.button.pack(side=LEFT) self.hi_there = Button(frame, text="Hello", command=self.say_hi) self.hi_there.pack(side=LEFT) def say_hi(self): if self.hi_there["background"] == "green": self.hi_there["background"] = "yellow" else: self.hi_there["background"] = "green" root = Tk() app = App(root) root.mainloop()
Button event binding: without passing the event as an argument
from Tkinter import * class MyApp: def __init__(self, parent): self.myParent = parent self.myContainer1 = Frame(parent) self.myContainer1.pack() button_name = "OK" # command binding self.button1 = Button(self.myContainer1, command = lambda arg1=button_name, arg2=1, arg3="Good stuff!" : self.buttonHandler(arg1, arg2, arg3) ) # event binding -- passing the event as an argument self.button1.bind("<Return>", lambda event, arg1=button_name, arg2=1, arg3="Good stuff!" : self.buttonHandler_a(event, arg1, arg2, arg3) ) self.button1.configure(text=button_name, background="green") self.button1.pack(side=LEFT) self.button1.focus_force() # Put keyboard focus on button1 button_name = "Cancel" self.button2 = Button(self.myContainer1, command = lambda arg1=button_name, arg2=2, arg3="Bad stuff!": self.buttonHandler(arg1, arg2, arg3) ) self.button2.bind("<Return>", lambda event, arg1=button_name, arg2=2, arg3="Bad stuff!" : self.buttonHandler(arg1, arg2, arg3) ) self.button2.configure(text=button_name, background="red") self.button2.pack(side=LEFT) def buttonHandler_a(self, event, argument1, argument2, argument3): print "buttonHandler_a received event", event self.buttonHandler(argument1, argument2, argument3) root = Tk() myapp = MyApp(root) root.mainloop()
Button focus
from Tkinter import * class MyApp: def __init__(self, parent): self.myParent = parent self.myContainer1 = Frame(parent) self.myContainer1.pack() button_name = "OK" self.button1 = Button(self.myContainer1, command=self.buttonHandler(button_name, 1, "Good stuff!")) self.button1.configure(text=button_name) self.button1.pack(side=LEFT) self.button1.focus_force() # Put keyboard focus on button1 button_name = "Cancel" self.button2 = Button(self.myContainer1, command=self.buttonHandler(button_name, 2, "Bad stuff!")) self.button2.configure(text=button_name) self.button2.pack(side=LEFT) def buttonHandler(self, arg1, arg2, arg3): print "" def buttonHandler_a(self, event, arg1, arg2, arg3): print "" root = Tk() myapp = MyApp(root) root.mainloop()
create a button, and put it into a Container
from Tkinter import * root = Tk() myContainer1 = Frame(root) myContainer1.pack() button1 = Button(myContainer1) button1["text"]= "Hello, World!" button1["background"] = "green" button1.pack() root.mainloop()
Set Button background by property name
from Tkinter import * root = Tk() myContainer1 = Frame(root) myContainer1.pack() button1 = Button(myContainer1) button1["text"]= "Hello, World!" button1["background"] = "green" button1.pack() root.mainloop()
Specify the button's properties
from Tkinter import * class MyApp: def __init__(self, parent): self.myContainer1 = Frame(parent) self.myContainer1.pack() self.button1 = Button(self.myContainer1) self.button1["text"] = "aaa" self.button1["background"] = "green" self.button1.pack() self.button2 = Button(self.myContainer1) self.button2.configure(text="bbb") self.button2.configure(background="tan") self.button2.pack() self.button3 = Button(self.myContainer1) self.button3.configure(text="ccc", background="cyan") self.button3.pack() self.button4 = Button(self.myContainer1, text="ddd", background="red") self.button4.pack() root = Tk() myapp = MyApp(root) root.mainloop()
Button action inside a class
from Tkinter import * class App: def __init__(self, master): frame = Frame(master) frame.pack() self.button = Button(frame, text="QUIT", fg="red", command=frame.quit) self.button.pack(side=LEFT) self.hi_there = Button(frame, text="Hello", command=self.say_hi) self.hi_there.pack(side=LEFT) def say_hi(self): print "hi!" root = Tk() app = App(root) root.mainloop()
Button widthfrom Tkinter import * root = Tk() def callback(): print "called the callback!" # create a toolbar toolbar = Frame(root) b = Button(toolbar, text="new", width=16, command=callback) b.pack(side=LEFT, padx=2, pady=2) b = Button(toolbar, text="open", width=6, command=callback) b.pack(side=LEFT, padx=2, pady=2) toolbar.pack(side=TOP, fill=X) mainloop()Buttons on a toolbarfrom Tkinter import * root = Tk() def callback(): print "called the callback!" # create a toolbar toolbar = Frame(root) b = Button(toolbar, text="new", width=6, command=callback) b.pack(side=LEFT, padx=2, pady=2) b = Button(toolbar, text="open", width=6, command=callback) b.pack(side=LEFT, padx=2, pady=2) toolbar.pack(side=TOP, fill=X) mainloop()Button foreground colorfrom Tkinter import * class App: def __init__(self, master): frame = Frame(master) frame.pack() self.button = Button(frame, text="QUIT", fg="red", command=frame.quit) self.button.pack(side=LEFT) self.hi_there = Button(frame, text="Hello", command=self.say_hi) self.hi_there.pack(side=LEFT) def say_hi(self): print "hi there, everyone!" root = Tk() app = App(root) root.mainloop()Creating buttonsfrom Tkinter import * root = Tk() root.title("Demonstrates creating buttons") root.geometry("200x85") app = Frame(root) app.grid() bttn1 = Button(app, text = "OK!") bttn1.grid() bttn2 = Button(app) bttn2.grid() bttn2.configure(text = "Cancel") bttn3 = Button(app) bttn3.grid() bttn3["text"]= "Apply" root.mainloop()Button single click and double clickfrom Tkinter import * def hello(event): print 'Double Click to exit' def quit(event): print 'You double clicked...' import sys; sys.exit() widget = Button(None, text='Hello event world') widget.pack() widget.bind('<Button-1>', hello) # bind left mouse clicks widget.bind('<Double-1>', quit) # bind double left clicks widget.mainloop()Use lambda to generate a call back function for a buttonfrom Tkinter import * from sys import stdout, exit widget = Button(None, text='Hello event world', command=(lambda: stdout.write('Hello lambda world\n') or exit()) ) widget.pack() widget.mainloop()adds user-defined callbacks as button actionfrom Tkinter import * def quit(): print 'Hello...' import sys; sys.exit() widget = Button(None, text='Hello event world', command=quit) widget.pack() widget.mainloop()Subclasses buttonfrom Tkinter import * class HelloButton(Button): def __init__(self, parent=None, **config): Button.__init__(self, parent, config) self.pack() self.config(command=self.callback) def callback(self): print 'Hi' self.quit() if __name__ == '__main__': HelloButton(text='Hello Button').mainloop()Subclass HelloButton: redefine press-handler methodfrom Tkinter import * class HelloButton(Button): def __init__(self, parent=None, **config): Button.__init__(self, parent, config) self.pack() self.config(command=self.callback) def callback(self): print 'Hiiii...' self.quit() class MyButton(HelloButton): def callback(self): print "Ignoring press!..." if __name__ == '__main__': MyButton(None, text='My Button').mainloop()Sub class button: add callback method and pack myselffrom Tkinter import * class HelloButton(Button): def __init__(self, parent=None, side=TOP, **config): Button.__init__(self, parent, config) self.pack(side=side) self.config(command=self.callback) def callback(self): print 'callback...' self.quit() if __name__ == '__main__': HelloButton(side=LEFT, text='Hello Button').mainloop()Sub class button: add callback method and use a dictionaryfrom Tkinter import * class HelloButton(Button): def __init__(self, parent=None, config={}): Button.__init__(self, parent, config) self.pack() self.config(command=self.callback) def callback(self): print 'Hi...' self.quit() if __name__ == '__main__': HelloButton(None, {'text': 'Hi'}).mainloop()Button border sizefrom Tkinter import * widget = Button(text='Spam', padx=10, pady=10) widget.pack(padx=20, pady=20) widget.config(bd=8, relief=RAISED) widget.config(font=('helvetica', 20, 'underline italic')) mainloop()Button border effects: RAISEDfrom Tkinter import * widget = Button(text='Spam', padx=10, pady=10) widget.pack(padx=20, pady=20) widget.config(bd=8, relief=RAISED) widget.config(font=('helvetica', 20, 'underline italic')) mainloop()Button background, foreground and fontfrom Tkinter import * widget = Button(text='Spam', padx=10, pady=10) widget.pack(padx=20, pady=20) widget.config(bg='dark green', fg='white') widget.config(font=('helvetica', 20, 'underline italic')) mainloop()Button width and heightfrom Tkinter import * widget = Button(text='Spam', padx=50, pady=10) widget.pack(padx=20, pady=20) mainloop()Config button propertiesfrom Tkinter import * widget = Button(text='Spam', padx=10, pady=10) widget.pack(padx=20, pady=20) widget.config(cursor='gumby') widget.config(bd=8, relief=RAISED) widget.config(bg='dark green', fg='white') widget.config(font=('helvetica', 20, 'underline italic')) mainloop()Add gif image to a buttongifdir = "./" from Tkinter import * win = Tk() igm = PhotoImage(file=gifdir+"logo.gif") Button(win, image=igm).pack() win.mainloop()Bind mouse single click and double click to a buttonfrom Tkinter import * def hello(event): print 'Double Click to exit' def quit(event): print 'You double clicked...' import sys; sys.exit() widget = Button(None, text='Hello event world') widget.pack() widget.bind('<Button-1>', hello) # bind left mouse clicks widget.bind('<Double-1>', quit) # bind double left clicks widget.mainloop()LED controlfrom Tkinter import * SQUARE = 1 ROUND = 2 ARROW = 3 POINT_DOWN = 0 POINT_UP = 1 POINT_RIGHT = 2 POINT_LEFT = 3 STATUS_OFF = 1 STATUS_ON = 2 STATUS_WARN = 3 STATUS_ALARM = 4 STATUS_SET = 5 class DummyClass: pass Color = DummyClass() Color.PANEL = '#545454' Color.OFF = '#656565' Color.ON = '#00FF33' Color.WARN = '#ffcc00' Color.ALARM = '#ff4422' class LED: def __init__(self, master=None, width=25, height=25, appearance=FLAT, status=STATUS_ON, bd=1, bg=None, shape=SQUARE, outline="", blink=0, blinkrate=1, orient=POINT_UP, takefocus=0): # preserve attributes self.master = master self.shape = shape self.onColor = Color.ON self.offColor = Color.OFF self.alarmColor = Color.ALARM self.warningColor = Color.WARN self.specialColor = '#00ffdd' self.status = status self.blink = blink self.blinkrate = int(blinkrate) self.on = 0 self.onState = None if not bg: bg = Color.PANEL ## Base frame to contain light self.frame=Frame(master, relief=appearance, bg=bg, bd=bd, takefocus=takefocus) basesize = width d = center = int(basesize/2) if self.shape == SQUARE: self.canvas=Canvas(self.frame, height=height, width=width, bg=bg, bd=0, highlightthickness=0) self.light=self.canvas.create_rectangle(0, 0, width, height, fill=Color.ON) elif self.shape == ROUND: r = int((basesize-2)/2) self.canvas=Canvas(self.frame, width=width, height=width, highlightthickness=0, bg=bg, bd=0) if bd > 0: self.border=self.canvas.create_oval(center-r, center-r, center+r, center+r) r = r - bd self.light=self.canvas.create_oval(center-r-1, center-r-1, center+r, center+r, fill=Color.ON, outline=outline) else: # Default is an ARROW self.canvas=Canvas(self.frame, width=width, height=width, highlightthickness=0, bg=bg, bd=0) x = d y = d if orient == POINT_DOWN: self.light=self.canvas.create_polygon(x-d,y-d, x,y+d, x+d,y-d, x-d,y-d, outline=outline) elif orient == POINT_UP: self.light=self.canvas.create_polygon(x,y-d, x-d,y+d, x+d,y+d, x,y-d, outline=outline) elif orient == POINT_RIGHT: self.light=self.canvas.create_polygon(x-d,y-d, x+d,y, x-d,y+d, x-d,y-d, outline=outline) elif orient == POINT_LEFT: self.light=self.canvas.create_polygon(x-d,y, x+d,y+d, x+d,y-d, x-d,y, outline=outline) self.canvas.pack(side=TOP, fill=X, expand=NO) self.update() def turnon(self): self.status = STATUS_ON if not self.blink: self.update() def turnoff(self): self.status = STATUS_OFF if not self.blink: self.update() def alarm(self): self.status = STATUS_ALARM if not self.blink: self.update() def warn(self): self.status = STATUS_WARN if not self.blink: self.update() def set(self, color): self.status = STATUS_SET self.specialColor = color self.update() def blinkon(self): if not self.blink: self.blink = 1 self.onState = self.status self.update() def blinkoff(self): if self.blink: self.blink = 0 self.status = self.onState self.onState = None self.on = 0 self.update() def blinkstate(self, blinkstate): if blinkstate: self.blinkon() else: self.blinkoff() def update(self): # First do the blink, if set to blink if self.blink: if self.on: if not self.onState: self.onState = self.status self.status = STATUS_OFF self.on = 0 else: if self.onState: self.status = self.onState # Current ON color self.on = 1 if self.status == STATUS_ON: self.canvas.itemconfig(self.light, fill=self.onColor) elif self.status == STATUS_OFF: self.canvas.itemconfig(self.light, fill=self.offColor) elif self.status == STATUS_WARN: self.canvas.itemconfig(self.light, fill=self.warningColor) elif self.status == STATUS_SET: self.canvas.itemconfig(self.light, fill=self.specialColor) else: self.canvas.itemconfig(self.light, fill=self.alarmColor) self.canvas.update_idletasks() if self.blink: self.frame.after(self.blinkrate * 1000, self.update) if __name__ == '__main__': class TestLEDs(Frame): def __init__(self, parent=None): # List of Colors and Blink On/Off states = [(STATUS_OFF, 0), (STATUS_ON, 0), (STATUS_WARN, 0), (STATUS_ALARM, 0), (STATUS_SET, 0), (STATUS_ON, 1), (STATUS_WARN, 1), (STATUS_ALARM, 1), (STATUS_SET, 1)] # List of LED types to display, # with sizes and other attributes leds = [(ROUND, 25, 25, FLAT, 0, None, ""), (ROUND, 15, 15, RAISED, 1, None, ""), (SQUARE, 20, 20, SUNKEN, 1, None, ""), (SQUARE, 8, 8, FLAT, 0, None, ""), (SQUARE, 8, 8, RAISED, 1, None, ""), (SQUARE, 16, 8, FLAT, 1, None, ""), (ARROW, 14, 14, RIDGE, 1, POINT_UP, ""), (ARROW, 14, 14, RIDGE, 0, POINT_RIGHT, ""), (ARROW, 14, 14, FLAT, 0, POINT_DOWN, "white")] Frame.__init__(self) # Do superclass init self.pack() self.master.title('LED Example - Stage 1') # Iterate for each type of led for shape, w, h, app, bd, orient, outline in leds: frame = Frame(self, bg=Color.PANEL) frame.pack(anchor=N, expand=YES, fill=X) # Iterate for selected states for state, blink in states: LED(frame, shape=shape, status=state, width=w, height=h, appearance=app, orient=orient, blink=blink, bd=bd, outline=outline).frame.pack(side=LEFT, expand=YES, padx=1, pady=1) TestLEDs().mainloop()