Python Tkinter 滚动文本

5 投票
3 回答
29710 浏览
提问于 2025-04-18 09:01

我正在尝试制作一个Tkinter的输入框,但我需要的空间比一行要多。看起来

self.scroll = ScrolledText.ScrolledText(self.tk).pack()

是目前最好的方法,但我不知道怎么从self.scroll中获取输入的文本,并把它用在其他地方,相关的文档也没有很清楚。有没有人知道该怎么做?

3 个回答

0

要从tkinter中的Scrolltext小部件中获取输入的文本,可以使用和Text小部件相同的get方法(类似问题)。这个方法有两个参数,分别是提取文本的开始位置和结束位置。在你的情况下,似乎你想获取整个文本,这可以通过从行索引"1.0"提取文本到tkinter.END来实现,后者是一个常量,始终指向最后一行的索引。(有关行索引的更多信息,请查看这个链接。)

get方法的语法是 -:

widget.get("1.0", tkinter.END)

在你的情况下,它将变成 -:

self.scroll.get("1.0", tkinter.END)

此外,正如@furas指出的那样,pack方法应该单独调用,因为pack返回None,有关更多信息,请参考这个讨论。修正后的代码部分将是 -:

self.scroll = ScrolledText.ScrolledText(self.tk)
self.scroll.pack()
2

你可以通过调整高度参数来实现多行显示:

sText = ScrolledText.ScrolledText(root, height=15)
sText.pack()

获取内容的方法是:

words = sText.get(1.0,END)

希望这对你有帮助!

13

错误:

self.scroll = ScrolledText.ScrolledText(self.tk).pack()

这样做会把 pack() 的结果赋值给 self.scroll(而不是 ScrolledText),
而且 pack() 总是返回 None

总是:

self.scroll = ScrolledText.ScrolledText(self.tk)
self.scroll.pack()

现在看看标准的 文本小部件 文档,了解如何获取/设置文本。

from tkinter import *
import tkinter.scrolledtext as ScrolledText

master = Tk()

st = ScrolledText.ScrolledText(master)
st.pack()

st.insert(INSERT, "Some text")
st.insert(END, " in ScrolledText")

print(st.get(1.0, END))

master.mainloop()

撰写回答