我正在编写我的个人文本编辑器。但是我对 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
属性来调用函数,以便它既更新滚动条又滚动另一个窗口(可能还会添加其他行号(