GUI———Tkinter
Tkinter
1、Label & Button 标签和按钮
#一、基础的命名与标签
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("200x100") #定义窗体的大小
#2.标签的设置
L = tk.Label(window,text="OMG! this is TK",bg = "green",font=("Arial",2,),width=15,height=2)
# window:在window中显示;bg:背景颜色;font:字体类型及大小;width/heigh:宽与高,这里的大小是通过字符衡量的
L.pack()#标签显示的位置
#3.窗口的不停更新
window.mainloop()
#二、Button的设置
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
var = tk.StringVar()#tk里面特定的变量形式
#2.标签的设置
L = tk.Label(window,textvariable=var, bg = "green",font=("Arial",12,),width=15,height=2)
# window:在window中显示;bg:背景颜色;font:字体类型及大小;width/heigh:宽与高,这里的大小是通过字符衡量的
L.pack()#标签显示的位置
on_hit = False
#其实这块是有点晕的
def hit_me():
global on_hit #将on_hit声明为全局变量,并对全局变量进行修改
if on_hit == False:
on_hit = True
var.set("you hit me")
else:
on_hit = False
var.set("")
#3.button的设置
b = tk.Button(window,text="hit me",width=15,height = 2,command=hit_me)#hit_me是一个自定义的函数
b.pack()
#感觉就是点击一次执行一次
2. Entry&Text 输入,文本框
1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
#2.输入的内容
e = tk.Entry(window,show="**")#show为掩饰字符,show的默认值为None
e.pack()
def insert_point():
var = e.get()#通过get索取entry的值
t.insert("insert",var)
def insert_end():
var = e.get()
t.insert("end",var)
# t.insert("2.2",var)#在第2行第2列插入
b1 = tk.Button(window,text ="insert point",width=15,height=2,
command = insert_point)
b1.pack()
b2 = tk.Button(window,text = "insert end",
command=insert_end)
b2.pack()
#文本显示
t = tk.Text(window,height=2)
t.pack()
#3.窗口的不停更新
window.mainloop()
3.Listbox列表部件
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
#设置一个标签
var1 = tk.StringVar()
l = tk.Label(window,bg ="yellow",width=4,textvariable=var1)
l.pack()
#很不喜欢这样把函数全局变量放在后面
def print_selection():
value = lb.get(lb.curselection())
var1.set(value) #进行值的传递
#button的设置
b1 = tk.Button(window,text="print selection",width=15,
height=2,command = print_selection)
b1.pack()
#listbox的设置
var2 = tk.StringVar()
var2.set((11,22,33,44))
lb = tk.Listbox(window,listvariable=var2)
list_item = [1,2,3,4]
for item in list_item:
lb.insert("end",item)
lb.insert(1,"first")
lb.insert(2,"second")
lb.delete(2)
lb.pack()
#3.窗口的不停更新
window.mainloop()
4.Radiobutton选择按钮
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
#设置一个标签
var = tk.StringVar()
l = tk.Label(window,bg ="yellow",width=20,text="empty")#初始默认值都为empty
l.pack()
def print_selection():
l.config(text="you have selected"+var.get()) #config 修改任何设置
r1 = tk.Radiobutton(window,text="Option A",
variable=var,value="A",
command=print_selection) #把A赋值于variable
r1.pack()
r2 = tk.Radiobutton(window,text="Option B",
variable=var,value="B",
command=print_selection) #把A赋值于variable
r2.pack()
r2 = tk.Radiobutton(window,text="Option B",
variable=var,value="B",
command=print_selection) #把A赋值于variable
r2.pack()
#3.窗口的不停更新
window.mainloop()
5.scale尺度
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
#设置一个标签
var = tk.StringVar()
l = tk.Label(window,bg ="yellow",width=20,text="empty")#初始默认值都为empty
l.pack()
def print_selection(v):
l.config(text="you have selected"+v) #config 修改任何设置
s = tk.Scale(window,label="try me",from_=5,to=11,orient=tk.HORIZONTAL,
length=400,showvalue=3,tickinterval=3,resolution=0.02,
command=print_selection)
#orient,横向显示还是纵向显示,length指的是像素长度,showvalue是否显示数值,0是否,1是是,
#tickinterval:标签的变量长度,是每个几个数显示一个数
#resolution保留几位小数。0.01:2位小数;0.1:1位小数;1:整数
#command。每次拖动的时候会运行该函数,有默认的传入值,所以需要一个参数v
s.pack()
window.mainloop()
6.Checkbutton
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
#设置一个标签
var = tk.StringVar()
l = tk.Label(window,bg ="yellow",width=20,text="empty")#初始默认值都为empty
l.pack()
def print_selection():
if(var1.get() == 1) & (var2.get() == 0):
l.config(text = "I love only Python")
elif (var1.get() == 0) & (var2.get() == 1):
l.config(text="I love only C++")
elif (var1.get() == 0) & (var2.get() == 0):
l.config(text="I do not love either")
else:
l.config(text="I love both")
var1 = tk.IntVar()
var2 = tk.IntVar()
#存在的价值就是做一个变量的传递
cl1 = tk.Checkbutton(window, text="python", variable=var1,onvalue=1,offvalue=0,
command=print_selection)
#onvalue=1,offvalue=0,选择这个按钮就把variable赋值为1,不选就赋值为0
cl2 = tk.Checkbutton(window, text="C++", variable=var2,onvalue=1,offvalue=0,
command=print_selection)
cl1.pack()
cl2.pack()
window.mainloop()
7.Canvas画布
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
canvas = tk.Canvas(window,bg="blue",height=250,width=500) #定义一个画布
image_file = tk.PhotoImage(file = "E:\Desktop\littleman.png")#加载一个图片
image = canvas.create_image(0,0,anchor="nw",image = image_file)
#anchor:图片的锚定点在哪里,nw:左上
x0,y0,x1,y1 = 150,150,80,80
line = canvas.create_line(x0,y0,x1,y1)#画直线从一个点一个点到另外一个点
oval = canvas.create_oval(x0+50,y0,x1,y1,fill = "red")#画一个圆,用红色进行填充
arc = canvas.create_arc(x0+30,y0+30,x1+30,y1+30,start=0,extent=180)#扇形开始于0度,打开了180度
rect = canvas.create_rectangle(200,200,100,100)#正方形
canvas.pack()
def moveit():
canvas.move(rect,0,2)#每次x移动0,y移动2
b = tk.Button(window,text="move",command=moveit).pack()
window.mainloop()
8.Menubar
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
l = tk.Label(window,text="",bg="yellow")
l.pack()
counter = 0
def do_job():
global counter
l.config(text = "执行了" + str(counter))
counter += 1
menubar = tk.Menu(window)
filemenu = tk.Menu(menubar,tearoff=0)#filemenu一个菜单,放在menubar,tearoff是否有间隔
menubar.add_cascade(label="文件",menu=filemenu)#filemenu的名字为"File",待会试一下能不能直接进行修改
filemenu.add_command(label="新文件",command=do_job)
filemenu.add_command(label="打开文件",command=do_job)
filemenu.add_command(label="保存文件",command=do_job)
filemenu.add_separator() #子菜单中加入分割线
filemenu.add_command(label="退出",command=window.quit)#退出窗口
editmenu = tk.Menu(menubar,tearoff=0)#editmenu是menubar中的一个menu
menubar.add_cascade(label="编辑",menu=editmenu)#filemenu的名字为"File"
editmenu.add_command(label="剪切",command=do_job)
editmenu.add_command(label="复制",command=do_job)
editmenu.add_command(label="粘贴",command=do_job)
editmenu.add_separator() #子菜单中加入分割线
editmenu.add_command(label="退出",command=window.quit)#退出窗口
window.config(menu=menubar)
window.mainloop()
9.Frame框架
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
frm = tk.Frame(window)#大框架
frm.pack()
frm_1 = tk.Frame(frm,)#在大框架上放置一个小框架
frm_2 = tk.Frame(frm,)
frm_1.pack(side="left")#在大框架的左边
frm_2.pack(side="right")#在大框架的右边
tk.Label(frm_1,text = "on the frm_11").pack()#text:显示的内容
tk.Label(frm_1,text = "on the frm_12").pack()
tk.Label(frm_2,text = "on the frm_杨").pack()
window.mainloop()
10.messagebox弹窗
import tkinter as tk
import tkinter.messagebox #直接用tk.messagebox会报错
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
def hit_me():
tk.messagebox.showinfo(title = "HI",message="hahhahahhaha")
tk.messagebox.showwarning(title="HI",message="nonononono")
tk.messagebox.showerror(title="HI",message="NO!!!!never")
a = tk.messagebox.askquestion(title="HI",message="你是杨某人吗?")#return "yes","no"
if a == "yes":#利用返回值做文章
print("我是你爸爸吧")
tk.messagebox.askyesno(title="HI",message="杨某人是对的嘛?")#return "True","False"
tk.Button(window,text="hit me",command=hit_me).pack()
window.mainloop()
11 pack grid place 放置位置
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
#1.pack
tk.Label(window,text=1).pack(side="top")
tk.Label(window,text=1).pack(side="bottom")
tk.Label(window,text=1).pack(side="left")
tk.Label(window,text=1).pack(side="right")
window.mainloop()
#2.grid
# #实验失败,有空再琢磨吧
for i in range(4):
for j in range(3):
tk.Label(window,text=1).grid(row=i,colum=j,)
#3.palce
tk.Label(window,text=1).place(x=10,y=100,anchor="nw")#anchor方位,x,y指的是像素点
window.mainloop()
12登录窗口
#1.窗体的设置
window = tk.Tk()#实例化一个窗体
window.title("my window") #给窗体起一个名字
window.geometry("500x500") #定义窗体的大小
#2.设置欢迎图片
canvas = tk.Canvas(window,height=250,width=500)
image_file = tk.PhotoImage(file="E:\Desktop\welcome.png")
image = canvas.create_image(0,0,anchor="nw",image =image_file)
canvas.pack(side="top")
#用户信息
tk.Label(window,text="用户名").place(x=85,y=300)
tk.Label(window,text="密码").place(x=85,y=350)
#登录框,Entry
#登录名
var_user_name = tk.StringVar()
var_user_name.set("example@python.com")#设置初始默认值!
entry_user_name = tk.Entry(window,textvariable=var_user_name)
entry_user_name.place(x = 150,y = 300)
#登录密码
var_user_pwd = tk.StringVar()
entry_user_pwd = tk.Entry(window,textvariable=var_user_pwd,show="*")
entry_user_pwd.place(x = 150,y = 350)
##烂尾了!!!
记录学习的点点滴滴