如何从滚动文本小部件中获取文本?

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.ScrolledTextScrolledText 小部件,因此不清楚您在说什么。另一方面,可以使常规的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 小部件像选取框一样

Flutter:从文本小部件中获取单个单词

滚动小部件中的 Kivy 标签文本换行

如何在android编程中获取放置在小部件上的textview文本

从Android小部件的文本框中检索文本?