繁体   English   中英

如何从Tkinter文本框中获取选定的字符串?

[英]How do I get a selected string in from a Tkinter text box?

我希望能够从突出显示的文本部分中获取字符串,我该如何处理?

对于Tkinter.TextTkinter.Entry小部件,可以使用:

content = text.selection_get()

从Python控制台的Entry和Text小部件中获取选定文本的交互式示例:

>>> import Tkinter
>>> w = Tkinter.Tk()
>>> e = Tkinter.Entry(w)
>>> e.pack()
>>> t = Tkinter.Text(w)
>>> t.pack()
#(scribble at the widgets in the created window, and select text in the Entry)
>>> e.selection_get()
'1234'
#(select text)
>>> t.selection_get()
'1234'
>>>

根据布莱恩·奥克利(Bryan Oakley)的评论:

selection_get是可用于所有小部件的通用小部件方法。 它并不总是从“文本”小部件中获取选定的字符串。 可以,但不能保证。 它所做的就是得到所谓的“ X”选择(来自tk的X11根)。 如果将“文本”窗口小部件的exportselection设置为False,则selection_get将无法工作。 因此,您的建议在正常情况下适用,但并非在所有情况下都适用。

文本小部件具有一个名为“ sel”的特殊标记,可以通过Tkinter.SEL访问并且可以通过text_widget.tag_ranges(Tkinter.SEL)进行测试,该标记允许您检索“选定的”文本。 这是一个简单的示例:

if textWidget.tag_ranges(Tkinter.SEL):
    print('SELECTED Text is %r' % textWidget.get(Tkinter.SEL_FIRST, Tkinter.SEL_LAST))
else:
    print('NO Selected Text')

如果您需要稍微更高级的解决方案,也可以尝试:

ranges = textWidget.tag_ranges(Tkinter.SEL)
if ranges:
    print('SELECTED Text is %r' % textWidget.get(*ranges))
else:
    print('NO Selected Text')

使用get方法。 如果要选择文本,请使用索引SEL_FIRSTSEL_LAST

[edit]评论之一推测这不适用于Tkinter,因为没有属性“ sel”。 “ sel”不是属性,而是标签。 标签是文本小部件的一项非常强大的功能。

这是一个例子:

import Tkinter as tk
import tkFont

class App:
    def __init__(self):
        root=tk.Tk()
        self.text = tk.Text(root)
        self.text.pack()
        self.button = tk.Button(root, text="Get Selection", command=self.OnButton)
        self.button.pack()
        root.mainloop()

    def OnButton(self):
        print "selected text: '%s'" % self.text.get(tk.SEL_FIRST, tk.SEL_LAST)


app=App()

为了使此演示正常工作,请在文本框中键入一些文本,然后按按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM