图形化界面设计—Tkinter模块学习(二)


前言

这里我将继续承接上次写到的 第五点 ‘按钮组件Button’


六、常见控件的共同属性

这里列举一下常见控件的属性,本来前面就该列举的,搞忘记了
在这里插入图片描述
在这里插入图片描述

七、单选按钮Radiobutton

Radiobutton控件适用于互相排斥的单选项事件。属性除了上面列出的共同属性外,还具有text文本显示、variable返回变量、value返回值、command等其它属性。其中variable=var,返回变量属性要先申明tkinter内部变量的类型(var=IntVar()或var=StringVar()),如果要获取实例的值可以在command调用的函数中使用var.get()方法。相关展示代码如下:

import tkinter as tk

def Choice():
    lis = ['甲','乙','丙']
    s = '您选择了'+ lis[backtext.get()]+'项'
    #configure可以实现text文本值变化(也可以使用config())
    label.configure(text = s)

root = tk.Tk()
root.title('Radiobutton控件')
root.geometry('480x240')
label = tk.Label(root)
label.pack()

#声明变量值Intvar,使用变量var来接收返回值
backtext = tk.IntVar()
Radbn1 = tk.Radiobutton(root,text='甲',variable=backtext,value=0,command=Choice)
Radbn2 = tk.Radiobutton(root,text='乙',variable=backtext,value=1,command=Choice)
Radbn3 = tk.Radiobutton(root,text='丙',variable=backtext,value=2,command=Choice)
Radbn1.pack()
Radbn2.pack()
Radbn3.pack()

root.mainloop()

运行效果:
在这里插入图片描述

八、复选框Checkbutton

Checkbutton控件适用于多个选项事件(通常并不会直接触发而是单独调用)。属性除了共同属性外,还具有text文本显示、variable返回变量、onvalue选中返回值、offvalue未选中默认返回值、command等其它属性。其中variable=var,返回变量属性要先申明变量的类型(var=IntVar()或var=StringVar()),如果要获取实例的值可以在command调用的函数中使用var.get()方法分别获取onvalue值和offvalue的值,还可以使用select()、deselect()、toggle()方法对其进行选中、取消、反选操作。相关代码展示如下:
代码如下(示例):

import tkinter as tk

#实列化根窗口
root = tk.Tk()
#初始化的窗口的小
root.title('Checkbutton复选框')
root.geometry('210x250')
bq = tk.Label(root,text='请选择您的爱好项目:')
bq.pack()
bq2 = tk.Label(root)
bq2.pack()


def Choice():
    #用户没有选择的情况
    if (check1Var.get() == 0 and check2Var.get() == 0) and \
        (check3Var.get() == 0 and check4Var.get() == 0):
        s = '您还未做出任何选择'
        bq2.configure(text = s)
    else:
        dic = {0:'',1:'足球',2:'篮球',3:'排球',4:'跳绳'}
        s1 = dic[check1Var.get()]
        s2 = dic[check2Var.get()]
        s3 = dic[check3Var.get()]
        s4 = dic[check4Var.get()]
        s5 = f'您选择了{s1} {s2} {s3} {s4}'
        bq2.configure(text = s5)

#声明变量类型IntVar(),用checkVar接收
check1Var = tk.IntVar()
check2Var = tk.IntVar()
check3Var = tk.IntVar()
check4Var = tk.IntVar()

#创建复选框
check1 = tk.Checkbutton(root,text='足球',variable=check1Var,\
                     onvalue=1,offvalue=0)
check1.pack()

check2 = tk.Checkbutton(root,text='篮球',variable=check2Var,\
                     onvalue=2,offvalue=0)
check2.pack()
check3 = tk.Checkbutton(root,text='排球',variable=check3Var,\
                     onvalue=3,offvalue=0)

check3.pack()
check4 = tk.Checkbutton(root,text='跳绳',variable=check4Var,\
                     onvalue=4,offvalue=0)
check4.pack()

#创建一个‘确定’按钮,用以在用户选择/不选择 调用Choice 函数
sure = tk.Button(root,text='确定',command=Choice)
sure.pack()

root.mainloop

效果如图所示:在这里插入图片描述

九、列表框Listbox

将文本以列表数据的形式呈现,可供用户单选或多选功能,主要有以下几种方法:

方法描述
curselection()返回光标选中的项目编号的整个元组,而不是单个。
delete(起始位置,结束位置)删除项目,结束位置可以省略,全部删除delete(0,END),(如果是IDLE的起始位置要是0.0)。
insert(位置,插入的元素)插入项目元素(多项的话可以用列表或元组赋值),如果位置为END则表示将项目元素插入到最后。
get(起始位置,结束位置)返回范围所含项目文本的元组,结束位置可以省略。
size()返回列表框的行数。

示例如下(这里用到了一个Frame控件,主要是实现控件分组):

import tkinter as tk

#创建窗口
root = tk.Tk()
root.title('我的列表框')
#初始化窗口大小
root.geometry('420x340')
#创建一个frame1框架控制List_items的这个文本框位置
frame1 = tk.Frame(root,relief='raised')
#控制包含List_items的整个模块的左边距
frame1.place(relx=0)

#创建一个frame2框架控制btn1.....btn6等控件的位置
frame2 = tk.Frame(root,relief='groove')
frame2.place(relx=0.6)

Listbox1 = tk.Listbox(frame1)
Listbox1.pack()


def ini():
    Listbox1.delete(0,'end') #该语句可以防止在点’初始化‘按钮重复显示list_items的内容
    list_items = ['数学','物理','化学','语文','英语']
    for item in list_items:
        Listbox1.insert('end',item)#将item的对应值放入Listbox1列表框

#清除List_items的这个文本框里面的所有内容
def clear():
    #括号里面是几就是几,不存在左闭右开的
    Listbox1.delete(0,'end')

#实现添加、插入功能
def ins():
    if entry.get() != '':#判断frame2框架控制的输入框必须有输入内容
        if Listbox1.curselection() == ():#光标没有选中   
            Listbox1.insert(Listbox1.size(),entry.get())#Listbox1.size()返回的行数从1开始,而不是 0!
            
        else:
            Listbox1.insert(Listbox1.curselection(),entry.get())

#修改List_items的这个文本框里面的指定内容
def updt():
    if entry.get() != '' and Listbox1.curselection() != (): #curselection()返回的是元组
        selected = Listbox1.curselection()[0]
        Listbox1.delete(selected)
        Listbox1.insert(selected,entry.get())
#实现删除功能
def delt():
    if Listbox1.curselection() != ():#光标必须选中
        Listbox1.delete(Listbox1.curselection())

#创建一个文本输入框 
entry = tk.Entry(frame2)
entry.pack()

#创建按钮
btn1 = tk.Button(frame2,text='初始化',command=ini)
btn1.pack(fill='x') #fill=x 控件实例方向水平
btn2 = tk.Button(frame2,text='添加',command=ins)
btn2.pack(fill='x')
btn3 = tk.Button(frame2,text='插入',command=ins)
btn3.pack(fill='x')
btn4 = tk.Button(frame2,text='修改',command=updt)
btn4.pack(fill='x')
btn5 = tk.Button(frame2,text='删除',command=delt)
btn5.pack(fill='x')
btn6 = tk.Button(frame2,text='清空',command=clear)
btn6.pack(fill='x')


root.mainloop()

效果如图示:在这里插入图片描述

十、Frame框架

Frame框架可以实现对其他控件的分组,作用就相当于控件实例于根窗口,该控件也和其他控件一样具有共同属性,下面通过代码演示一下:

import tkinter as tk

root = tk.Tk()
root.title('Frame框架')
root.geometry('320x240+600+350')
#创建个Frame框架,实例化于root上
frame1 = tk.Frame(root,relief='sunken',bg='BLUE')
frame1.place(x=30,y=50,width=200,height=120)
#创建个文本标签Label实例化于frame1
label = tk.Label(frame1,text='这是第一个frame框架',width=50)
label.pack()
root.mainloop()

运行效果如图:在这里插入图片描述
首先,可以看到蓝色区域都是我们的frame1框架(有一部分被文字遮挡了),并且label控件实例化于该框架上的,如果label控件实例化于root上,将是另一种效果,如下图:
在这里插入图片描述

十一、文本框Text

Text控件实例可以接收或输出显示多行文本,除了共同属性外,还有以下这些常用方法:

方法解释
delete(起始位置[,终止位置])删除指定区域的文本内容
get(起始位置[,终止位置])获取指定区域的文本内容
insert(插入的位置,插入的内容(字符串格式))将内容插入指定位置
index(标记)返回标记所在的行和列
mark_names()返回所有标记名称
mark_set(标记,位置)在指定位置设置标记
mark_unset(标记)去除标记

相关用法代码展示如下:

import tkinter as tk
import time



def get_time():
    #localtime()方法获取时间
    s1,s2,s3,s4,s5 = time.localtime()[0:5]
    s = f'{s1}{s2}{s3}{s4}{s5}分 \n'
    text.insert(0.0,s)
    #间隔一秒调用一次函数
    root.after(1000,get_time)
    
root = tk.Tk()
root.title('文本框Text')
root.geometry('320x240+600+350')#+600+350可以确定窗口初始化的位置

text = tk.Text(root,font='微软雅黑')
text.place(x=10,width=200,height=160)
#调用函数
get_time()
root.mainloop()

效果如图所示:在这里插入图片描述

总结

以上这些就是今天要分享的,是Tkinter模块学习的第二部分,还没有学完后面还会有,因为也是初学,难免有不足之处,欢迎大家评论和指出问题,感谢大家观看!

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值