首页 > 其他分享 >tkinter模块

tkinter模块

时间:2023-11-03 18:55:19浏览次数:31  
标签:bg tkinter win Label 模块 text 组件 row

以下内容参考的是: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

相关文章

  • Python之openpyxl模块的学习
    简介之前针对Excel的读取都是使用的xlrd模块,但是在一次实践中发现xlrd模块去掉了对xlsx格式的支持,因此改用openpyxl。以下内容仅包含使用openpyxl读取Excel文档的操作,并且比较浅显,更多内容请参考官方文档。注:一个excel就是一个工作簿(workbook),一个工作簿含有多个工作表(sheet)实......
  • angie njs 模块试用
    angienjs是一个类似lua的模块,提供了基于js进行nginx功能开发的能力(但是目前没有nginxlua模块强大)以下是一个简单试用环境准备基于了以前测试nginxlua模块的基础镜像http.js functionfoo(r){r.log("hellofromfoo()handler");return......
  • angie nginx_lua 模块使用
    angie包含了不少社区模块,docker镜像更加方便,都已经安装了,以下是一个测试lua模式的使用因为默认官方构建的是一个动态扩展模块,对于三方lua模块安装不是很方便,我参考了openresty对于luarocks的支持,这样我们自己安装三方lua模块就比较方便的构建支持luarocks的dcoker镜......
  • 爬虫之requests模块
    一、爬虫介绍1、2、二、requests模块1、2、三、携带请求参数1、2、四、url编码和解码1、2、五、携带请求头1、2、六、发送post请求1、2、七、携带cookie1、2、八、响应对象1、2、九、高级用法1、2、......
  • 振弦采集读数模块如何连接设备
    振弦采集读数模块如何连接设备振弦采集读数模块是一种可以用来监测物体振动情况的设备,可以应用在机器运转状态监测、结构健康监测、地震测量等领域。它主要通过传感器对物体的振动进行监测,并将监测到的数据输出到计算机或其他设备上,以便进行分析和判断。 要使用振弦采集读数......
  • jar包的精细化运营,Java模块化简介 | 京东云技术团队
    图:模块化手机概念一、什么是Java模块化Java模块化(module)是Java9及以后版本引入的新特性。官方对模块的定义为:一个被命名的,代码和数据的自描述集合。(themodule,whichisanamed,self-describingcollectionofcodeanddata)。早在Java7的时候就被提出,但由于其复杂性,不断跳票,直......
  • Ansible操作MySQL常用的几个模块
    1. mysql_user模块mysql_user模块用来添加,删除用户以及设置用户权限创建MySQL数据库的用户与口令(非root@localhost用户),直接通过playbooks中的案例来说明吧。-name:创建MySQL数据库用户--user_testmysql_user:#-----登陆数据库login_host:"localhost"......
  • pyttsx3模块
    1、介绍pyttsx3模块是python的一个第三方模块,作用是进行语音合成。无需请求api,本地合成,可以不受次数和字数限制技术相对成熟,应用广泛,使用方便2、pyttsx3.speak函数importpyttsx3pyttsx3.speak('你指尖跃动的电光,是我此生不灭的信仰')这是该模块最简应用,调用speak函数时......
  • angie vod_module 模块的问题
    上次我简单说过angie官方构建的nginx-vod-module有一些问题,经常测试实际上问题还是不小的主要问题声音处理会有问题同时缩略图似乎也有问题解决方法应该自己构建nginx-vod-module,同时编译为动态模块(包含debug最好)说明实际上通过日志我们也看出了不少警告信息,十实际上......
  • python tkinter事件循环中一直检测初始化加载文件有没有加载成功
     pythontkinter事件循环中一直检测初始化加载文件有没有加载成功importtkinterastkdefcheck_file_loaded():#检查文件是否加载成功的逻辑iffile_loaded:#文件加载成功,执行相应操作print("文件加载成功")else:#文件未加......