最近因公司需要,做了一个小型的测试软件,公司要求要有GUI,于是用python自带的TK包快速做了出来,现在存档,做个总结。
软件环境:windows7 、python2.7
实现功能:菜单、输入框、按钮、列表框、文本框、下拉框、选择文件等。效果截图如下:
源代码如下:
#coding=utf-8
__author__ = 'sisure'
from Tkinter import *
import tkMessageBox as tm
import tkFileDialog,ttk,time
from ScrolledText import ScrolledText
def login():
if entry1.get():
tm.showinfo("Tips","Login successful !\n Welcome %s !"%entry1.get()) #弹出提示框
else:
tm.showinfo("警告","请输入用户名···")
def selectPath():
path_ = tkFileDialog.askopenfilename(filetypes=[("text","txt")])
path.set(path_)
def display():
txt.delete(0.0,END)
need=u"""
姓名:%s\n
性别:%s\n
出生年:%d\n
学历:%s\n
语言:%s\n
"""%(entry1.get(),sexBoxValue.get(),year.get(),education.get(),listb.get(0,0))
txt.insert(0.0,need)
def change():
n=time.ctime()
show.delete(0.0,END)
show.insert(0.0,n)
def read():
p=entry2.get()
f=open(p,"r")
content=f.readlines()
f.close()
show.delete(0.0,END)
show.insert(0.0,content)
root=Tk()
root.title("TK基础")
root.geometry("700x350") #设置主窗口大小
#菜单设置
menubar = Menu(root)
root.config(menu=menubar)
#创建文件下拉菜单
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="New file···", command="")
filemenu.add_command(label="Open file···", command="")
filemenu.add_command(label="Save", command="")
filemenu.add_command(label="Close", command=root.quit)
# 创建帮助下拉菜单
helpmenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="Help", menu=helpmenu)
helpmenu.add_command(label="Instructions", command="")
helpmenu.add_command(label="About software", command="")
helpmenu.add_command(label="About developer", command="")
#添加标签
Label1 = Label(root, text=u'用户名:')
Label1.grid(row=0,column=0) #使用grid方法布局
#添加输入框
entry1 = Entry(root, textvariable=u'请输入用户名',width=20)
entry1.grid(row=0, column=1) # textvariable=u'请输入用户名'可以不要,获取输入框中内容,使用entry.get()
#添加按钮
button1 = Button(root, text=u"登录",command=login).grid(row=1, column=0) #添加按钮
button2 = Button(root, text=u"关闭",command=root.quit).grid(row=1, column=1) #quit()方法是退出主窗口
#添加列表
li = ['C','python','php','html','SQL','java']
listb = Listbox(root) # 创建两个列表组件
for item in li: # 第一个小部件插入数据
listb.insert(0,item)
listb.grid(row=3,column=0,columnspan=2,sticky = W)
#sticky参数用来设置位置,W靠左,E居中;columnspan参数是合并占的列的数量;rowspan是合并占的行的数量。
#添加文本框
txt=Text(root,width=23,height=13) #添加文本框
txt.grid(row=3,column=2,columnspan=2,sticky=W)
txt.insert(0.0,"Hei boby,study hard!\n\n"*20)
#文本框显示使用txt.insert(0.0,"123")方式,在框中最前面插入,txt.insert(END,"123")在框中最后面插入;
# txt.delete(0.0,END)清楚框中内容;txt.update()刷新框,动态显示内容。
#添加滚动条
S = Scrollbar(root)
S.config(command=txt.yview) #配置滚动条绑定到txt框中
S.grid(row=3,column=3,sticky=W)
#文本框加滚动条封装功能,调用ScrolledText
show = ScrolledText(root,
width=30, height=10,
font=('Courier New', 10),
fg='black', bg='white')
show.grid(row=3, column=4,columnspan=2,sticky=W)
show.insert(0.0,"Hello,Come on!You can do it!\n"*50)
#选择文件路径功能,调用tkFileDialog模块
path = StringVar()
Label(root,text = "目标路径:").grid(row = 0, column = 3)
entry2=Entry(root, textvariable = path)
entry2.grid(row = 0, column = 4)
Button(root, text = "路径选择", command = selectPath).grid(row = 0, column = 5,sticky=W)
Button(root, text = "显示内容", command = read).grid(row = 1, column = 4,sticky=W)
#添加下拉框,需要条用ttk模块。
#性别
Label(root,text="性别").grid(row=4,column=0,columnspan=2,sticky=W)
sexBoxValue = StringVar()
boxChoice = ttk.Combobox(root,textvariable = sexBoxValue,state = 'readonly')
boxChoice['value'] = ("男","女")
boxChoice.current(0)
# self.boxChoice.bind('<<ComboboxSelected>>',self.Choice)
boxChoice.grid(row = 5,column = 0,columnspan=2,sticky = W)
#出生年
Label(root,text="出生年").grid(row=4,column=2,sticky=W)
year=IntVar()
boxChoice1 = ttk.Combobox(root,textvariable = year,state = 'readonly')
y=tuple([i for i in range(1950,2030)])
boxChoice1['value'] = y
boxChoice1.current(0)
# self.boxChoice.bind('<<ComboboxSelected>>',self.Choice)
boxChoice1.grid(row = 5,column = 2,sticky = W)
#学历
Label(root,text="学历").grid(row=4,column=3,sticky=W)
education=StringVar()
boxChoice2 = ttk.Combobox(root,textvariable = education,state = 'readonly')
boxChoice2['value'] = ("博士","硕士","本科","大专","大专以下")
boxChoice2.current(0)
# self.boxChoice.bind('<<ComboboxSelected>>',self.Choice)
boxChoice2.grid(row = 5,column = 3,columnspan=2,sticky = W)
# show.insert(0.0,education.get())
Button(root,text="确定",command=display).grid(row=6,column=0,sticky=W)
Button(root,text="显示当前时间",command=change).grid(row=4,column=5,sticky=W)
# Label(root, text="用户名", bg="green", font=("Arial", 20), width=5, height=1)
root.mainloop() # 进入消息循环,有它才能看
文中有注释,基本上都能明白,有这些功能已经很强大了,可以利用与数据库交互,开发一些简单的办公软件了。