如何使用 Tkinter 将多个文本连接到一个滚动条



我正在编写我的个人文本编辑器。但是我对 2 个小部件文本和滚动条有问题(将一个滚动条连接到两个文本(。

我的想法和逻辑是什么(一开始(?

我想显示 2 个文本,一个用于写入用户输入的文本,一个用于显示行号。我把它们都装在根里。然后我创建一个滚动条,它将在 Y 轴上滚动 2 个文本,所以我(主要(要做的是将 2 个小部件(文本(连接到一个滚动条。

但它没有用。

这个系统绝对不起作用,是否有任何建议或修复来解决第一个想法?

我发现的其他想法。

第一次尝试后,我想我可以将 2 个文本打包到 1 个容器中。我尝试创建一个包含 2 个文本的框架(打包到 root 中(,我这样做是因为我必须仅将滚动条连接到框架。但它没有用,而且它不允许我编写以下代码片段:command=frame.yview滚动条选项中,似乎我无法将帧连接到滚动条。

所以:

我会问你我的推理是否好,以及如何解决。如果没有,我该怎么办?

在谷歌上发现了类似的问题: (但我不否认(

如何用一个滚动条滚动两个并行文本小部件?

Tkinter 向文本小部件添加行号

from tkinter import *

root = Tk()
root.geometry("480x540+100+100")
root.config(cursor='')
line = Text(root, bg="light grey", font="Roman 24", width=4)
line.pack(side=LEFT, fill=BOTH)
text = Text(root, bg="grey", font="Roman 24")
text.pack(side=LEFT, fill=BOTH, expand=True)
scrollbar = Scrollbar(text, orient=VERTICAL, command=(line.yview, text.yview))
text.configure(yscrollcommand=scrollbar.set)
line.configure(yscrollcommand=scrollbar.set)
scrollbar.pack(side=RIGHT, fill=Y)
for n in range(50):
line.insert("{}.0".format(n+1), "{}n".format(n+1))
text.insert("{}.0".format(n+1), "Line no. {}n".format(n+1))
if __name__ == '__main__':
root.mainloop()

滚动条没有什么特别之处 - 它只是在你移动它时调用一个函数。此函数的 API 定义良好。虽然它通常应该调用可滚动窗口的yview(或xview(方法,但没有要求它必须。

如果要使用单个滚动条控制两个小部件,请为滚动条创建一个滚动两个窗口的函数。

def multiple_yview(*args):
line.yview(*args)
text.yview(*args)
scrollbar = Scrollbar(text, orient=VERTICAL, command=multiple_yview)

当您在输入新行或使用光标键四处移动时滚动文本小部件时,您会遇到类似的问题。您需要配置文本小部件的yscrollcommand属性来调用函数,以便它既更新滚动条又滚动另一个窗口(可能还会添加其他行号(

最新更新