python 0基础学习笔记10: tkinter
2020-01-12 22:42
148 查看
tkinter:
创建窗体
import tkinter #创建主窗口 win = tkinter.Tk() #设置标题 win.title('标题') #设置大小和位置 win.geometry('400x400+200+20')#左侧留200,上侧留20,长宽为400 #进入消息循环 win.mainloop()
Label控件:标签控件可以显示文本
import tkinter #创建主窗口 win = tkinter.Tk() #设置标题 win.title('标题') #设置大小和位置 win.geometry('400x400+200+20')#左侧留200,上侧留20,长宽为400 #win:父窗体,text:显示的文本内容,bg:背景色,fg:字体颜色,font:字体,wraplength:指定文本中多宽进行换行,justify:设置换行后的对齐方式,anchor:位置(n, ne, e, se, s, sw, w, nw, or center) label = tkinter.Label(win,text='tom is a boy',bg='pink',fg='red',font=('黑体',20),width=20,height = 4,wraplength=100,justify='left',anchor='center') #显示出来 label.pack() win.mainloop()
Button控件:按钮控件
import tkinter def func(): print('tom is a boy') #创建主窗口 win = tkinter.Tk() #设置标题 win.title('标题') #设置大小和位置 win.geometry('400x400+200+20')#左侧留200,上侧留20,长宽为400 #创建按钮 button1 = tkinter.Button(win,text='按钮',command=func,width=10,height=5) button1.pack() button2 = tkinter.Button(win,text='按钮',command=lambda :print('abcdefg')) button2.pack() button3 = tkinter.Button(win,text='按钮',command=win.quit) button3.pack() win.mainloop()
Entry控件:输入控件,用于显示简单的文本内容
import tkinter #创建主窗口 win = tkinter.Tk() #设置标题 win.title('标题') #设置大小和位置 win.geometry('400x400+200+20')#左侧留200,上侧留20,长宽为400 #绑定变量 e = tkinter.Variable() #创建一个输入 #show:密文显示 ,show = '*' entry = tkinter.Entry(win,textvariable = e) entry.pack() #在这之后e及代表输入框里的值 #设置值 e.set('tom is a boy') #取值,有两种方法 print(e.get()) print(entry.get()) win.mainloop()
点击按钮输出输入框的内容:
import tkinter def shouInfo(): print(entry.get()) #创建主窗口 win = tkinter.Tk() #设置标题 win.title('标题') #设置大小和位置 win.geometry('400x400+200+20')#左侧留200,上侧留20,长宽为400 entry = tkinter.Entry(win) entry.pack() button1 = tkinter.Button(win,text='按钮',command=shouInfo) button1.pack() win.mainloop()
Text控件:文本控件,用于显示多行文本
import tkinter win = tkinter.Tk() win.title('标题') win.geometry('400x400+200+20')#左侧留200,上侧留20,长宽为400 text = tkinter.Text(win,width=30,height=4) text.pack() str = '''昵称:佳佳佳佳佳111修改资料 实名: 性别:女 生日: 地区:中国 北京 海淀区 行业:通信(设备·运营·增值服务) 职位: 简介''' text.insert(tkinter.INSERT,str) win.mainloop()
带滚动条的Text:
import tkinter win = tkinter.Tk() win.title('标题') # win.geometry('400x400+200+20')#左侧留200,上侧留20,长宽为400 #创建滚动条 scroll = tkinter.Scrollbar() text = tkinter.Text(win,width=30,height=4) #side:放到窗体哪一侧,fill:填充哪一个轴 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 = '''昵称:佳佳佳佳佳111修改资料 实名: 性别:女 生日: 地区:中国 北京 海淀区 行业:通信(设备·运营·增值服务) 职位: 简介''' text.insert(tkinter.INSERT,str) win.mainloop()
Checkbutton多选框控件:
import tkinter def updata(): message = '' if hobby1.get() == True: message += 'money\n' if hobby2.get() == True: message += 'power\n' if hobby3.get() == True: message += 'people\n' text.delete(0.0,tkinter.END)#清除text中所有内容 text.insert(tkinter.INSERT,message) win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #绑定变量 hobby1 = tkinter.BooleanVar() hobby2 = tkinter.BooleanVar() hobby3 = tkinter.BooleanVar() check1 = tkinter.Checkbutton(win,text='money',variable=hobby1,command = updata) check1.pack() check2 = tkinter.Checkbutton(win,text='power',variable=hobby2,command = updata) check2.pack() check3 = tkinter.Checkbutton(win,text='people',variable=hobby3,command = updata) check3.pack() text = tkinter.Text(win,width=50,height=5) text.pack() win.mainloop()
Radiobutton单选框控件:
import tkinter def updata(): print(r.get()) win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #绑定变量,一组单选框要绑定同一个变量 r = tkinter.IntVar()#value为数值用这个 # r = tkinter.StringVar()#value为字符串用这个 radio1 = tkinter.Radiobutton(win,text='one',value=12,variable=r,command = updata) radio1.pack() radio2 = tkinter.Radiobutton(win,text='two',value=27,variable=r,command = updata) radio2.pack() text = tkinter.Text(win,width=50,height=5) text.pack() win.mainloop()
Listbox:列表框控件,可以包含一个或多个文本框
作用:在Listbox控件的小窗口显示一个字符串
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #1、创建一个listbox,添加几个元素 lb = tkinter.Listbox(win,selectmode = tkinter.BROWSE) lb.pack() for item in ['good','nice','cool','a','b','c']: #按顺序添加 lb.insert(tkinter.END,item) #在开始添加 lb.insert(tkinter.ACTIVE,'handsome') # lb.insert(tkinter.END,['very cool','very good'])#会将列表当一个元素去添加,一般不这么用 #删除,参数1位开始的索引,参数2位结束的索引,参数2可以不写,默认为之善书第一个所引出的内容 lb.delete(1,2) #选中,参数1参数2含义同上 lb.select_set(1,2) lb.select_set(3) #取消选中,参数1参数2含义同上 # lb.select_clear(1,2) # lb.select_clear(2) #获取到列表中的元素个数 print(lb.size())#5 #从列表中取值,参数1参数2含义同上 print(lb.get(2,3))#('a', 'b') print(lb.get(2))#a #返回当前的索引项,不是item元素 print(lb.curselection())#(1, 2, 3) #判断 一个选项 是否被选择 print(lb.selection_includes(1))#True win.mainloop()
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #绑定变量 lbv = tkinter.StringVar() #与BORWSE相似,但不支持鼠标按下后 移动选中位置 lb = tkinter.Listbox(win,selectmode=tkinter.SINGLE,listvariable=lbv) lb.pack() for item in ['good','nice','cool','a','b','c']: lb.insert(tkinter.END,item) #打印当前列表中的选项 print(lbv.get())#('good', 'nice', 'cool', 'a', 'b', 'c') #设置选项,把所有的选项都变了 # lbv.set(('1','2','3')) def myPrint(event): # print(lb.curselection())#返回的是下标 print(lb.get(lb.curselection()))#返回选项值 #绑定事件 lb.bind('<Double-Button-1>',myPrint)#表示鼠标左键双击 win.mainloop()
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #EXTENDED可以使listbox支持shift和ctrl,支持连选和多选 lb = tkinter.Listbox(win,selectmode = tkinter.EXTENDED) lb.pack() for item in ['good','nice','handsome','a','b']: lb.insert(tkinter.END,item) win.mainloop()
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #EXTENDED可以使listbox支持shift和ctrl lb = tkinter.Listbox(win,selectmode = tkinter.EXTENDED) for item in ['good','nice','handsome','a','b','good','nice','handsome','a','b']: lb.insert(tkinter.END,item) #创建滚动条 sc = tkinter.Scrollbar(win) sc.pack(side = tkinter.RIGHT,fill = tkinter.Y) lb.pack(side = tkinter.LEFT,fill = tkinter.BOTH) lb.config(yscrollcommand=sc.set)#文本动,滚动条动,但是滚动条动,文本不动 #额外给属性赋值 sc['command'] = lb.yview win.mainloop()
注意:
#MULTIPLE支持多选,只把上一个代码改一个属性即可 lb = tkinter.Listbox(win,selectmode = tkinter.MULTIPLE)
Scale:供用户通过拖拽指示器改变变量的值,可以水平,也可以竖直
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #from_=0,to=100是起始值和终点值,HORIZONTAL是水平的,VERTICAL是竖直的,tickinterval :选择值将会成为该值的倍数,length:,水平时表示宽度,竖直时表示高度 scale = tkinter.Scale(win,from_=0,to=100,orient = tkinter.VERTICAL,tickinterval = 50,length = 200) scale.pack() #设置值 scale.set(20) #取值 def showNum(): print(scale.get()) tkinter.Button(win,text = '按钮',command = showNum).pack() win.mainloop()
Spinbox控件:数值范围控件
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') def updata(): print(v.get()) #绑定变量 v = tkinter.StringVar() #from_=0,to=100是起始值和终点值,increment为步长,默认为1, #values =( 0,2,4,6,8)是个元组,最好不要和from_=0,to=100,increment同时使用 #command = 方法名,只要值改变,就会执行对应的方法。 sp = tkinter.Spinbox(win,from_=0,to=100,increment = 5,textvariable = v,command = updata) sp.pack() v.set(20) print(v.get()) win.mainloop()
Menu控件之顶层菜单控件
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #菜单条 menubar = tkinter.Menu(win) win.config(menu = menubar) def func(): print('abc') #创建菜单选项,eg.file,edit,等等 menu1 = tkinter.Menu(menubar,tearoff = False) #给菜单选项添加内容,eg.file下面的内容 for item in ['Python','C','C++','OC','Swift','C#','shell','Java','Js','汇编','NodeJS','退出']: if item == '退出': menu1.add_separator()#添加分割线 menu1.add_command(label = item,command = win.quit) else: menu1.add_command(label = item,command = func) #向菜单条上添加菜单 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()
Menu控件之鼠标右键菜单控件
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #菜单条 menubar = tkinter.Menu(win) #创建右键菜单选项 menu = tkinter.Menu(menubar,tearoff = False) #给菜单选项添加内容 for item in ['Python','C','C++','OC','Swift','C#','shell','Java','Js','汇编','NodeJS','退出']: 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()
Combobox:下拉控件
import tkinter from tkinter import ttk win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #绑定变量 cv = tkinter.StringVar() com = ttk.Combobox(win,textvariable = cv) com.pack() #设置下拉数据 com['value'] = ('黑龙江','吉林','辽宁')#此时打开为空 #设置默认值 com.current(0) #绑定事件 def func(event): print(com.get())#说明此控件可以直接get print(cv.get()) print('abc') com.bind('<<ComboboxSelected>>',func) win.mainloop()
Frame:框架控件,在屏幕上可以显示一个矩形区域,多作为容器控件
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') frm = tkinter.Frame(win) frm.pack() #在frm的left侧放继续放frm frm_1 = tkinter.Frame(frm)#()里面写的谁就是在谁的里面创建,这里也可以改为win,效果不同的 tkinter.Label(frm_1,text='左上',bg='pink').pack(side=tkinter.TOP) tkinter.Label(frm_1,text='左下',bg='blue').pack(side=tkinter.TOP) frm_1.pack(side=tkinter.LEFT) #在frm的right侧放继续放frm frm_2 = tkinter.Frame(win) tkinter.Label(frm_2,text='右上',bg='red').pack(side=tkinter.TOP) tkinter.Label(frm_2,text='右下',bg='yellow').pack(side=tkinter.TOP) frm_2.pack(side=tkinter.RIGHT) win.mainloop()
表格数据:
import tkinter from tkinter import ttk win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #表格 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='line1',values=('tom','23','165','60')) tree.insert('',1,text='line1',values=('jem','25','169','70')) win.mainloop()
树状数据:
import tkinter from tkinter import ttk win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #类似于计算机-C-D-E-F盘的级别形式 tree=ttk.Treeview(win) tree.pack() #添加一级树枝 treeF1 = tree.insert('',0,'中国',text ='中国-China',values=('F1') ) treeF2 = tree.insert('',1,'美国',text ='美国-USA',values=('F2') ) treeF3 = tree.insert('',2,'英国',text ='英国-UK',values=('F3') ) #添加二级树枝 treeF1_1 = tree.insert(treeF1,0,'黑龙江',text='中国黑龙江',values = ('F1_1')) treeF1_2 = tree.insert(treeF1,1,'吉林',text='中国吉林',values = ('F1_2')) treeF1_3 = tree.insert(treeF1,2,'辽宁',text='中国辽宁',values = ('F1_3')) win.mainloop()
绝对布局:
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') label1 = tkinter.Label(win,text='good',bg='blue') label2 = tkinter.Label(win,text='nice',bg='red') label3 = tkinter.Label(win,text='cool',bg='pink') #绝对布局,窗口大小变换,对位置没有影响 label1.place(x=10,y=10) label2.place(x=50,y=50) label3.place(x=100,y=100) win.mainloop()
相对布局:
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') label1 = tkinter.Label(win,text='good',bg='blue') label2 = tkinter.Label(win,text='nice',bg='red') label3 = tkinter.Label(win,text='cool',bg='pink') #相对布局,窗口大小变换,对位置有影响 #tkinter.BOTH label1.pack(fill=tkinter.Y,side=tkinter.LEFT) label2.pack(fill=tkinter.X,side=tkinter.TOP) label3.pack() win.mainloop()
表格布局:
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') label1 = tkinter.Label(win,text='good',bg='blue') label2 = tkinter.Label(win,text='nice',bg='red') label3 = tkinter.Label(win,text='cool',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()
鼠标点击事件:Button-i
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') #鼠标左键<Button-1> def func(event): print(event.x,event.y)#显示点击位置的坐标位置 button1 = tkinter.Button(win,text='leftmouse button') button1.bind('<Button-1>',func)#bind是给控件绑定事件 button1.pack() #鼠标右键<Button-3> button1 = tkinter.Button(win,text='leftmouse button') button1.bind('<Button-3>',func) button1.pack() #鼠标中键<Button-2>,滚轮 #鼠标右键双击<Double-Button-3> #鼠标左键双击<Double-Button-1> #鼠标中键双击<Double-Button-2> #鼠标右键3击<Triple-Button-3> #鼠标左键3击<Triple-Button-1> #鼠标中键3击<Triple-Button-2> win.mainloop()
鼠标移动事件:按住鼠标在控件内移动
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') def func(event): print(event.x,event.y)#显示点击位置的坐标位置 #<B1-Motion>表示按住左键在控件内移动 #<B2-Motion>表示按住中键在控件内移动 #<B3-Motion>表示按住右键在控件内移动 label1 = tkinter.Label(win,text='1234567890') label1.pack() label1.bind('<B1-Motion>',func) win.mainloop()
鼠标释放事件:释放鼠标时事件发生
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') def func(event): print(event.x,event.y)#显示点击位置的坐标位置 label1 = tkinter.Label(win,text='1234567890',bg='red') label1.pack() label1.bind('<ButtonRelease-1>',func) win.mainloop()
进入事件::当鼠标光标进入构件时事件发生
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') def func(event): print(event.x,event.y)#显示点击位置的坐标位置 label1 = tkinter.Label(win,text='1234567890',bg='red') label1.pack() label1.bind('<Enter>',func) win.mainloop()
离开事件::当鼠标光标离开构件时事件发生
label1.bind('<Leave>',func)#其他同上,就改这一处
响应所有按键事件:
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') def func(event): print('event.char=',event.char) print('event.keycode=', event.keycode) label1 = tkinter.Label(win,text='1234567890',bg='red') label1.focus_set()#设置焦点 label1.pack() label1.bind('<Key>',func)#在窗口点击鼠标左键,随意按键盘的键 win.mainloop()
或者不设置焦点:直接给win添加
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') def func(event): print('event.char=',event.char) print('event.keycode=', event.keycode) win.bind('<Key>',func) win.mainloop()
响应特殊按键的事件:
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') def func(event): print('event.char=',event.char) print('event.keycode=', event.keycode) label1 = tkinter.Label(win,text='1234567890',bg='red') label1.focus_set()#设置焦点 label1.pack() label1.bind('<Shift_L>',func)#响应左侧的shift label1.bind('<Shift_R>',func)#响应右侧的shift #<F5> #<Return>回车键 #<BackSpace>退格键 win.mainloop()
指定按键事件:
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') def func(event): print('event.char=',event.char) print('event.keycode=', event.keycode) label1 = tkinter.Label(win,text='1234567890',bg='red') label1.focus_set()#设置焦点 label1.pack() label1.bind('a',func)#只有按a才响应 win.mainloop()
组合按键事件:
import tkinter win = tkinter.Tk() win.title('这里是标题') win.geometry('400x400+200+20') def func(event): print('event.char=',event.char) print('event.keycode=', event.keycode) label1 = tkinter.Label(win,text='1234567890',bg='red') label1.focus_set()#设置焦点 label1.pack() label1.bind('<Control-Alt-a>',func)#组合键,还有很多,比如Shift-Up等 win.mainloop()
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- python基础教程_学习笔记10:异常
- python基础教程_学习笔记10:异常
- Python学习笔记10——语法基础
- python Tkinter学习笔记 基础UI控件 01
- Python基础学习笔记二
- Python基础学习笔记
- python 学习笔记 1 -- 基础篇
- Python2.7 学习笔记 (一)——基础知识
- python基础学习笔记(八)
- python基础教程_学习笔记7:条件、循环、其它语句
- python 3.0学习笔记之二------python基础小知识
- Python基础教程学习笔记----第四章 字典
- python基础学习笔记(十)
- Python学习笔记2:Python基础
- Python核心编程--学习笔记--3--Python基础
- python基础学习笔记1
- python基础教程_学习笔记5:字符串
- Python核心编程(第二版)学习笔记02 【第3章 Python基础】
- python 0基础学习笔记11:读写不同类型的文件