Как сделать текстовый виджет tkinter недоступным для выбора? - PullRequest
0 голосов
/ 20 февраля 2019

Я хочу, чтобы мой tkinter Text был только выходом, а не входом.В ходе некоторых исследований я обнаружил, что text.config(state="disabled") отключает пользовательский ввод, но все же позволяет выбирать текст, который мне не нужен.

Как я могу сделать свой виджет Text не подлежащим выделению и не писать?

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Самый простой способ - заменить текстовые привязки по умолчанию, которые поддерживают выделение, чтобы они ничего не делали.Есть несколько способов сделать это: используя теги привязки, вы можете удалить все привязки по умолчанию или удалить привязки только к подмножеству привязок по умолчанию.

Удаление всех привязок по умолчанию

Всепривязки на виджетах - включая привязки по умолчанию - связаны с тегами привязки (также называемыми «привязками»).Тег привязки для текстового виджета - «Текст», и все привязки по умолчанию для текстового виджета связаны с этим тегом.Если вы удалите этот тег привязки, вы удалите все привязки, специфичные для текста.

Теги привязки по умолчанию для любого виджета - это кортеж строкового представления виджета, внутреннего класса виджетов (в данном случае, «Текст»)."), внутреннее имя окна верхнего уровня (в данном случае root) и специальный тег" all ".

В следующем примере мы изменяем теги привязки, чтобы «Текст» не включался, эффективно удаляя все привязки по умолчанию для текстового виджета:

import tkinter as tk

root = tk.Tk()
text = tk.Text(root)
text.bindtags((str(text), str(root), "all"))

Удаление определенных привязок

Если вы предпочитаете оставить некоторые привязки по умолчанию, вы можете заменить только те, которые вам не нужны.Вы делаете это, создавая свои собственные привязки, и эти привязки возвращают строку «break».Это специальное возвращаемое значение указывает tkinter прекратить обработку события в дальнейшем.

Например, чтобы не допустить двойного щелчка при выборе слова под курсором, вы можете сделать это:

text.bind("<Double-1>", lambda event: "break")

Недостатком этого подхода является то, что вы должны выяснить, какие все привязки связаны с механизмом выбора.С другой стороны, это дает вам полный контроль над тем, что делает каждое нажатие клавиши или кнопки.

0 голосов
/ 20 февраля 2019

Я полагаю, вам придется заменить его другим виджетом, таким как Label или LabelFrame, чтобы выполнить это.Также вы можете использовать from tkinter import messagebox и получить нужный текст в другом окне (например, информационное окно или окно сообщения об ошибке).Я думаю, что в отношении виджета Text установка состояния отключено - это лучшее, что вы можете сделать для своих целей, к сожалению, и пользователи смогут копировать этот текст, несмотря на то, что не могут его редактировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...