14-Tkinter 组件-Scrolledtxt滚动条文本框

Scrolledtxt滚动条文本框

tkinter.scrolledtext 模块提供了一个同名的类,实现了带有垂直滚动条并被配置为可以“正常运作”的文本控件 。 使用 ScrolledText 类会比直接配置一个文本控件附加滚动条要简单得多。

文本控件与滚动条打包在一个 Frame 中, Grid 方法和 Pack 方法的布局管理器从 Frame 对象中获得。这允许 ScrolledText 控件可以直接用于实现大多数正常的布局管理行为。

引用方法:from tkinter.scrolledtext import ScrolledText

def __init__(master: Misc | None = ..., **kwargs: Any) -> None
可以以各种形式显示文本的文本小部件。用法同Text.

  • frame

    围绕文本和滚动条控件的框架。

  • vbar

    滚动条控件。

# coding = utf-8
# File date: Hi_2022/1/3 19:41
# File_name: 23_ScrolledText滚动条文本框.py
import webbrowser
from tkinter import Tk, END, Frame, messagebox, PhotoImage, Button
from tkinter.scrolledtext import ScrolledText


# 記得引入 END


class Demo:
    def __init__(self, master):
        self.master = master
        self.main()

    def main(self):
        self.demo()

    def demo(self):
        scrolledtext = ScrolledText(self.master)
        scrolledtext.pack()

        Button(self.master, text="初始化", command=lambda: self.initialize(scrolledtext)).pack(side="left")
        Button(self.master, text="删除文本", command=lambda: self.delete_text(scrolledtext, 2.0, 3.0)).pack(side="left")
        Button(self.master, text="获取文本", command=lambda: self.get_text(scrolledtext, 0.0, END)).pack(side="left")
        Button(self.master, text="插入文本", command=lambda: self.insert_text(scrolledtext, END)).pack(side="left")
        Button(self.master, text="插入图片", command=lambda: self.insert_image(scrolledtext, END)).pack(side="left")
        Button(self.master, text="增加标记", command=lambda: self.add_mark(scrolledtext, "abc", 2.1, 2.4)).pack(side="left")
        Button(self.master, text="删除标记", command=lambda: self.delete_mark(scrolledtext, "abc")).pack(side="left")

    @staticmethod
    def initialize(master):
        """初始化插入文本"""
        master.delete(0.0, END)
        for i, j in zip(range(1000), "qwertyuiop2312asdfg45hjklzxcvbnm12345789" * 20):
            master.insert(END, f"在第{i}行插入{j}{i}\n")

    @staticmethod
    def insert_image(master, local):
        """插入图片方法"""
        global inster_photo
        inster_photo = PhotoImage(file="image/gif/11.gif")
        master.image_create(index=local, image=inster_photo)

    @staticmethod
    def get_text(master, star_local, end_local):
        """获取当前所有文本信息"""
        print(master.get(star_local, end_local))
        messagebox.showinfo("当前文本信息", f"获取当前所有文本信息为:\n{master.get(star_local, end_local)}")

    @staticmethod
    def delete_text(master, star_local, end_local):
        """删除方法"""
        master.delete(star_local, end_local)

    @staticmethod
    def insert_text(master, local):
        master.insert(local, "abc\n")

    @staticmethod
    def add_mark(master, mark_text, star_local, end_local, background="blue", foreground="black"):
        """增加标记"""
        master.tag_add(mark_text, star_local, end_local)
        # 前景背景、下划线
        master.tag_config(mark_text, background=background, foreground=foreground, underline=True)
        # 模拟标记跳转
        master.tag_bind(mark_text, '<Button-1>', Demo.open_url)

    @staticmethod
    def delete_mark(master, *tag_name):
        """删除标记"""
        master.tag_delete(*tag_name)
        print("删除标记")

    @staticmethod
    def open_url(given):
        """标记绑定方法"""
        webbrowser.open("https://baidu.com")


if __name__ == '__main__':
    root = Tk()
    root.geometry("600x600")
    root.title("06_Text多行文本")
    app = Demo(master=root)

    root.mainloop()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值