2012-05-30 2 views

ответ

9

Вы пробовали просто отключить текстовый виджет?

text_widget.configure(state="disabled") 

На некоторых платформах, вы также должны добавить привязку на <1> дать фокус на виджет, в противном случае подсветка для копирования не появляется:

text_widget.bind("<1>", lambda event: text_widget.focus_set()) 

Если отключить виджет , чтобы вставить программно вам просто нужно

  1. Изменение состояния виджета NORMAL
  2. I nsert текста, а затем
  3. Изменения состояния обратно в DISABLED

До тех пор, пока вы не звоните update в середине, что тогда нет никакого способа для пользователя, чтобы иметь возможность ввести что-либо в интерактивном режиме.

+0

Да, но, согласно документам, это не позволяет вводить что-либо, даже из функций и т. Д. –

+0

@PsychicOak: конечно. Но для вставки программно все, что вам нужно сделать, это установить состояние «нормальное», вставить текст, а затем сбросить состояние до «отключено». Я обновил свой ответ, чтобы включить эту информацию. –

+0

* вздох * я чувствую себя глупо сейчас>.> Ха-ха спасибо! вы получите свои очки, когда им разрешат принимать xD –

1

Жаль, что я опаздываю на вечеринку, но я нашел эту страницу в поиске того же решения, что и вы.

Я обнаружил, что если вы «отключили» текстовый виджет по умолчанию, а затем «нормализуете» его в начале функции, которая дает ему ввод и «отключает» его снова в конце функции.

def __init__(): 
    self.output_box = Text(fourth_frame, width=160, height=25, background="black", foreground="white") 
    self.output_box.configure(state="disabled") 

def somefunction(): 
    self.output_box.configure(state="normal") 
    (some function goes here) 
    self.output_box.configure(state="disable") 
0

я наткнулся на государственном = «нормальный»/State = «ОТКЛ» решения, а также, однако тогда вы не можете выбрать и скопировать текст из него. Наконец, я нашел решение ниже: Is there a way to make the Tkinter text widget read only?, и это решение позволяет вам выбирать и копировать текст, а также следовать гиперссылкам.

import Tkinter 

root = Tkinter.Tk() 
readonly = Tkinter.Text(root) 
readonly.bind("<Key>", lambda e: "break") 
Смежные вопросы