Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序,由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
创建一个窗口
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
win.mainloop()
label(标签)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
'''
Label:标签控件可以显示文本
'''
label= tkinter.Label(win,
text="hello world",
bg = "pink",
fg = "red",
font = ("黑体",15),
width=15,
height=3,
wraplength=200,
justify="left",
anchor="ne")
label.pack()
win.mainloop()
button(按钮)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func():
print("fang is a good man!")
button1 = tkinter.Button(win,text="button",command=func,width="8",height="2")
button1.pack()
button2 = tkinter.Button(win,text="button2",command=lambda:
print("fang is a kind person!"))
button2.pack()
button3 = tkinter.Button(win,text="quit",command=win.quit)
button3.pack()
win.mainloop()
entry(输入框)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
'''
#绑定变量
e = tkinter.Variable()
entry = tkinter.Entry(win,textvariable=e) #给输入框的文本绑定一个变量
entry.pack()
#e就代表输入框这个对象
#设置值
e.set("fangweijie")
#取值
print(e.get())
print(entry.get())
'''
e = tkinter.Variable()
entry = tkinter.Entry(win,textvariable=e)
entry.pack()
def func():
print(entry.get())
button1 = tkinter.Button(win,text="输出",command=func,width="6",height="1")
button1.pack()
win.mainloop()
text(文本窗口)
import tkinter
win = tkinter.Tk()
win.title('fang')
scroll= tkinter.Scrollbar()
text= tkinter.Text(win,width="36",height="5")
scroll.pack(side=tkinter.RIGHT,fill=tkinter.Y)
text.pack(side=tkinter.LEFT,fill=tkinter.Y)
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
str = '''sdfasdfsdvsdfbgvdcfazdsfbhdfvcbxcdfbdxfbfgbfgbfgbbdfbfvbfbgf
bbdfghndfvbfdsghdffbfdggbsdfbgfbdfgbgfdfghngfnfgngfngfangweijiejustwe
are vdkjsavavjccrarecarewidthheightfvbgfbdfghdfgnbhdxfghdfghdfvgbdgfb
dbdsbdfbsdvbbbsvbsbdfbdcsfhvahhadcfebggbfbsehjsrtbnadsfbsrgfhsrfedbaf
cahdfsdnffasngweijireindsdjieweijieifangshengwodeshenaquanqfangchuang'''
text.insert(tkinter.INSERT,str)
check_button(复选按钮)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def updata():
message=""
if hobby1.get()==True:
message+="money\n"
if hobby2.get()==True:
message+="power\n"
text.delete(0.0,tkinter.END)
text.insert(tkinter.INSERT,message)
hobby1 = tkinter.BooleanVar()
check1 = tkinter.Checkbutton(win,text="money",variable=hobby1,command=updata)
check1.pack()
hobby2 = tkinter.BooleanVar()
check2 = tkinter.Checkbutton(win,text="power",variable=hobby2,command=updata)
check2.pack()
text = tkinter.Text(win,width=50,height=5)
text.pack()
win.mainloop()
radio_button(单选按钮)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def updata():
print(r.get())
r = tkinter.IntVar()
radiobutton1 = tkinter.Radiobutton(win,text="power",value=1,variable=r,command=updata)
radiobutton1.pack()
radiobutton2 = tkinter.Radiobutton(win,text="money",value=2,variable=r,command=updata)
radiobutton2.pack()
win.mainloop()
listbox(列表框)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
LB = tkinter.Listbox(win,selectmode=tkinter.BROWSE)
LB.pack()
for item in ["f","a","n","g","w","e","i","jie"]:
LB.insert(tkinter.END,item)
LB.insert(tkinter.ACTIVE,"cool")
LB.insert(tkinter.END,["12","342"])
LB.delete(1,3)
LB.delete(1)
LB.select_set(1,3)
LB.select_clear(2)
print(LB.size())
print(LB.get(1,3))
print(LB.get(4))
print(LB.curselection())
print(LB.selection_includes(1))
print(LB.selection_includes(4))
win.mainloop()
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
LV = tkinter.StringVar()
LB = tkinter.Listbox(win,selectmode=tkinter.SINGLE,listvariable=LV)
LB.pack()
for item in ["good","nice","handsome","vd","xs"]:
LB.insert(tkinter.END ,item)
print(LV.get())
def myPrint(event):
print(LB.get(LB.curselection()))
LB.bind("<Double-Button-1>",myPrint)
win.mainloop()
import tkinter
win = tkinter.Tk()
win.title('fang')
LB = tkinter.Listbox(win,selectmode=tkinter.EXTENDED)
LB.pack()
for item in ["good","nice","handsome","vd","xs","good","nice","handsome","vd","xs","good","nice","handsome","vd","xs"]:
LB.insert(tkinter.END ,item)
sc = tkinter.Scrollbar(win)
sc.pack(side=tkinter.RIGHT,fill=tkinter.Y)
LB.configure(yscrollcommand=sc.set)
LB.pack(side=tkinter.LEFT,fill=tkinter.BOTH)
sc['command'] = LB.yview
win.mainloop()
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
LB = tkinter.Listbox(win,selectmode=tkinter.MULTIPLE)
LB.pack()
for item in ["good","nice","handsome","vd","xs"]:
LB.insert(tkinter.END ,item)
win.mainloop()
scale_control(缩放控制)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
scale= tkinter.Scale(win,from_=0,to=100,orient=tkinter.VERTICAL,
tickinterval=20,length=200)
scale.pack()
scale.set(20)
def showNum():
print(scale.get())
tkinter.Button(win,text="button",command=showNum).pack()
win.mainloop()
spin_box(数值设定框)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
V = tkinter.StringVar()
def update():
print(V.get())
spinbox = tkinter.Spinbox(win,from_=0,to=50,increment=1,values=(0,2,4,6,8,10,12,14,16,18,20),
textvariable=V,command=update)
spinbox.pack()
V.set(20)
print(V.get())
win.mainloop()
top_menu(顶部菜单)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func():
print("*********")
def PY():
print("人生苦短,我用python!")
menubar = tkinter.Menu(win)
win.config(menu=menubar)
menu1 = tkinter.Menu(menubar,tearoff=False)
for item in ["python","c","c++","java","JS","PHP","node.js","quit"]:
if item =="python":
menu1.add_command(label=item,command=PY)
elif item == "quit":
menu1.add_separator()
menu1.add_command(label=item,command=win.quit)
else:
menu1.add_command(label=item)
menubar.add_cascade(label="语言",menu=menu1)
menu2 = tkinter.Menu(menubar,tearoff=False)
menu2.add_command(label="red")
menu2.add_command(label="blue")
menubar.add_cascade(label="颜色",menu=menu2)
win.mainloop()
鼠标右键菜单
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
'''
鼠标右键,出现菜单
'''
menubar= tkinter.Menu(win)
menu = tkinter.Menu(menubar,tearoff=False)
for item in ["python","c","c++","java","JS","PHP","node.js","quit"]:
menu.add_command(label=item)
menubar.add_cascade(label="语言",menu=menu)
def showMenu(event):
menubar.post(event.x_root,event.y_root)
win.bind("<Button-3>",showMenu)
win.mainloop()
combo_box(下拉列表框)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
from tkinter import ttk
cv = tkinter.StringVar()
com= ttk.Combobox(win,textvariable=cv)
com.pack()
com["value"] = ("黑龙江","吉林","辽宁")
com.current(2)
def func(event):
print(com.get())
print(cv.get())
com.bind("<<ComboboxSelected>>",func)
win.mainloop()
frame(框架)
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
'''
框架控件
想在屏幕上显示一个矩形区域,多作为容器控件
'''
frame = tkinter.Frame(win)
frame.pack()
frame_1 = tkinter.Frame(frame)
tkinter.Label(frame_1,text="左上",bg="pink",font="黑体").pack(side=tkinter.TOP)
tkinter.Label(frame_1,text="左下",bg="yellow",font="黑体").pack(side=tkinter.TOP)
frame_1.pack(side=tkinter.LEFT)
frame_2 = tkinter.Frame(frame)
tkinter.Label(frame_2,text="右上",bg="red",font="黑体").pack(side=tkinter.TOP)
tkinter.Label(frame_2,text="右下",bg="blue",font="黑体").pack(side=tkinter.TOP)
frame_2.pack(side=tkinter.RIGHT)
win.mainloop()
表格数据
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('600x400+200+30')
from tkinter import ttk
tree = ttk.Treeview(win)
tree.pack()
tree["columns"] = ("姓名","年龄","身高","体重")
tree.column("姓名",width=100)
tree.column("年龄",width=100)
tree.column("身高",width=100)
tree.column("体重",width=100)
tree.heading("姓名",text="姓名-name")
tree.heading("年龄",text="年龄-age")
tree.heading("身高",text="身高-height")
tree.heading("体重",text="体重-weight")
tree.insert("",0,text="linel",values=("fang","18","165","80"))
tree.insert("",1,text="linel",values=("zou","19","178","63"))
win.mainloop()
绝对布局
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
label1 = tkinter.Label(win,text="good",bg="red")
label2 = tkinter.Label(win,text="cool",bg="blue")
label1.place(x=100,y=20)
label2.place(x=200,y=200)
win.mainloop()
树状数据
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
from tkinter import ttk
tree = ttk.Treeview(win)
tree.pack()
treeF1 = tree.insert("",0,"中国",text="china",values=("F"))
treeF2 = tree.insert("",1,"美国",text="USA",values=("A"))
treeF3 = tree.insert("",2,"英国",text="UK",values=("N"))
treeF1_1 = tree.insert(treeF1,0,"jiangxi",text="jiangxi",values=("F1_1"))
treeF1_2 = tree.insert(treeF1,1,"Beijing",text="Beijing",values=("F1_2"))
treeF1_3 = tree.insert(treeF1,2,"shanghai",text="shanghai",values=("F1_3"))
treeF2_1 = tree.insert(treeF2,0,"纽约",text="纽约",values=("F1_1"))
treeF2_2 = tree.insert(treeF2,1,"华盛顿",text="华盛顿",values=("F1_2"))
treeF2_3 = tree.insert(treeF2,2,"旧金山",text="旧金山",values=("F1_3"))
treeF1_1_1 = tree.insert(treeF1_1,0,"nanchang",text="南昌",values=("F1_1_1"))
win.mainloop()
绝对布局
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
label1 = tkinter.Label(win,text="good",bg="red")
label2 = tkinter.Label(win,text="cool",bg="blue")
label1.place(x=100,y=20)
label2.place(x=200,y=200)
win.mainloop()
相对布局
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
label1 = tkinter.Label(win,text="good",bg="red")
label2 = tkinter.Label(win,text="cool",bg="blue")
label1.pack(fill=tkinter.Y,side=tkinter.LEFT)
label2.pack(fill=tkinter.X,side=tkinter.TOP)
win.mainloop()
表格布局
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
label1 = tkinter.Label(win,text="good",bg="red")
label2 = tkinter.Label(win,text="cool",bg="blue")
label3 = tkinter.Label(win,text="nice",bg="pink")
label4 = tkinter.Label(win,text="handsome",bg="yellow")
label1.grid(row=0,column=0)
label2.grid(row=0,column=1)
label3.grid(row=1,column=0)
label4.grid(row=1,column=1)
win.mainloop()
鼠标点击事件
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func1(event):
print(event.x,event.y)
button1 = tkinter.Button(win,text="leftmouse button")
button1.bind("<Double-Button-1>",func1)
button1.pack()
win.mainloop()
鼠标移动事件
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func(event):
print(event.x,event.y)
label = tkinter.Label(win,text="aaaaaaaa")
label.pack()
label.bind("<B2-Motion>",func)
win.mainloop()
鼠标释放事件
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func(event):
print(event.x,event.y)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
label.pack()
label.bind("<ButtonRelease-1>",func)
win.mainloop()
进入事件
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func(event):
print(event.x,event.y)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
label.pack()
label.bind("<Enter>",func)
label.bind("<Leave>",func)
win.mainloop()
组合按键事件
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func(event):
print("event.char=",event.char)
print("event.keycode=",event.keycode)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
label.focus_set()
label.pack()
label.bind("<Control-a>",func)
win.mainloop()
相应所有按键事件
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func(event):
print("event.char=",event.char)
print("event.keycode=",event.keycode)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
label.focus_set()
label.pack()
label.bind("<Key>",func)
win.mainloop()
相应特殊按键事件
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func(event):
print("event.char=",event.char)
print("event.keycode=",event.keycode)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
label.focus_set()
label.pack()
label.bind("<Shift_R>",func)
win.mainloop()
指定按键事件
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func(event):
print("event.char=",event.char)
print("event.keycode=",event.keycode)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
label.focus_set()
label.pack()
label.bind("a",func)
win.mainloop()
组合按键事件
import tkinter
win = tkinter.Tk()
win.title('fang')
win.geometry('400x400+200+30')
def func(event):
print("event.char=",event.char)
print("event.keycode=",event.keycode)
label = tkinter.Label(win,text="aaaaaaaa",bg="red")
label.focus_set()
label.pack()
label.bind("<Control-a>",func)
win.mainloop()