0
点赞
收藏
分享

微信扫一扫

tkinter GUI编程(学习笔记-2 tkinter的常用组件)

非衣所思 2022-04-15 阅读 49

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()   #启动事件循环

 

举报

相关推荐

0 条评论