Текстовый виджет Tkinter - почему INSERT не работает как текстовый индекс?

У меня проблема, которая меня раздражает. В настоящее время я создаю небольшое приложение с графическим интерфейсом Tkinter.

На первой странице мне нужен вводный текст в виде текста или виджета с прокручиваемым текстом. В приведенных мною примерах кода используются такие ключевые слова, как INSERT, CURRENT и END для индексации внутри виджета.

Я буквально скопировал вставленный ниже код в свой редактор, но он не распознает INSERT (выдает ошибку: "NameError: имя 'INSERT' не определено"):

import tkinter as tk
from tkinter import scrolledtext

window = tk.Tk()
window.title("test of scrolledtext and INSERT method")
window.geometry('350x200')

txt = scrolledtext.ScrolledText(window,width=40,height=10)
txt.insert(INSERT,'You text goes here')
txt.grid(column=0,row=0)

window.mainloop()

Я могу заставить код работать, если я изменю [INSERT] на [1.0], но меня очень расстраивает то, что я не могу заставить INSERT работать, поскольку я видел это в каждом примере кода, с которым я сталкивался.

3 ответа

Решение

Вам не нужно использовать константы tkinter. Я лично считаю, что лучше использовать необработанные строки "insert", "end" и т. Д. Они более гибкие.

Однако причина того, что константы не работают для вас, заключается в том, что вы не импортируете их напрямую. Как вы импортируете tkinter, вам нужно использоватьtk.INSERT, так далее.

Использовать tk.INSERT вместо только INSERT. Показан полный код.

import tkinter as tk
from tkinter import scrolledtext

window = tk.Tk()
window.title("test of scrolledtext and INSERT method")
window.geometry('350x200')

txt = scrolledtext.ScrolledText(window,width=40,height=10)
txt.insert(tk.INSERT,'You text goes here')
txt.grid(column=0,row=0)

window.mainloop() 

INSERT нельзя использовать напрямую.

Вы можете использовать его в прошлом только потому, что вы использовали это в прошлом:

from tkinter import * # this is not a good practice

INSERT,CURRENT а также END находятся в tkinter.constants.Теперь в вашем коде вы их даже не импортировали.

Если вы хотите их использовать, вы можете использовать

from tkinter.constants import * # not recommended

...
txt.insert(INSERT,'You text goes here')

Или

from tkinter import constants

...
txt.insert(constants.INSERT,'You text goes here') # recommend

Если вы не хотите их импортировать, вы также можете использовать:

txt.insert("insert",'You text goes here')

Изменить: я нашел в исходном коде tkinter, он их импортировал, ответ на перезагрузку также в порядке.

Другие вопросы по тегам