【Tkinter】用Text做一个伪ListBox

该博客介绍了如何在Tkinter中使用Text控件创建一个伪ListBox,解决了Listbox在某些场景下的不便,如与Entry配合使用时失去选中状态的问题。通过定义tag和绑定按键事件,实现了高亮当前行的功能,并提供了注意事项和获取当前行的函数。文章还给出了完整的效果演示和源码。
摘要由CSDN通过智能技术生成

前言

在Tkinter中,有一种叫Listbox的神奇控件,它可以显示元素,与滚动条联动。但是!有时我们想让用户在A窗口选中项目然后在B窗口填文本,当用户在Entry按下CTRL+A时,很快啊,那Listbox选中项立刻就没了啊,还要我们再选一遍,就很不舒服,于是,这个伪Listbox诞生了。

实现

引入模块

既然说到了Text,那么首先一定就要

from tkinter import Text

对于引入Tkinter,我一般这么写:

class tk:
    from tkinter import Tk, Text, ...

而这里,我们需要用到Tk、Text,而Scrollbar(滚动条)可以加,可以不加。

主要功能部分

Text控件布局

现在开始编写吧。首先像往常一样创个窗口,然后创建Text控件…

if __name__ == "__main__":
    root = tk.Tk() #创建窗口
    root.title("标题") #设置标题

	#这里是一定要设置selectforeground和selectbackground的,否则CTRL+A会出现奇怪的现象
    textBox = tk.Text(root, foreground = "black", selectforeground = "black",
                      background = "white", selectbackground = "white")
    textBox.pack(fill = "both", expand = 1)
    #往Text增加元素(增加文本,根据情况分行)
    for item in ["The first\n", "The second\n", "The third"]:
    	textBox.insert("end", item)
    textBox["state"] = "disabled"
    
    root.mainloop() #循环

效果
此时雏形已经出现,但是,无论怎么点,都不会有高亮当前项,所以,我们需要继续往下写。

让光标所在行高亮

首先,我们增加一个tag,叫"current_line":


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值