以下内容参考的是:Python GUI开发手册(化学工业出版社)
一、创建一个空白窗口:
from tkinter import * win = Tk() win.title("My GUI") win.mainloop()
二、设置窗口属性:
1、设置窗口样式的相关方法及其含义:
title()
geoemetry("widthxheight") 设置窗口标题
maxsize() 设置窗口的大不上及位置,单位为pilex
minsize() 窗口的最大尺寸
configure(bg=color) 窗口的最小尺寸
resizable(True,True) 设置窗口大小是否可以更改,第一个表示是否可以更改宽度,第二个是高度,默认True
state("zoomed") 将窗口最大化
iconify() 将窗口最小化
iconbitmap() 设置窗口的默认图标
示例:给窗口添加标题:
from tkinter import * win = Tk() win.title("My GUI") txt = Label(win,text="\n\ngame over\n\n").pack() win.mainloop()
三、设置窗口位置:
from tkinter import * win = Tk() win.title("My GUI") win.configure(bg="#a7ea90") #窗口背景颜色 winw = 300 #窗口宽度 winh = 220 #窗口高度 scrw = win.winfo_screenwidth() #获取屏幕宽度 scrh = win.winfo_screenheight() #获取屏幕高度 x = (scrw-winw)/2 #计算窗口的水平位置 y = (scrh-winh)/2 #计算窗口的垂直位置 win.geometry("%dx%d+%d+%d" %(winw,winh,x,y)) #设置窗口大小和位置 str = "\n\n登高\n\n风急天高猿啸哀,渚清沙白鸟飞回。\n\n无边落木萧萧下,不尽长江滚滚来。\n\n万里悲秋常作客,百年多病独登台。\n\n艰难苦恨繁霜鬓,潦倒新停浊酒杯。" txt = Label(win,text=str,fg="red",bg="#a7ea90").pack() win.mainloop()
四、tkinter组件分类:
1、文件类组件:
Label:标签组件。主要用于显示文本,添加提示信息
Entry:单行文本组件。只能添加单行文本
Spinbox:输入组件。可以理解为列表菜单与单行文本框的组合体,因为该组件既可以输入内容,也可以直接从现有的选项中选择值
Scale:数字范围组件。可以使用户拖动滑块选择数值,类似于HTML5表单中的range
2、按钮类组件:
Button:按钮组件
Radiobutton:单选组件
Checkbutton:复选框组件
3、选择列表类组件:
Listbox:列表框组件
Scrollbar:滚动条组件
OptionMenu:下拉列表
Combobox:组合框
4、容器类组件:
Frame:框架组件。用于将相关的组件放置在一起,以便于管理
LabelFrame:标签框架组件。将相关组件放置在一起,并给它们一个特定的名称
Toplevel:顶层窗口。重新打开一个新窗口,该窗口显示在根窗口的上方
PanelWindow:窗口布局管理。通过该组件可以手动修改其子组件的大小
Notebook:选项卡。选择不同的内容,窗口中可显示对应的内容
5、会话类组件:
Message:消息框。为用户显示一些短消息,与Label类似,但比Label更灵活
Messagebox:会话框。该组件提供了8种不同场景的会话框
6、菜单类组件:
Menu:菜单组件。可以为窗口添加菜单项以及二级菜单
Toolbar:工具栏。为窗口添加工具栏
Treeview:树菜单
7、进度条组件:
Progressbar:添加进度条
五、虽然tkinter模块中每个组件都有各自的属性,但有些属性是各组件通用的:
foreground或fg:设置组件中文字的颜色
background或bg:设置组件的背景颜色
width:设置组件的宽度
height:设置组件高度
anchor:文字在组件内输出的位置,默认为center
padx:组件的水平间距
pady:组件的垂直间距
font:组件的文字样式
relief:组件的边框样式,主要有:solid,raised,sunken,flat,groove,ridge
cursor:鼠标悬停在组件上时的样式
示例:
from tkinter import * win = Tk() win.title("My GUI") win.configure(bg="#a7ea90") #窗口背景颜色 winw = 300 #窗口宽度 winh = 220 #窗口高度 scrw = win.winfo_screenwidth() #获取屏幕宽度 scrh = win.winfo_screenheight() #获取屏幕高度 x = (scrw-winw)/2 #计算窗口的水平位置 y = (scrh-winh)/2 #计算窗口的垂直位置 win.geometry("%dx%d+%d+%d" %(winw,winh,x,y)) #设置窗口大小和位置 str = "\n\n登高\n\n风急天高猿啸哀,渚清沙白鸟飞回。\n\n无边落木萧萧下,不尽长江滚滚来。\n\n万里悲秋常作客,百年多病独登台。\n\n艰难苦恨繁霜鬓,潦倒新停浊酒杯。" txt = Label(win,text=str,fg="red",bg="#a7ea90",width=260,height=260,anchor="nw").pack() #anchor位置参数说明: #nw:左上角;w:左中间;sw:左下角;n:上中间;s:下中间;ne:右上角;e:右中间;se:右下角 win.mainloop()
font属性的参数及含义:
family:设置字体,例如:Times New Roman
size:设置字号,单位px
weight:设置文字粗细,如bold
slant:设置斜体,如italic
underline:添加下划线,值为True或False
overstrike:添加删除线,值为True或False
示例1:
from tkinter import * win = Tk() win.title("My GUI") win.configure(bg="#a7ea90") #窗口背景颜色 winw = 300 #窗口宽度 winh = 220 #窗口高度 scrw = win.winfo_screenwidth() #获取屏幕宽度 scrh = win.winfo_screenheight() #获取屏幕高度 x = (scrw-winw)/2 #计算窗口的水平位置 y = (scrh-winh)/2 #计算窗口的垂直位置 win.geometry("%dx%d+%d+%d" %(winw,winh,x,y)) #设置窗口大小和位置 str = "\n\n登高\n\n风急天高猿啸哀,渚清沙白鸟飞回。\n\n无边落木萧萧下,不尽长江滚滚来。\n\n万里悲秋常作客,百年多病独登台。\n\n艰难苦恨繁霜鬓,潦倒新停浊酒杯。" txt = Label(win,text=str,fg="red",bg="#C3DEEF",font=("华文新魏",16,"bold","italic","underline","overstrike"),padx=200,pady=10).pack() win.mainloop()
示例2:
from tkinter import * win = Tk() win.title("My GUI") win.configure(bg="#a7ea90") #窗口背景颜色 winw = 300 #窗口宽度 winh = 220 #窗口高度 scrw = win.winfo_screenwidth() #获取屏幕宽度 scrh = win.winfo_screenheight() #获取屏幕高度 x = (scrw-winw)/2 #计算窗口的水平位置 y = (scrh-winh)/2 #计算窗口的垂直位置 win.geometry("%dx%d+%d+%d" %(winw,winh,x,y)) #设置窗口大小和位置 str = "\n\n登高\n\n风急天高猿啸哀,渚清沙白鸟飞回。\n\n无边落木萧萧下,不尽长江滚滚来。\n\n万里悲秋常作客,百年多病独登台。\n\n艰难苦恨繁霜鬓,潦倒新停浊酒杯。" txt = Label(win,text=str,fg="red",bg="#C3DEEF",relief="groove",cursor="spider") txt.pack(padx=260,pady=260,side=LEFT) win.mainloop()
六、tkinter布局管理
1、pack()方法。它是常用的一种布局方式,其参数及含义如下:
side:设置组件水平展示或垂直展示,主要有四个属性值:
top:指组件从上到下依次排列,默认值
bottom:指组件从下到上依次排列
left:指组件从左到右依次排列
right:指组件从右到左依次排列
padx:设置组件距离窗口的水平距离
pady设置组件距离窗口的垂直距离
ipadx:设置组件内的文字距离组件边界的水平距离
ipady:设置组件内的文字距离组件边界的垂直距离
fill:设置组件填充所在的空白空间的方式,主要有四个属性值:
x:表示完全填充水平方向的空白空间
y:表示完全填充垂直方向的空白空间
both:表示水平和垂直方向的空白空间都完全填充
none:表示不填充空白空间,默认值
expand:设置组件是否完全填充其余空间(父容器的额外空间),其值为True(1)或False(0)
anchor:设置组件在窗口中的位置,其值如下:
nw:左上角;w:左中间;sw:左下角;n:上中间;s:下中间;ne:右上角;e:右中间;se:右下角
before:设置该组件应该位于指定组件的前面
after:设置该组件应该位于指定组件的后面
示例1:
from tkinter import * win = Tk() txt1 = "春风吹又生" txt2 = "夏浅蝉未多" txt3 = "秋到天空阔" txt4 = "冬钓寒江雪" Label(win,text=txt1,bg="#F5DFCC").pack(side="top",padx=20,pady=5,ipadx=10,ipady=5,fill="both") Label(win,text=txt2,bg="#EDB584").pack(side="top",padx=20,pady=5,ipadx=10,ipady=5) Label(win,text=txt3,bg="#EF994C").pack(side="top",padx=20,pady=5,ipadx=10,ipady=5) Label(win,text=txt4,bg="#A7EA90").pack(side="top",padx=20,pady=5,ipadx=10,ipady=5,fill="both") win.mainloop()
示例2:
from tkinter import * win = Tk() txt = "野火烧不尽,春风吹又生" Label(win,text=txt,bg="#E6F5C8",fg="red",font=14).pack(side="top",fill="x",expand=1,anchor="nw") win.mainloop()
示例3:
from tkinter import * win = Tk() win.geometry("350x150") #设置窗口大小 win.title("退出窗口提示") win.resizable(False,False) #不可更改窗口大小 txt1 = Label(win,text="确定退出本窗口吗?") txt2 = Label(win,text="果断退出",bg="#c1ffc1") txt3 = Label(win,text="我再想想",bg="#cdb5cd") txt1.pack(fill="x",padx=20) txt2.pack(side="right",anchor="se",padx=10,pady=20,ipadx=6) txt3.pack(side="right",anchor="se",padx=10,pady=20,ipadx=6) win.mainloop()
示例4:
from tkinter import * win = Tk() win.title("动力象棋") txt1 = Label(win,text="象吃狮",bg="#f1c5c5",font=14) txt4 = Label(win,text="豹吃狼",bg="#f1c5c5",font=14) txt3 = Label(win,text="虎吃豹",bg="#cdb5cd",font=14) txt2 = Label(win,text="狮吃虎",bg="#c1ffc1",font=14) txt6 = Label(win,text="狗吃猫",bg="#cdb5cd",font=14) txt7 = Label(win,text="猫吃鼠",bg="#f1c5c5",font=14) txt5 = Label(win,text="狼吃狗",bg="#c1ffc1",font=14) txt8 = Label(win,text="鼠吃象",bg="#c1ffc1",font=14) txt1.pack(side="left",padx=10,ipadx=6,fill="y",expand=1) #将txt2放在txt1前面 txt2.pack(side="left",padx=10,ipadx=6,fill="y",expand=1,before=txt1) txt3.pack(side="left",padx=10,ipadx=6,fill="y",expand=1,before=txt2) txt4.pack(side="left",padx=10,ipadx=6,fill="y",expand=1,before=txt3) txt5.pack(side="left",padx=10,ipadx=6,fill="y",expand=1,before=txt4) txt6.pack(side="left",padx=10,ipadx=6,fill="y",expand=1,before=txt5) txt7.pack(side="left",padx=10,ipadx=6,fill="y",expand=1,before=txt6) txt8.pack(side="left",padx=10,ipadx=6,fill="y",expand=1,before=txt7) win.mainloop()
2、grid()方法。网格布局,使用row定义组件所在的行,使用column定义组件所在的列,其相关参数及其含义如下:
row:组件所在行,从0开始
column:组件所在列,从0开始
rowspan:组件横向合并的行数
columnspan:组件纵向合并的行数
sticky:组件填充所分配空间空白区域的方式,和anchor类似,不过它只有4个可选的参数:
N:上对齐
S:下对齐
W:左对齐
E:右对齐
也可以组合使用:
N+S:拉长组件高度,使组件的顶端和底端对齐
N+S+E:拉长组件高度,使组件的顶端和底端对齐,同时切齐右边
N+S+W:拉长组件高度,使组件的顶端和底端对齐,同时切齐左边
E+W:拉长组件宽度,使组件的左边和右边对齐
N+S+E+W:拉长组件高度,使组件的顶端和底端对齐,同时切齐左边和右边
padx,pady:组件距离窗口边界的水平方向及垂直方向的距离
示例1:
from tkinter import * win = Tk() win.title("乘法口诀") Label(win,text="1 * 1=1",bg="#E0FFFF").grid(row=0,column=0,padx=10) Label(win,text="1 * 2=2",bg="#E0FFFF").grid(row=1,column=0,padx=10) Label(win,text="1 * 3=3",bg="#E0FFFF").grid(row=2,column=0,padx=10) Label(win,text="1 * 4=4",bg="#E0FFFF").grid(row=3,column=0,padx=10) Label(win,text="2 * 2=4",bg="#EEA9B8").grid(row=1,column=1,padx=10) Label(win,text="2 * 3=6",bg="#EEA9B8").grid(row=2,column=1,padx=10) Label(win,text="2 * 4=8",bg="#EEA9B8").grid(row=3,column=1,padx=10) Label(win,text="3 * 3=9",bg="#F08080").grid(row=2,column=2,padx=10) Label(win,text="3 * 4=12",bg="#F08080").grid(row=3,column=2,padx=10) Label(win,text="4 * 4=16",bg="#FFE1FF").grid(row=3,column=3,padx=10) win.mainloop()
合并网格示例:
from tkinter import * win = Tk() Label(win,text="横向合并4格",width=15,height=1,relief="groove",bg="#EDE19A").grid(row=0,column=0,columnspan=4,sticky="w") Label(win,text="横向合并2格",width=15,height=1,relief="groove",bg="#EDBE9A").grid(row=1,column=0,columnspan=2,sticky="W") Label(win,text="横向合并2格",width=15,height=1,relief="groove",bg="#EDBE9A").grid(row=1,column=1,columnspan=2,sticky="W") Label(win,text="不合并",width=15,height=1,relief="groove",bg="#E5AEAE").grid(row=2,column=0) Label(win,text="不合并",width=15,height=1,relief="groove",bg="#E5AEAE").grid(row=2,column=1) Label(win,text="不合并",width=15,height=1,relief="groove",bg="#E5AEAE").grid(row=2,column=2) Label(win,text="不合并",width=15,height=1,relief="groove",bg="#E5AEAE").grid(row=2,column=3) win.mainloop()
3、rowconfigure()和columnconfigure()方法设置组件的缩放比例:
tkinter模块添加的窗口默认情况下都可以通过鼠标拖动改变大小的,而当窗口大小改变时,可以通过rowconfigure()和columnconfigure()方法改变某行或某列组件所占空间随窗口缩放的比例。需要注意的是,两个方法是设置在父容器上的,并不是设置在组件上的。用法如下:
rowconfigure(0,weight=1)
columnconfigure(1,weight=1)
0,1分别表示第一行和第二列。weight=1表示随窗口缩放的比例为1
示例:
from tkinter import * win = Tk() win.rowconfigure(0,weight=1) win.columnconfigure(1,weight=1) Label(win,width=15,height=2,relief="groove",bg="pink").grid(row=0,column=0,sticky=N+W) #第一行第一列 Label(win,width=15,height=2,relief="groove",bg="gray").grid(row=0,column=1,sticky=N+E) #第一行第二列 Label(win,width=15,height=2,relief="groove",bg="yellow").grid(row=1,column=0,sticky=N+S+W) #第二行第一列 Label(win,width=15,height=2,relief="groove",bg="blue").grid(row=1,column=1,sticky=N+S+E) #第二行第二列 win.mainloop()
4、place()方法。可以设置组件的大小以及组件在容器中的精确位置。其参数及含义如下:
x:设置组件距离窗口左侧的水平距离
y:设置组件距离窗口顶部的垂直距离
width:设置组件的宽度
height:设置组件的高度
relx:设置组件距离容器左侧的相对距离,数值范围0-1
rely:设置组件距离容器顶部的相对距离,数值范围0-1
relwidth:组件相对父容器的宽度,数值范围0-1
relheight:组件相对父容器的高度,数值范围0-1
示例1:
from tkinter import * win = Tk() win.title("华容道") win.geometry("240x300") Label(win,text="赵云",bg="#93edd4",relief="groove",font=14).place(width=60,height=120,x=0,y=0) Label(win,text="曹操",bg="#a6e3a8",relief="groove",font=14).place(width=120,height=120,x=60,y=0) Label(win,text="黄忠",bg="#93edd4",relief="groove",font=14).place(width=60,height=120,x=180,y=0) Label(win,text="张飞",bg="#93edd4",relief="groove",font=14).place(width=60,height=120,x=0,y=120) Label(win,text="关羽",bg="#93edd4",relief="groove",font=14).place(width=120,height=60,x=60,y=120) Label(win,text="马超",bg="#93edd4",relief="groove",font=14).place(width=60,height=120,x=180,y=120) Label(win,text="卒",bg="#f3f5c4",relief="groove",font=14).place(width=60,height=60,x=60,y=180) Label(win,text="卒",bg="#f3f5c4",relief="groove",font=14).place(width=60,height=60,x=120,y=180) Label(win,text="卒",bg="#f3f5c4",relief="groove",font=14).place(width=60,height=60,x=0,y=240) Label(win,text="卒",bg="#f3f5c4",relief="groove",font=14).place(width=60,height=60,x=180,y=240) win.mainloop()
示例2:
from tkinter import * win = Tk() win.title("华容道") win.geometry("240x300") Label(win,text="赵云",bg="#93edd4",relief="groove",font=14).place(relwidth=0.25,relheight=0.4,relx=0,rely=0) Label(win,text="曹操",bg="#a6e3a8",relief="groove",font=14).place(relwidth=0.5,relheight=0.4,relx=0.25,rely=0) Label(win,text="黄忠",bg="#93edd4",relief="groove",font=14).place(relwidth=0.25,relheight=0.4,relx=0.75,rely=0) Label(win,text="张飞",bg="#93edd4",relief="groove",font=14).place(relwidth=0.25,relheight=0.4,relx=0,rely=0.4) Label(win,text="关羽",bg="#93edd4",relief="groove",font=14).place(relwidth=0.5,relheight=0.2,relx=0.25,rely=0.4) Label(win,text="马超",bg="#93edd4",relief="groove",font=14).place(relwidth=0.25,relheight=0.4,relx=0.75,rely=0.4) Label(win,text="卒",bg="#f3f5c4",relief="groove",font=14).place(relwidth=0.25,relheight=0.2,relx=0.25,rely=0.6) Label(win,text="卒",bg="#f3f5c4",relief="groove",font=14).place(relwidth=0.25,relheight=0.2,relx=0.5,rely=0.6) Label(win,text="卒",bg="#f3f5c4",relief="groove",font=14).place(relwidth=0.25,relheight=0.2,relx=0,rely=0.8) Label(win,text="卒",bg="#f3f5c4",relief="groove",font=14).place(relwidth=0.25,relheight=0.2,relx=0.75,rely=0.8) win.mainloop()
七、tkinter常用组件:
1、文本类组件:
1.1、Label标签
示例代码:
from tkinter import * win=Tk() #添加标题 win.title("斗兽棋游戏的食物链") #添加标题 # textd定义Label标签里的文本内容,bg表示Label的背景颜色 txt1=Label(win,text="象",bg="#FFEBCD",width=5,padx=4,pady=4,font="10") txt2=Label(win,text="狮",bg="#c1ffc1",width=5,padx=4,pady=4,font="10") txt3=Label(win,text="虎",bg="#FFEBCD",width=5,padx=4,pady=4,font="10") txt4=Label(win,text="豹",bg="#c1ffc1",width=5,padx=4,pady=4,font="10") txt5=Label(win,text="狼",bg="#FFEBCD",width=5,padx=4,pady=4,font="10") txt6=Label(win,text="狗",bg="#c1ffc1",width=5,padx=4,pady=4,font="10") txt7=Label(win,text="猫",bg="#FFEBCD",width=5,padx=4,pady=4,font="10") txt8=Label(win,text="鼠",bg="#c1ffc1",width=5,padx=4,pady=4,font="10") # foreground设置label组件的文字颜色 txtr1=Label(win,text="→",padx=2,pady=2,foreground="#B22222").grid(row=1,column=2) txtr2=Label(win,text="→",padx=2,pady=2,foreground="#B22222").grid(row=1,column=4) txtb1=Label(win,text="↓",padx=2,pady=2,foreground="#B22222").grid(row=2,column=5) txtb2=Label(win,text="↓",padx=2,pady=2,foreground="#B22222").grid(row=4,column=5) txtl1=Label(win,text="←",padx=2,pady=2,foreground="#B22222").grid(row=5,column=4) txtl2=Label(win,text="←",padx=2,pady=2,foreground="#B22222").grid(row=5,column=2) txtt1=Label(win,text="↑",padx=2,pady=2,foreground="#B22222").grid(row=4,column=1) txtt2=Label(win,text="↑",padx=2,pady=2,foreground="#B22222").grid(row=2,column=1) # 设置斗兽棋游戏的棋子的位置 txt1.grid(row=1,column=1) txt2.grid(row=1,column=3) txt3.grid(row=1,column=5) txt4.grid(row=3,column=5) txt5.grid(row=5,column=5) txt6.grid(row=5,column=3) txt7.grid(row=5,column=1) txt8.grid(row=3,column=1) win.mainloop()
示例-Label标签中添加图片:
from tkinter import * from PIL import Image,ImageTk win=Tk() image = Image.open(f'D:\\temp\\6.png') img = ImageTk.PhotoImage(image) Label(win,image=img).pack() win.mainloop()
如果Label组件中既有文字又有图片,则可以通过Label组件中的compound设置图片与文字的显示位置,具体参数如下:
top:图片位于文字上方
bottom;图片位于文字下方
left:图片位于文字左侧
right:图片位于文字右侧
center:文字位于图片上(图片与文字重叠,且文字在图片的上层)
1.2、Entry单行文本框
使用方法:Entry(win),示例1:
from tkinter import * win=Tk() Label(win,text="出发地:",font=14).grid(pady=10,row=0,column=0) Entry(win).grid(row=0,column=1) Label(win,text="目的地:",font=14).grid(pady=10,row=1,column=0) Entry(win).grid(row=1,column=1) win.mainloop()
如果是密码框,可以用以下方式:Entry(win,show="*")
示例2:
from tkinter import * win=Tk() Label(win,text="密码:",font=14).grid(pady=10,row=0,column=0) Entry(win,show="*").grid(row=0,column=1) win.mainloop()
示例3-登录窗口:
from tkinter import * win=Tk() win.configure(bg="#EFE5D2") Label(win,text="用户:",font=14).grid(pady=10,row=0,column=0) Entry(win).grid(row=0,column=1) Label(win,text="密码:",font=14).grid(pady=10,row=1,column=0) Entry(win,show="*").grid(row=1,column=1) Label(win,text="确定",relief="groove").grid(row=2,columnspan=2,pady=10) win.mainloop()
Entry提供的三个组件:
get():获取文本框的内容
insert():在文本框的指定位置添加内容,如:entry.insert(index,str)
delete():删除文本框中指定的内容,如:entry.delete(first,end)
示例4-相加计数器:
from tkinter import * win=Tk() win.configure(bg="#EFE5D2") def add(): res.delete(0,END) #清空显示结果的文本框的内容 add1 = int(op1.get()) add2 = int(op2.get()) res.insert(INSERT,add1+add2) #INSERT表示从当前光标处开始插入 op1=Entry(win,width=5,relief="groove") op1.grid(row=0,column=0) Label(win,text="+").grid(row=0,column=1) op2=Entry(win,width=5,relief="groove") op2.grid(row=0,column=2) Label(win,text="=").grid(row=0,column=3) res = Entry(win,width=5,relief="groove") res.grid(row=0,column=4) Button(win,text="计算",command=add,relief="groove").grid(row=0,column=5,ipadx=10) win.mainloop()
1.3、Text多行文本框
用法Text(win)。可以通过insert()方法添加初始文本。Text组件中添加图片需要创建PhotoImage()对象,然后通过image_create()引入图像。如:
photo = PhotoImage(file="D:\test\ico.png")
text.image_create(END,image=photo)
以上方法只能引入png格式的图片,如果要引入其它格式的请参考:示例-Label标签中添加图片。
示例-在文本框中添加图片、文字及按钮:
from tkinter import * from PIL import Image,ImageTk i = 0 def show(): global i i += 1 label.config(text="你点了我\t"+str(i)+"下") win = Tk() text = Text(win,width=45,height=10,bg="#cae1ff",relief="solid") image = Image.open(f'E:\\网页素材大全\\按钮\\0034.gif') photo = ImageTk.PhotoImage(image) text.image_create(END,image=photo) text.insert(INSERT,"在这里添加文本:\n") text.pack() bt = Button(win,text="你点我试试",command=show,padx=10) text.window_create("2.0",window=bt) #将按钮放在Text组件中的第2行第1列 label = Label(win,padx=10,text="你点了我0下") text.window_create("2.end",window=label) #将Label放在Text组件中的第2行最后一列 win.mainloop()
Text组件的索引方式有我种,以下是常见的几种:
line.column:如"2.3"表示第2行第4列
insert:在光标的位置插入,如上面的text.insert(INSERT,"在这里添加文本:\n")
end:最后一个字符的位置,如果字符串为end,表示所有文本的最后一个字符位置;如果字符串为line.end表示当前行的最后一个字符位置
+count chars:指定位置向后移动count个字符。如:"2.1+2 chars"表示第2行第4个字符的位置
-count chars:指定位置向前移动count个字符。如:"2.3-2 chars"表示第2行第2个字符的位置
注意:Text组件中获取字符串的索引位置时,第1行的索引为1,第1列的索引为0
示例:
from tkinter import * win = Tk() text = Text(win) text.insert(INSERT,"I love python") text.pack() print(text.get(1.2,1.6)) #获取Text组件的第1行第3列到第1行第7列的字符(love) win.mainloop()
Text组件提供了一些方法或以获取或编辑Text组件中的内容,常见方法如下:
delete():删除Text组件中的内容
get():获取文本内容
mark_set():添加标记
search():搜索文本
edit_undo():撤销操作
edit_separator():添加分割线。之后再进行撤销操作时不会撤销所有操作,只是撤销上一次的操作
示例-用Ctrl+z和Ctrl+y执行撤销和恢复操作:
from tkinter import * win = Tk() def undo1(event): text.edit_undo() #撤销操作 def redo1(event): #恢复操作 text.edit_redo() def callback(event): text.edit_separator() #每单击一次键盘就添加一个分割线,否则会撤销或恢复所有操作 text = Text(win,width=50,height=30,undo=True,autoseparators=False) text.pack() #添加提示性文字 text.insert(INSERT,'在下方可以添加文本,通过Ctrl+z撤销,Ctrl+y恢复:\n\n') text.bind('<Key>',callback) text.bind('<Control-Z>',undo1) text.bind('<Control-Y>',redo1) win.mainloop()
待续......
标签:bg,tkinter,win,Label,模块,text,组件,row From: https://www.cnblogs.com/donfag/p/17808204.html