我希望能够从突出显示的文本部分中获取字符串,我该如何解决这个问题?
答案 0 :(得分:7)
对于Tkinter.Text
或Tkinter.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'
>>>
根据布莱恩奥克利的评论:
selection_get
是一种适用于所有小部件的通用小部件方法。 并不总是从“文本”小部件中获取所选字符串。它可能,但不能保证。它的作用是得到所谓的“X”选择(来自tk的X11根)。如果您为“文本”小部件将exportselection
设置为False,则selection_get
将无法正常工作。因此,您的建议将适用于正常情况,但并非在所有情况下都适用。
答案 1 :(得分:6)
使用get
方法。如果您希望所选文本使用索引SEL_FIRST
和SEL_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()
要使此演示生效,请在文本框中键入一些文本,然后按按钮。
答案 2 :(得分:6)
Text小部件有一个名为' sel'的特殊标签,可通过Tkinter.SEL访问,并可通过text_widget.tag_ranges(Tkinter.SEL)测试,它允许您检索"选择&#34 ;文本。这是一个简单的例子:
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')