Python 同时在多个文本小部件中进行多个选择

Python 同时在多个文本小部件中进行多个选择,python,tkinter,tk,Python,Tkinter,Tk,我有这个示例应用程序 #!/usr/bin/env python3 from tkinter import * class App(Tk): def __init__(self): super().__init__() text1 = Text(self) text1.insert('1.0', 'some text...') text1.pack() text2 = Text(self)

我有这个示例应用程序

#!/usr/bin/env python3

from tkinter import *


class App(Tk):
    def __init__(self):
        super().__init__()
        text1 = Text(self)
        text1.insert('1.0', 'some text...')
        text1.pack()
        text2 = Text(self)
        text2.insert('1.0', 'some text...')
        text2.pack()

App().mainloop()
我有两个文本小部件,但我不能同时选择这两个小部件中的文本,当我在text1中选择文本,然后尝试在text2中选择文本时,从text1中选择的文本将消失。看起来tkinter只允许每个应用程序选择一个文本,而不是每个小部件


tkinter中是否有任何机制允许我同时在两个文本小部件中选择文本,或者我必须自己实现这一点?

简短回答:将每个文本小部件的
exportselection
属性设置为
False

Tkinter源于X窗口系统。X有一个称为“选择”的概念,它类似于系统剪贴板(更准确地说,剪贴板是“主要”选择)。默认情况下,一些tkinter小部件将其选择导出为主要选择。一个应用程序一次只能有一个主选择,这就是为什么在两个文本小部件之间单击时高亮显示消失的原因

Tkinter通过文本小部件以及条目和列表框小部件的
exportselection
配置选项控制此行为。将其设置为
False
可防止将选择导出到X选择,从而允许小部件在其他小部件获得焦点时保留其选择

例如:

import tkinter as tk
...
text1 = tk.Text(..., exportselection=False)
text2 = tk.Text(..., exportselection=False)
引述:

导出选择 指定小部件中的选择是否也应为 X选择。该值可以具有任何被接受的形式 Tcl_GetBoolean,例如true、false、0、1、yes或no。如果 导出选择,然后在小部件中选择将取消选择 当前X选择,在小部件外部选择将取消选择任何小部件 选择,小部件将响应选择检索请求 当它有一个选择时。默认情况下,通常用于导出小部件 选择