Label组件
用于创建标签的组件,主要用于显示不可修改的文本、图片或者图文混排内容。
text 设置标签显示的文本
bg和fg 指定组件的背景色和前景色
width和height 指定组件的宽度和高度
padx和pady 组件内文本 左右和上下 的预留空白宽度)
anchor 设置文本在组件内部的位置
justify 设置文本对齐方式
font 设置字体
#测试标签的属性
from tkinter import * #导入tkinter模块
str="标签的属性测试"
mylabel=Label(text=str)
mylabel.config(justify=CENTER) #设置文本居中对齐
mylabel.config(width=20,height=4) #设置标签的宽和高 单位为字符个数
mylabel.config(bd=2,relief=SOLID) #设置边框的宽度
mylabel.config(wraplength=160) #设置文字回卷宽度为160像素
mylabel.config(anchor=W) #设置内容在标签内部的左侧
mylabel.config(font=('宋体',18)) #设置字体
mylabel.pack(side=TOP) #设置标签在窗口的顶端
mainloop() #启动事件循环
Button组件
用于创建按钮,通常用于响应用户的单击操作,即单击按钮时将执行指定的函数。
Button组件的command属性用于指定响应函数。
#Button按钮组件 计算1~100的累加值
from tkinter import * #导入tkinter模块
win=Tk()
win.title("Button Test")
win.geometry("300x200")
labell=Label(win,text="此处显示计算结果")
labell.config(font=("宋体",12))
labell.pack()
def computing():
sum=0
for i in range(100+1):
sum+=i
result="累加结果是:"+str(sum)
labell.config(text=result)
str1='计算1——100累加值'
mybutton=Button(win,text=str1)
mybutton.config(justify=CENTER) #设置按钮文本居中
mybutton.config(width=20,height=3) #设置按钮的宽和高
mybutton.config(bd=3,relief=RAISED) #设置边框的宽度和样式
mybutton.config(anchor=CENTER) #设置内容在按钮内部居中
mybutton.config(font=("隶书",12,"underline"))
mybutton.config(command=computing) #command属性用于指定响应函数
mybutton.config(activebackground="yellow") #点击背景颜色
mybutton.config(activeforeground="red") #点击前景颜色
mybutton.pack()
win.mainloop() #启动事件循环
Entry组件
输入组件,用于显示和输入简单的单行文本。
部分属性与Label组件相同。
Entry组件的常用属性和方法
state 设置组件状态。
validate 设置执行validatecommand校验函数的时间
validatecommand 设置校验函数
textvariable 获取组件内容的变量
get() 返回组件中的全部字符
delete( first,last=None) 删除从 first开始到last之前的字符
# Entry组件 输入数据并计算累加和
from tkinter import * #导入tkinter模块
def computing():
sum=0
n=int(number.get())
for i in range(n+1):
sum+=i
result="累加结果是:"+str(sum)
label3.config(text=result)
win=Tk()
win.title("Entry Test")
win.geometry("300x200")
label1=Label(win,text="请输入计算数据:")
label1.config(width=16,height=3)
label1.config(font=("宋体",12))
label1.grid(row=0,column=0)
number=StringVar()
entry1=Entry(win,textvariable=number,width=16)
entry1.grid(row=0,column=1)
label2=Label(win,text="点击确认:")
label2.config(width=14,height=3)
label2.config(font=("宋体",12))
label2.grid(row=1,column=0)
mybutton=Button(win,text='计算')
mybutton.config(justify=CENTER) #设置按钮文本居中
mybutton.config(width=14,height=2) #设置按钮的宽和高
mybutton.config(bd=3,relief=RAISED) #设置边框的宽度和样式
mybutton.config(anchor=CENTER) #设置内容在按钮内部居中
mybutton.config(font=("隶书",12))
mybutton.config(command=computing) #command属性用于指定响应函数
mybutton.grid(row=1,column=1)
label3=Label(win,text="显示结果")
label3.config(width=16,height=3)
label3.config(font=("宋体",12))
label3.place(x=50,y=130)
win.mainloop() #启动事件循环
Entry组件 控制变量。控制变量是和组件相关联的一种对象。
例如,控制变量与Entry组件关联时,控制变量的值和Entry组件中的文本会关联变化;将控制变量与Radiobutton组件(单选按钮组)关联时,改变单选按钮选择时,控制变量的值随之改变;反之,改变控制变量的值,对应值的单选按钮被选中。
myvar=BooleanVar()
myvar=StringVar()
myvar=IntVar()
myvar=DoubleVar()
Listbox组件
用于创建列表框,列表框允许用户一次选择一个或多个列表项。
Listbox组件的部分属性和方法
· Listvariable属性关联一个StringVar类型的控制变量,该变量关联列表框全部选项,
· Selectmode用于设置列表项选择模式,
· activate(index)方法用于选中index对应的列表项。
cursection()方法返回包含选中项index的元组,无选中时返回空元组。
insert(index, relements)方法在index位置插入一个或多个列表项。
get( first,last=None)方法返回包含[first,last]范围内的列表项的文本元组。
Listbox组件的部分方法将列表项位置(index)作为参数。Listbox组件中第一个列表项的index值为0,最后一个列表项index可以使用常量tkinter.END表示。当前选中列表项的index值用常量tkinter.ACTIVE表示。
# 列表框操作 Listbox组件
from tkinter import * #导入tkinter模块
win=Tk()
listbox=Listbox(win)
#初始化列表框
items=["HTML5","CSS3","JavaScript","Jquery"]
for item in items:
listbox.insert(END,item)
listbox.pack(side=LEFT,expand=1,fill=Y)
def additem(): #向列表中添加选项
str=entry1.get() #获取字符串
if not str=="":
index=listbox.curselection()
if len(index)>0:
listbox.insert(index[0],str) #有选中项 在选中项前添加一项
else:
listbox.insert(END,str) #无选中项 添加到最后
def removeitem(): #从列表中删除选项
index=listbox.curselection()
if len(index)>0:
listbox.delete(index[0],index[-1]) #删除有选中的多项
else:
listbox.delete(index[0]) #删除选中的一项
entry1=Entry(width=20)
entry1.pack(anchor=NW)
bt1=Button(text="添加",command=additem)
bt1.pack(anchor=NW)
bt2=Button(text="删除",command=removeitem)
bt2.pack(anchor=NW)
win.mainloop() #启动事件循环
Radiobutton组件,用于创建单选按钮组。
# Radiobutton 组件 单选按钮组操作示例
from tkinter import * #导入tkinter模块
win=Tk()
label1=Label(win,text="请为您最喜欢的体育项目投票")
label1.grid(row=1,column=1,columnspan=2)
s_items=IntVar()
s_items.set(2)
frame1=Frame(bd=2,relief=RIDGE) #框架1
frame1.grid(row=2,column=1)
frame2=Frame(bd=0,relief=RIDGE) #框架2
frame2.grid(row=2,column=2)
radio1=Radiobutton(frame1,text="足球",variable=s_items,value=1,width=8)
radio1.grid(row=1,column=1)
radio2=Radiobutton(frame1,text="排球",variable=s_items,value=2,width=8)
radio2.grid(row=2,column=1)
radio3=Radiobutton(frame1,text="篮球",variable=s_items,value=3,width=8)
radio3.grid(row=3,column=1)
num1=IntVar()
entry1=Entry(frame2,textvariable=num1,width=10,state='readonly')
entry1.grid(row=1,column=1,pady=4)
num2=IntVar()
entry2=Entry(frame2,textvariable=num2,width=10,state='readonly')
entry2.grid(row=2,column=1,pady=4)
num3=IntVar()
entry3=Entry(frame2,textvariable=num3,width=10,state='readonly')
entry3.grid(row=3,column=1,pady=4)
def voting():
global num1,num2,num3
temp=s_items.get()
if temp==2:
num2.set(num2.get()+1)
elif temp==1:
num1.set(num1.get()+1)
else:
num3.set(num3.get()+1)
bt1=Button(win,text="请投票",command=voting)
bt1.grid(row=3,column=1,columnspan=2,pady=5)
win.geometry("300x200")
win.mainloop() #启动事件循环
Checkbutton组件,用于创建复选框,用来标识是否选定某个选项。
# Checkbutton 组件操作示例
from tkinter import * #导入tkinter模块
win=Tk()
label1=Label(win,text="Checkbutton按钮测试")
label1.config(font=("宋体",18),justify=CENTER)
label1.grid(row=1,column=1,columnspan=2)
choice1=IntVar()
choice1.set(0)
choice2=IntVar()
choice2.set(0)
frame1=Frame(bd=0,relief=RIDGE) #框架1
frame1.grid(row=2,column=1)
check1=Checkbutton(frame1,text="粗体",variable=choice1,width=8,pady=10)
check1.grid(row=1,column=1)
check2=Checkbutton(frame1,text="斜体",variable=choice2,width=8,pady=10)
check2.grid(row=1,column=2)
def changeFont():
temp=choice1.get()
if choice1.get()==1 and choice2.get()==1:
label1.config(font=("宋体",18,"bold italic"))
elif choice1.get()==1 and choice2.get()==0:
label1.config(font=("宋体",18,"bold"))
elif choice1.get()==0 and choice2.get()==1:
label1.config(font=("宋体",18,"italic"))
else:
label1.config(font=("宋体",18))
check1.config(command=changeFont)
check2.config(command=changeFont)
win.geometry("300x100")
win.mainloop() #启动事件循环
Text组件,用来显示和编辑多行文本。
# Text组件构建文本编辑器
from tkinter import * #导入tkinter模块
win=Tk()
frame1=LabelFrame(relief=GROOVE,text="工具栏:")
frame1.pack(anchor=NW,fill=X)
bt1=Button(frame1,text="复制")
bt1.grid(row=1,column=1)
bt2=Button(frame1,text="剪切")
bt2.grid(row=1,column=2)
bt3=Button(frame1,text="粘贴")
bt3.grid(row=1,column=3)
bt4=Button(frame1,text="清空")
bt4.grid(row=1,column=4)
text1=Text()
text1.pack(expand=YES,fill=BOTH)
def docopy():
data=text1.get(SEL_FIRST,SEL_LAST) #获取选中内容
text1.clipboard_clear() #清除剪切板
text1.clipboard_append(data) #将内容写入剪切板
def docut():
data=text1.get(SEL_FIRST,SEL_LAST)
text1.delete(SEL_FIRST,SEL_LAST) #清除选中的内容
text1.clipboard_clear()
text1.clipboard_append(data)
def dopaste():
text1.insert(INSERT,text1.clipboard_get()) #插入剪切版中的内容
def doclear():
text1.delete("1.0",END) #删除全部的内容
bt1.config(command=docopy)
bt2.config(command=docut)
bt3.config(command=dopaste)
bt4.config(command=doclear)
win.mainloop() #启动事件循环
Spinbox输入组件,用于创建在一组选项或一定范围的数字内滚动选择的组件。
# Spinbox输入组件的应用
from tkinter import * #导入tkinter模块
win=Tk()
win.geometry("300x200")
label1=Label(text="请选择科目和成绩")
label1.pack(expand=1,fill=X)
label1.config(font=("隶书",15))
label2=Label()
label2.config(font=("宋体",18))
label2.pack()
subject=StringVar()
score=IntVar()
spin1=Spinbox(textvariable=subject,values=("数学","语文","英语"),wrap=True)
spin1.pack()
spin2=Spinbox(textvariable=score,from_=60,to=100,increment=5,wrap=True)
spin2.pack()
def change():
label2.config(text=subject.get()+str(score.get()))
bt1=Button(text="确定",command=change)
bt1.pack()
win.mainloop() #启动事件循环