如何从滚动文本小部件中获取文本?
Posted
技术标签:
【中文标题】如何从滚动文本小部件中获取文本?【英文标题】:How to get the text out of a scrolledtext widget? 【发布时间】:2019-05-25 00:45:48 【问题描述】:我是 tkinter
python 模块的新手。我尝试做一个项目。我学到了一些关于菜单的新知识,我正在尝试制作一个小的 UI 项目,允许用户在滚动的文本小部件中写一些东西,然后保存它(使用 sys
模块)。
我已经尝试过一些对按钮有用的东西。例如.get()
,但它不起作用。我也试过["text"]
方法。
import tkinter, sys
root = tkinter.Tk()
class saveProject:
def __init__(self, master):
self.master = master
self.textFrame = tkinter.scrolledtext.ScrolledText(self.master, width=100, bd=10, relief="raised")
self.textFrame.pack()
def save(self):
#self.saveText = self.textFrame.get()
self.saveText = self.textFrame["text"]
project = saveProject(root)
root.mainloop()
问题是,正如我已经说过的,我不知道如何从 tkinter.scrolledtext.ScrolledText
小部件中获取文本。
【问题讨论】:
tkinter
没有我所知道的 scrolledtext.ScrolledText
或 ScrolledText
小部件,因此不清楚您在说什么。另一方面,可以使常规的Text
可滚动。
@martineau 看看这里:[docs.python.org/3/library/tkinter.scrolledtext.html] 我认为这个答案可能对您有所帮助:[***.com/questions/14824163/…。这个问题可以被认为是重复的吗?
@Valentino:您评论中的第一个文档链接导致:404 Not Found
。可能重复的另一个可能是一个 - if 这就是 OP 真正在谈论的内容。
@martineau ops,让我用链接再试一次。 [docs.python.org/3/library/tkinter.scrolledtext.html]。如果 Gigi 所说的滚动文本是这个,它只是一个带有滚动条的 tkinter.Text 类。
@Valentino:那个链接效果更好。我以前从未使用过 tix
扩展小部件(并且不会因为它的使用已“自 3.6 版以来已弃用”)。这个文档,就像tkinter
中的大多数其他内容一样,也不是很好。我想人们可以看看源代码来弄清楚如何做到这一点......
【参考方案1】:
所以,出于好奇,我尝试了描述 here 的内容(我对 OP 问题的评论中的链接相同)。它也适用于scrolledtext
。
import tkinter, sys
from tkinter import scrolledtext
root = tkinter.Tk()
class saveProject:
def __init__(self, master):
self.master = master
self.textFrame = scrolledtext.ScrolledText(self.master, width=100, bd=10, relief="raised")
self.textFrame.pack()
self.saveb = tkinter.Button(self.master, text="Save", command= lambda : self.save())
self.saveb.pack()
def save(self):
cur_inp = self.textFrame.get("1.0", tkinter.END)
fl = open("output.txt", "w")
fl.write(cur_inp)
project = saveProject(root)
root.mainloop()
我在ScrolledText
小部件的底部添加了一个保存按钮。小部件内容保存在output.txt
区域内。
【讨论】:
【参考方案2】:help(ScrolledText)
表示它是tkinter.Text
小部件的子类,这显然意味着从中获取文本的方式是相同的——通过使用“文本小部件索引”的get()
方法(这里有一些@987654321 @关于他们)。
以下是获取小部件中所有文本的示例(我添加了 Save text Button
以测试save()
方法):
import sys
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
class SaveProject:
def __init__(self, master):
self.master = master
self.textFrame = ScrolledText(self.master, width=100, bd=10, relief="raised")
self.textFrame.pack()
# Added for testing.
self.save_btn = tk.Button(self.master, text='Save text', command=self.save)
self.save_btn.pack()
def save(self):
self.saveText = self.textFrame.get('1.0', tk.END) # Get all text in widget.
print('self.saveText:', self.saveText)
root = tk.Tk()
project = SaveProject(root)
root.mainloop()
【讨论】:
以上是关于如何从滚动文本小部件中获取文本?的主要内容,如果未能解决你的问题,请参考以下文章
当文本在 Flutter 中溢出时如何使 Text 小部件像选取框一样