视频见链接
莫烦老师讲得挺好哒,听起来不会让人感觉乏味(欢迎大家一起交流哇━(*`∀´*)ノ亻!)
加分项:老师长得好阔耐,一枚典型的理工男
PS:编译环境Python3,该笔记还附加了一些与视频相关的额外资料
P2视频笔记---label&button标签和按钮
GUI预览import tkinter as tk
window =tk.Tk()
window.title('my window')
window.geometry('200x100')
var = tk.StringVar()#Tk里特定的字符串变量
l = tk.Label(window,textvariable=var,bg='green',font=('Arial',12),width=15,height=2)#如果不填写的话那么就是自带的
#text和textvariable是有区别哒,一个固定一个可变
l.pack()
on_hit = False
def hit_me():
global on_hit #global需要在函数内部声明
if(on_hit==False):
on_hit=True
var.set('you hit me')#var.set('**')将字符串变量设置为**
else:
on_hit = False
var.set('')
b= tk.Button(window,text='hit me',width=16,height=2,command=hit_me)
b.pack()#将Button安放在label的下面
window.mainloop()#处于一个不断的循环中
P3视频笔记---entry&Text输入和文本框
GUI预览import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('200x200')
e=tk.Entry(window,show=None)#entry如果不想显示的话是show='*'
e.pack()
#读取到entry的值并将其insert到text中
def insert_point():
var=e.get()
t.insert('insert',var)
def insert_end():
var = e.get()
t.insert('end', var)#如果是想制定位置输入t.insert(2.2,var)第二行的第二列
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)#如果没加height和width就是默认的大小
b2.pack()
t=tk.Text(window,height=2)
t.pack()
window.mainloop()
t=tk.Text(window,height)
P4视频笔记---Listbox列表部件
创建Listbox部件的另一个小例子见链接
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('200x200')
var1=tk.StringVar()
l=tk.Label(window,bg='yellow',width=4,textvariable=var1)
l.pack()
#把在lb中光标选择的那一项拿出来set在label中
def print_selection():
value=lb.get(lb.curselection())
var1.set(value)
b1=tk.Button(window,text='print selection',width=15,height=2,command=print_selection)
b1.pack()
var2=tk.StringVar()
var2.set((11,22,33,44))
lb=tk.Listbox(window,listvariable=var2)
list_items=[1,2,3,4]
for item in list_items:
lb.insert('end',item)
lb.insert(1,'first')#用index插入,(0是起始点),在第一位插入first
lb.insert(2,'second')
lb.delete(2)
lb.pack()
window.mainloop()
P5视频笔记---Radiobutton选择按钮
GUI预览具体例子见链接
(有点不熟悉,得多看一下)翻译
##有一个问题:为什么运行刚开始时,三个按钮全是选中的?而链接中的IntVar不是先选中
#radiobutton与label的关联
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('200x200')
l=tk.Label(window,bg='yellow',width=20,text='empty')#最开始text设置为空
l.pack()
var=tk.StringVar()
#将选中的放在label上
def print_selection():
l.config(text='you have selected '+ var.get())
r1=tk.Radiobutton(window,text='Option A',
variable=var,value='A',command=print_selection)#(当选r1时)variable的var将赋值成'A'
r1.pack()
r2=tk.Radiobutton(window,text='Option B',
variable=var,value='B',command=print_selection)#(当选r2时)variable的var将赋值成'B'
r2.pack()
r3=tk.Radiobutton(window,text='Option C',
variable=var,value='C',command=print_selection)#(当选r3时)variable的var将赋值成'C'
r3.pack()
window.mainloop()
P6视频笔记---Scale尺度
GUI预览import tkinter as tk
window=tk.Tk()
window.title('my window')
window.geometry('200x200')
l=tk.Label(window,bg='yellow',width=20,text='empty')
l.pack()
#将scale的变量传进来
def print_select(v):
l.config(text='you have selected '+v)
#从5到11,orient为横向,length--此处为像素的长度,showvalue不显示为0(False),tickinterval--间隔
#resolution=0.01保留两位小数
s=tk.Scale(window,label='try me',from_=5,to=11,orient=tk.HORIZONTAL,
length=200,showvalue=0,tickinterval=3,resolution=0.01,command=print_select)
s.pack()
window.mainloop()
P7视频笔记---CheckButton勾选项
有一个疑问,为什么Python和C++前面的复选框没有排齐import tkinter as tk
window=tk.Tk()
window.title('my window')
window.geometry('200x200')
l=tk.Label(window,bg='yellow',width=20,text='empty')
l.pack()
def print_selection():
if((var1.get()==1)&(var2.get()==1)):#用&&会报错
l.config(text='I love both')
elif((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++')
else:
l.config(text='I do not love either')
var1=tk.IntVar()#整数变量
var2=tk.IntVar()
c1=tk.Checkbutton(window,text='Python',variable=var1,onvalue=1,offvalue=0,command=print_selection)#选择Python时,var1为1,否则为0
c2=tk.Checkbutton(window,text='C++',variable=var2,onvalue=1,offvalue=0,command=print_selection)#选择C++时,var2为1,否则为0
c1.pack()
c2.pack()
window.mainloop()
P8视频笔记---Carvas画布
#画布:可以在画布中加任何你想加入的图片,以及自己画一些东西,可用button的command进行移动放大等
anchor-锚定点的位置划分 GUI预览import tkinter as tk
window=tk.Tk()
window.title('my window')
window.geometry('500x500')
canvas=tk.Canvas(window,bg='blue',height=150,width=440)#创建一个画布,就可以在上面添加图片等操作
image_file=tk.PhotoImage(file='C:/Users/Administrator/Desktop/3.jpg')
image=canvas.create_image(0,0,anchor='nw',image=image_file)#将图片加载到canvas中(定在左上角,且锚定点为0,0
#10,10,anchor='center'这个相片的中间放在10,10的位置
x0,y0,x1,y1=50,50,80,80
line=canvas.create_line(x0,y0,x1,y1)
oval=canvas.create_oval(x0,y0,x1,y1,fill='green')
arc=canvas.create_arc(x0+30,y0+30,x1+30,y1+30,start=0,extent=180)
rect=canvas.create_rectangle(100,30,100+20,30+20,fill='yellow')
canvas.pack()
def moveit():#每次按move,rect移动两个单位
canvas.move(rect,0,2)
b=tk.Button(window,text='move',command=moveit).pack()
window.mainloop()
P9视频笔记---Menubar菜单
GUI预览import tkinter as tk
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='do'+str(counter))
counter+=1
menubar=tk.Menu(window)#menubar菜单栏,还没有加任何东西
filemenu=tk.Menu(menubar,tearoff=0)#tearoff=0时不分开
menubar.add_cascade(label='File',menu=filemenu)#在菜单栏上加入filemenu,以File的名字命名(cascade级联
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=window.quit)
editmenu=tk.Menu(menubar,tearoff=0)
menubar.add_cascade(label='Edit',menu=editmenu)
editmenu.add_command(label='Copy',command=do_job)
editmenu.add_command(label='Paste',command=do_job)
editmenu.add_command(label='Cut',command=do_job)
#进一步的子菜单
submenu=tk.Menu(filemenu,tearoff=0)
filemenu.add_cascade(label='Import',menu=submenu,underline=0)
submenu.add_command(label='Submenu1',command=do_job)
#把menubar放在window上
#改变window的参数,把menu改成我们设置好的menubar
window.config(menu=menubar)
window.mainloop()
P10视频笔记---Frame框架
GUI预览import tkinter as tk
window=tk.Tk()
window.title('my window')
window.geometry('200x200')
tk.Label(window,text='on the window').pack()
frm=tk.Frame(window)#Frame如果不加任何东西是看不到的
frm.pack()
frm_l=tk.Frame(frm)
tk.Label(frm_l,text='on the frm_l1').pack()
tk.Label(frm_l,text='on the frm_l2').pack()
frm_r=tk.Frame(frm)
tk.Label(frm_r,text='on the frm_r1').pack()
frm_l.pack(side='left')#左边
frm_r.pack(side='right')#右边
window.mainloop()
P11视频笔记---Messagebox弹窗
GUI预览import tkinter as tk
from tkinter import *
import tkinter.messagebox
window=tk.Tk()
window.title('my window')
window.geometry('200x200')
def hit_me():
# tk.messagebox.showinfo(title='Hi',message='hhahah')#显示信息show information
# tk.messagebox.showwarning(title='Hi', message='nonono') # 显示警告
# tk.messagebox.showerror(title='Hi', message='error') # 显示错误
# result=tk.messagebox.askquestion(title='Hi', message='继续')#返回yes或no,print--在终端输出了返回值
# if result == 'yes':#如果返回值是yes,继续进行下一步操作
# print(1)
# print(tk.messagebox.askyesno(title='Hi', message='继续'))#返回True或False
# print(tk.messagebox.askretrycancel(title='Hi', message='继续'))#重试或取消---返回True或False
print(tk.messagebox.askokcancel(title='Hi', message='继续'))#确定或取消---返回True或False
tk.Button(window,text='hit me',command=hit_me).pack()
window.mainloop()
P12 pack、grid、place放置位置
label--上下左右 grid输出 place()详见:
Python Tkinter Grid布局管理器详解www.cnblogs.com总结:pack()如果想设置的复杂一点,需要用frame框架;
grid()和pack()不能同时使用,会报错