多个Text小部件同时进行多个选择

时间:2017-02-03 11:07:14

标签: 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)
        text2.insert('1.0', 'some text...')
        text2.pack()

App().mainloop()

我有2个文本小部件,但我不能在它们中选择文本,当我在text1中选择文本然后尝试在text2中选择文本时,然后从text1中选择消失。看起来tkinter只允许每个应用程序选择一个文本而不是每个小部件。

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

1 个答案:

答案 0 :(得分:1)

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

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

使用Tkinter可以使用Text小部件的exportselection配置选项以及Entry和Listbox小部件来控制此行为。将其设置为False会阻止将选择内容导出到X选择,从而允许窗口小部件在其他窗口小部件获得焦点时保留其选择。

例如:

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

引用official tk documentation

  

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