2014-12-17 2 views
1

Чтобы создать простой столбец столбцов столбцов для моего текстового редактора, я решил просто использовать функцию index виджета tkinter.Text. Фактически, функция index возвращает строку, представляющую строку и столбец координат, переданных в качестве аргумента.Почему координаты текстового курсора не обновляются правильно?

В частности, я использую cursor_pos = text.index(tkinter.INSERT), чтобы получить индекс курсора, так как, с effbot сайта на tkinter.INSERT:

tkinter.INSERT соответствует вставки курсора.

Проблема в том, что tkinter.INSERT, кажется, дает мне последнюю позицию курсора, пока я не переместил курсор со стрелками (например).

Это функция, которая обрабатывает подсчет строк и столбцов:

def on_key_pressed(self, event=None): 
    """Docs """ 
    if self.tpane is not None: 
     print(self.lines, self.columns) 

     self.tpane.update() 
     cursor_pos = self.tpane._tabs[self.tpane.selected()].text.index(tkinter.INSERT) 
     self.lines = int(cursor_pos.split('.')[0]) 
     self.columns = int(cursor_pos.split('.')[1]) 
     print(self.lines, self.columns) 
     self.line_c.config(text='Lines: ' + str(self.lines)) 
     self.col_c.config(text='Columns: ' + str(self.columns)) 

     self.update() 

Я не знаю, если вы можете понять ситуацию ... Когда я первый тип письма на редактора, self.columns переменная не обновляется до 1 (остается 0), пока я не напишу вторую букву, где она обновится до 1, и так далее. Но есть трюк, чтобы сделать это обновление без написания нового письма. После написания первой буквы, если я перемещаю курсор со стрелками, он обновляет self.columns до фактического 1.

Другая проблема заключается в том, что я пытаюсь удалить существующий символ. Например, если у меня есть 3-х символов (и предположим, у меня есть self.columns до 3), и я нажимаю delete, self.columns обновление необъяснимо к 4, и если я пытаюсь удалить другой символ, в этот момент, он обновляет до 3.

Эта проблема существует и для self.lines в обработчике событий on_key_pressed. Я не уверен, что это должно произойти, и если да, то у меня что-то не хватает ...

ответ

1

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

Вы можете изменить порядок, используя привязку привязки. Для получения дополнительной информации см этот вопрос: Basic query regarding bindtags in tkinter

Для примера того, как изменить bindtags см этот ответ: https://stackoverflow.com/a/3513906/7432

Если вы не хотите иметь дело с bindtags, вы можете связываться с <KeyRelease>. Встроенные привязки выполняются на клавише , нажимая, поэтому смена всегда будет срабатывать после обновления виджета.

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