python图形界面教程Tkinter详解
躍然紙上 人气:01、Tkinter是什么
Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口。作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python自带的,可以编辑的GUI界面
2、Tkinter创建窗口
①导入 tkinter的库 ,创建并显示窗口
import tkinter as tk # 在代码里面导入库,起一个别名,以后代码里面就用这个别名 root = tk.Tk() # 这个库里面有Tk()这个方法,这个方法的作用就是创建一个窗口 root.mainloop() # 加上这一句,就可以看见窗口了,循环显示窗口
②修改窗口属性
root.title('演示窗口') #设置窗口标题 root.geometry("300x100+630+80") # 设置窗口长x宽+x*y
③创建按钮
import tkinter as tk #tk代替tkinter from tkinter import messagebox root = tk.Tk() # 创建窗口 root.title('演示窗口') root.geometry("300x100+630+80") # 长x宽+x*y btn1 = tk.Button(root) # 创建按钮,并且将按钮放到窗口里面 btn1["text"] = "点击" # 给按钮一个名称 btn1.pack() # 按钮布局 def test(e): '''创建弹窗''' messagebox.showinfo("窗口名称", "点击成功") btn1.bind("<Button-1>", test) # 将按钮和方法进行绑定,也就是创建了一个事件 root.mainloop() # 让窗口一直显示,循环
④窗口内的组件布局
3、Tkinter布局用法
①基本界面、label(标签)和button(按钮)用法
import tkinter as tk root = tk.Tk() root.title("这是Demo") root.geometry("300x200") var = tk.StringVar() #tk专有字符串 #root---界面(需要放在那个界面),textvariable----显示文本 #bg----背景 font----字体格式,大小 width----宽度 height----高度 lab = tk.Label(root,textvariable=var,bg = 'green',font=('Arial',12),width=15,height=2) lab.pack() #把标签置入root界面布局 on_hit = True #点击标志位 def hit_me(): global on_hit if on_hit==True: on_hit = False #点击交替 var.set("you hit me") else: on_hit = True var.set("") #root---界面(需要放在那个界面),text----显示文本 #width----宽度 height----高度 command----命令(执行哪个函数) but = tk.Button(root,text = "hitme",width=15,height=2,command=hit_me) but.pack() root.mainloop()
②entry(输入)和text(文本)用法
import tkinter as tk root = tk.Tk() root.title("这是Demo") root.geometry("300x200") #root---界面(需要放在那个界面),show----输入的字符显示为*,可以设置成show=none e = tk.Entry(root,show='*') e.pack() def insert_point(): var = e.get() t1.insert('insert',var) def insert_end(): var = e.get() t1.insert('end',var) #root---界面(需要放在那个界面),text----显示文本 #width----宽度 height----高度 command----命令(执行哪个函数) b1 = tk.Button(root,text = "insert point",width=15,height=2,command=insert_point) b1.pack() b2= tk.Button(root,text = "insert end",width=15,height=2,command=insert_end) b2.pack() #root---界面(需要放在那个界面),height ----文本框宽度 t1 = tk.Text(root,height=2) t1.pack(fill="x") root.mainloop()
③var(变量)和list(列表)用法
import tkinter as tk root = tk.Tk() root.title("这是Demo") root.geometry("300x200") #root---界面(需要放在那个界面),textvariable----显示文本变量 #bg----背景 font----字体格式,大小 width----宽度 height----高度 var1 = tk.StringVar() l = tk.Label(root, bg='yellow', width=4, textvariable=var1) l.pack() def print_selection(): value = lb.get(lb.curselection()) #获取列表选项 var1.set(value) #设置textvariable=var1的文本值 #root---界面(需要放在那个界面),text----显示文本 #width----宽度 height----高度 command----命令(执行哪个函数) b1 = tk.Button(root,text = "print selection",width=15,height=2,command=print_selection) b1.pack() var2 = tk.StringVar() var2.set((11,22,33,44)) #root---界面(需要放在那个界面),listvariable----列表变量 lb = tk.Listbox(root, listvariable=var2) #列表变量var2 list_items = [1,2,3,4] for item in list_items: #列表遍历 lb.insert('end', item) lb.insert(1, 'first') #1号位后加入first lb.insert(2, 'second') #2号位后加入second #lb.delete(2) #删除2后的second lb.pack() root.mainloop()
④Radiobutton(选择按钮)用法
import tkinter as tk root = tk.Tk() root.title("这是Demo") root.geometry("300x200") #root---界面(需要放在那个界面),textvariable----显示文本变量 #bg----背景 font----字体格式,大小 width----宽度 height----高度 var = tk.StringVar() l = tk.Label(root, bg='yellow', width=20, text='empty') l.pack() def print_selection(): l.config(text='you have selected ' + var.get()) #Radiobutton-----选择按钮 #root---界面(需要放在那个界面),variable----变量 #value----值 command----命令 r1 = tk.Radiobutton(root, text='Option A', variable=var, value='A', command=print_selection) r1.pack() r2 = tk.Radiobutton(root, text='Option B', variable=var, value='B', command=print_selection) r2.pack() r3 = tk.Radiobutton(root, text='Option C', variable=var, value='C', command=print_selection) r3.pack() root.mainloop()
⑤Scale(尺度)用法
import tkinter as tk root = tk.Tk() root.title("这是Demo") root.geometry("300x200") #root---界面(需要放在那个界面),textvariable----显示文本变量 #bg----背景 font----字体格式,大小 width----宽度 height----高度 l = tk.Label(root, bg='yellow', width=20, text='empty') l.pack() def print_selection(v): l.config(text='you have selected ' + v) #Scale----尺度函数 #root---界面(需要放在那个界面),label----标签名字 from_ ----尺度从哪开始 to----尺度到哪结束 #orient----尺度方向(HORIZONTAL水平) length----显示长度(单位为像素) tickinterval----每隔多少加个尺度显示 #resolution ----精度(精确到小数点后多少) command----命令 s = tk.Scale(root, label='try me', from_=5, to=11, orient=tk.HORIZONTAL, length=200, showvalue=0, tickinterval=2, resolution=0.01, command=print_selection) s.pack() root.mainloop()
⑥ Checkbutton(勾选项)用法
import tkinter as tk root = tk.Tk() root.title("这是Demo") root.geometry("300x200") #root---界面(需要放在那个界面),textvariable----显示文本变量 #bg----背景 font----字体格式,大小 width----宽度 height----高度 l = tk.Label(root, bg='yellow', width=20, text='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() #Checkbutton----勾选函数 #root---界面(需要放在那个界面),text----文本 variable ----变量 #onvalue----勾选标志值 offvalue----无勾选标志值 command----命令 c1 = tk.Checkbutton(root, text='Python', variable=var1, onvalue=1, offvalue=0, command=print_selection) c2 = tk.Checkbutton(root, text='C++', variable=var2, onvalue=1, offvalue=0, command=print_selection) c1.pack() c2.pack() root.mainloop()
⑦canvas(画布)用法
import tkinter as tk root = tk.Tk() root.title("这是Demo") root.geometry("300x300") #Canvas----画布 #root---界面(需要放在那个界面) #bg----背景 width----宽度,height----高度(单位像素) canvas = tk.Canvas(root, bg='white', height=200, width=200) #PhotoImage----加载图片 #图片路径为file='C:\\Users\\admin\\Desktop\\Demo\\Demo\\1.gif' 注意是使用双斜杆\\ image_file = tk.PhotoImage(file='C:\\Users\\admin\\Desktop\\Demo\\Demo\\1.gif') #create_image----图片位置 #create_image(瞄点横坐标,瞄点纵坐标,瞄点位置,加入图片) image = canvas.create_image(0,0, anchor='nw', image=image_file) #create_line----画线 #create_oval----画圆 #create_arc----画扇形 #create_rectangle----画矩形 #canvas.create_oval x0, y0, x1, y1= 50, 50, 80, 80 line = canvas.create_line(x0, y0, x1, y1) #create_oval----画扇形 #create_oval(坐标,坐标,坐标,坐标,填充颜色) oval = canvas.create_oval(x0, y0, x1, y1, fill='red') #create_oval----画圆 #create_oval(坐标,坐标,坐标,坐标,开始角度,结束角度) arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=90, extent=180) rect = canvas.create_rectangle(100, 30, 100+20, 30+20) canvas.pack() #move----移动 #canvas.move(对象, 横坐标, 纵坐标) def moveit(): canvas.move(rect, 2, 4) b = tk.Button(root, text='move', command=moveit).pack() root.mainloop()
⑧menubar(菜单栏)
import tkinter as tk root = tk.Tk() root.title('my window') root.geometry('300x300') #root---界面(需要放在那个界面),textvariable----显示文本变量 #bg----背景 font----字体格式,大小 width----宽度 height----高度 l = tk.Label(root, text='', bg='yellow') l.pack() counter = 0 def do_job(): global counter l.config(text='do '+ str(counter)) counter+=1 #menubar----菜单 menubar = tk.Menu(root) #菜单加入root界面 filemenu = tk.Menu(menubar, tearoff=0) #filemenu加入菜单栏menubar下(tearoff=0 不可分割) #filemenu菜单加入标签和相应执行命令 menubar.add_cascade(label='File', menu=filemenu) filemenu.add_command(label='New', command=do_job) filemenu.add_command(label='Open', command=do_job) filemenu.add_command(label='Save', command=do_job) filemenu.add_separator() #添加分割线 filemenu.add_command(label='Exit', command=root.quit) editmenu = tk.Menu(menubar, tearoff=0)#editmenu加入菜单menubar下(tearoff=0 不可分割) #editmenu菜单加入标签和相应执行命令 menubar.add_cascade(label='Edit', menu=editmenu) editmenu.add_command(label='Cut', command=do_job) editmenu.add_command(label='Copy', command=do_job) editmenu.add_command(label='Paste', command=do_job) #submenu加入菜单filemenu下(tearoff=0 不可分割) submenu = tk.Menu(filemenu) #filemenu菜单加入标签和相应执行命令 filemenu.add_cascade(label='Import', menu=submenu, underline=0) submenu.add_command(label="Submenu1", command=do_job) #配置菜单栏 root.config(menu=menubar) root.mainloop()
⑨Frame(架构)
import tkinter as tk root = tk.Tk() root.title('my window') root.geometry('200x200') #root---界面(需要放在那个界面),textvariable----显示文本变量 #bg----背景 font----字体格式,大小 width----宽度 height----高度 tk.Label(root, text='on the window').pack() #Frame----框架 #Frame的作用可以合理分布控件位置 #框架设置在root界面上 frm = tk.Frame(root) frm.pack() #框架设置在Frame框架上(分别在左右) frm_l = tk.Frame(frm) frm_r = tk.Frame(frm) frm_l.pack(side='left') frm_r.pack(side='right') tk.Label(frm_l, text='on the frm_l1').pack() tk.Label(frm_l, text='on the frm_l2').pack() tk.Label(frm_r, text='on the frm_r1').pack() root.mainloop()
⑩messagebox(弹窗)
import tkinter as tk import tkinter.messagebox root = tk.Tk() root.title('my window') root.geometry('200x200') def hit_me(): #tk.messagebox.showinfo(title='Hi', message='hahahaha') # return 'ok' #tk.messagebox.showwarning(title='Hi', message='nononono') #警告 return 'ok' tk.messagebox.showerror(title='Hi', message='No!! never') #错误 return 'ok' #print(tk.messagebox.askquestion(title='Hi', message='hahahaha')) #询问 return 'yes' , 'no' #print(tk.messagebox.askyesno(title='Hi', message='hahahaha')) #是否 return True, False #print(tk.messagebox.askretrycancel(title='Hi', message='hahahaha')) # 重试 return True, False #print(tk.messagebox.askokcancel(title='Hi', message='hahahaha')) # return True, False # print(tk.messagebox.askyesnocancel(title="Hi", message="haha")) # return, True, False, None tk.Button(root,text = 'hit_me',command=hit_me).pack() root.mainloop()
⑾pack、grid以及place布局用法
import tkinter as tk root = tk.Tk() root.title('my window') root.geometry('200x200') #canvas = tk.Canvas(window, height=150, width=500) #canvas.grid(row=1, column=1) #image_file = tk.PhotoImage(file='welcome.gif') #image = canvas.create_image(0, 0, anchor='nw', image=image_file) #pack布局----可以通过side控制放在上下左右 #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') #grid布局----通过方格的格式,将控件分布于其中 ##for i in range(4): #for j in range(3): #tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10) #place布局----通过设置坐标方式,可以精确分布控件 tk.Label(root, text=1).place(x=20, y=10, anchor='nw') root.mainloop()
总结
加载全部内容