Basic TKinter GUI format in python
July 23, 2008 1 Comment
Though there are many ways to format your gui code, the following seems to work well for me. It is not pretty, but the important thing is just how I laid it out.
Basically, I like making a subclass of frame for almost everything.
#!/usr/bin/env python
from Tkinter import *
import time
import tkMessageBox
import tkFileDialog
import tkSimpleDialog
class Demo(Frame):
def __init__(self, parent=None):
Frame.__init__(self, parent)
self.pack()
Label(self, text="Basic Demonstration").pack()
errorbutton = Button(self, text="Error", command=self.showerror)
errorbutton.bind('', self.showerroronrc) #on hover
errorbutton.pack(side=TOP, fill=BOTH)
askbutton = Button(self, text="Ask", command=self.ask)
askbutton.pack(side=TOP, fill=BOTH)
openbutton = Button(self, text="Open", command=self.open)
openbutton.pack(side=TOP, fill=BOTH)
querybutton = Button(self, text="Input", command=self.query)
querybutton.pack(side=TOP, fill=BOTH)
Label(self, text="Name").pack(side=LEFT)
checkoptions = ["check1", "check2", "check3"]
for i in checkoptions:
checkbox = Checkbutton(self, text=i, command=self.checkbox)
checkbox.pack(side=TOP)
#this is used in the showerror function
self.ent = Entry(self)
self.ent.pack(side=RIGHT, fill=X)
def showerror(self):
msg = "He's dead, " + self.ent.get()
tkMessageBox.showerror('Error!', msg)
def showerroronrc(self, event):
print "stop hovering!"
def ask(self):
self.ynanswer = tkMessageBox.askquestion("question", "Do you like me?")
if self.ynanswer == "no":
print "fine, fuck you, buddy."
Frame.quit(self)
def open(self):
file = tkFileDialog.askopenfilename()
print file
def query(self):
myfloat = tkSimpleDialog.askfloat("Entry", "Enter a number")
print myfloat
def checkbox(self):
print "Don't check on me, bitch"
if __name__ == '__main__':
root=Tk()
Demo(root).pack()
img = PhotoImage(file="./grass.gif")
Button(root, image=img).pack(side=RIGHT)
mainloop()
TKinter is soooo bad compared to QT. Just for my own information.