2017-02-03 6 views
1

У меня есть этот пример приложения.Множественный выбор в нескольких текстовых виджетах в то же время

#!/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

Короткий ответ: установить атрибут каждого текстового виджета exportselection в False

Tkinter имеет свои корни в системе X взвешивания. X имеет концепцию под названием «выбор», которая похожа на системный буфер обмена (точнее, буфер обмена является «ПЕРВИЧНЫМ» выбором). По умолчанию некоторые из виджетов tkinter экспортируют свой выбор как выбор PRIMARY. Приложение может иметь только один выбор PRIMARY за раз, поэтому подсветка исчезает, когда вы нажимаете между двумя текстовыми виджетами.

Tkinter дает вам контроль над этим поведением с помощью опции конфигурации exportselection для виджета «Текст», а также виджетов «Вступление» и «Список». Установка его на False предотвращает экспорт выделения в X-выбор, позволяя виджету сохранять свой выбор, когда другой виджет получает фокус.

Например:

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

Цитирование из official tk documentation:

exportselection Указывает, следует ли или нет выбор в виджете также должен быть выбор Х. Значение может иметь любую форму, принятую Tcl_GetBoolean, такую ​​как true, false, 0, 1, yes или no. Если выбор экспортирован, тогда выбор в виджетах отменяет выбор текущего X , выбор вне виджета отменяет выбор любого виджета , и виджет будет отвечать на запросы поиска выделения , когда у него есть выбор. По умолчанию обычно для виджетов экспортируются .

Смежные вопросы