Найти - Пользователи
Полная версия: Вопрос о Tkinter.Text
Начало » GUI » Вопрос о Tkinter.Text
1
m.meehalkoff
Доброго времени суток. Возникла необходимость узнать текущее положение курсора в Tkinter.Text. Почитав доки нашел следующий способ:
current_position = text.index('insert')
Но возвращаемое значение не соответствует положению курсора. Как будто с опозданием. Курсор уже на третьей строке, а возвращаемый индекс указывает на вторую. Как мне решить этот вопрос?
regall
m.meehalkoff
Но возвращаемое значение не соответствует положению курсора. Как будто с опозданием. Курсор уже на третьей строке, а возвращаемый индекс указывает на вторую. Как мне решить этот вопрос?
А он указывает на вторую, или возвращает 2 ? =)
m.meehalkoff
regall
Возвращает 2, а должен возвращать 3.
regall
m.meehalkoff
Возвращает 2, а должен возвращать 3.
А может нумерация начинается с 0, а не с 1?
m.meehalkoff
regall
m.meehalkoff
Возвращает 2, а должен возвращать 3.
А может нумерация начинается с 0, а не с 1?
Нет. Начальный индекс ‘1.0’. (строка.столбец). Речь идет о строке.
sp3
скорее всего вы запутались с событиями
from Tkinter import *
root = Tk()
text0 = Text(root)
text0.pack()

def fooKeyRelease(event):
print "Key up ",text0.index('insert')

def fooKey(event):
print "Key down ",text0.index('insert')

text0.bind("<KeyRelease>", fooKeyRelease)
text0.bind("<Key>", fooKey)

root.mainloop()
regall
Не понимаю, в чем подвох.
Я запустил, протестил.
При нажатии клавиши - индекс строки, на которой находился, при отжатии - индекс новой, или тот же, если переход невозможен. Вроде бы все правильно…

p.s.
Win 7, python 2.6
sp3
Хорошо. Текущее положение курсора 1.0 , нажимаем на ентер, положение курсора становится 2.0, но при событии <Key> мы узнаем предыдущее положение курсора 1.0 . Возможно это и есть проблема с которой столкнулся топикпастер.
regall
sp3
екущее положение курсора 1.0 , нажимаем на ентер, положение курсора становится 2.0, но при событии <Key> мы узнаем предыдущее положение курсора 1.0 . Возможно это и есть проблема с которой столкнулся топикпастер.
Верно. Давайте рассмотрим нажатие клавишы вниз.
События такие:
KEY DOWN ————————— KEY UP
курсор на 2 курсор переходит на 3 курсор на 3

То есть новую позицию курсора мы получим только на отжатие клавишы. Если требуется узнать номер строки при нажатии, то следующую строку легко вычислить по трем параметрам:
- количество строк (если пытаемся перейти на строку ниже последней)
- текущая строка
- клавиша (в зависимости от клавиши прибавляем или отнимаем единицу)
m.meehalkoff
sp3
скорее всего вы запутались с событиями
from Tkinter import *
root = Tk()
text0 = Text(root)
text0.pack()

def fooKeyRelease(event):
print "Key up ",text0.index('insert')

def fooKey(event):
print "Key down ",text0.index('insert')

text0.bind("<KeyRelease>", fooKeyRelease)
text0.bind("<Key>", fooKey)

root.mainloop()
Да Вы правы. Ошибка была в обработке события. Спасибо за помощь.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB