您的位置:首页 > 编程语言 > Python开发

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()
  • 点赞
  • 收藏
  • 分享
  • 文章举报
佳佳佳佳佳111 发布了22 篇原创文章 · 获赞 0 · 访问量 90 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: