【问题标题】:How to connect multiple text to one scrollbar with Tkinter如何使用 Tkinter 将多个文本连接到一个滚动条
【发布时间】:2020-01-31 01:12:12
【问题描述】:

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

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

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

但是没有用。

这个系统绝对行不通,有什么建议或解决办法来解决这个最初的想法吗?

我发现的其他想法。

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

所以:

我会问你我的推理是否正确,以及如何解决。如果不行我该怎么办?

在 Google 上发现了类似的问题:(但我不明白)

How to scroll two parallel text widgets with one scrollbar?

Tkinter adding line number to text widget

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

【问题讨论】:

    标签: python tkinter text scrollbar


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好的,但是用你的代码我刚刚解决了滚动条的问题,但是还有另一个问题。如果我用滚动条向上/向下滚动文本一切正常,但如果我使用鼠标滚轮它不起作用。我该怎么办?
    • 这是一个不同的问题,Riccardo 提出一个新问题。
    猜你喜欢
    • 2019-11-26
    • 2019-03-05
    • 1970-01-01
    • 2016-08-08
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    相关资源
    最近更新 更多