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()