[Решено] GTK, управление фокусом (Не понимаю что гуглить)
Модератор: Модераторы разделов
-
neol
- Сообщения: 600
- ОС: Debian Stable
[Решено] GTK, управление фокусом
Собственно имеется некая софтина на PyGTK с 6-10 кнопками в окошке. Задача состоит в том, чтобы при нажатии заранее определенных клавиш (пусть будет h,j,k,l (: ) фокус переходил от одной кнопки к другой (by default так работают стрелки на клавиатуре). Вопрос как это сделать по-человечески?
-
sash-kan
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: [Решено] GTK, управление фокусом
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
при сбоях форума см.блог
-
neol
- Сообщения: 600
- ОС: Debian Stable
Re: [Решено] GTK, управление фокусом
Какой функцией передать фокус понятно, а как найти кнопку, которая расположена справа/сверху/вверху/внизу - не очень. Написать-то это не великая проблема, но где-то в GTK оно уже есть, так зачем переписывать еще раз.
-
allez
- Сообщения: 2223
- Статус: Не очень злой админ :-)
- ОС: SuSE, CentOS, FreeBSD, Windows
Re: [Решено] GTK, управление фокусом
Очень сомневаюсь, что в GTK где-то есть функция, позволяющая определять взаимное расположение элементов управления в окне, но голову на отсечение я за это не отдам и даже на шоколадку не поспорю. :)
Мне навскидку в голову приходит такая идея:
1. Создать двумерный массив и записать в его элементы идентификаторы кнопок в окне.
2. В паре переменных держать индексы текущего элемента массива, а при нажатии управляющих клавиш соответственно уменьшать их или увеличивать.
3. Считывать из элемента массива с полученными индексами значение идентификатора кнопки и передавать ей фокус с помощью gtk_window_set_focus ().
Мне навскидку в голову приходит такая идея:
1. Создать двумерный массив и записать в его элементы идентификаторы кнопок в окне.
2. В паре переменных держать индексы текущего элемента массива, а при нажатии управляющих клавиш соответственно уменьшать их или увеличивать.
3. Считывать из элемента массива с полученными индексами значение идентификатора кнопки и передавать ей фокус с помощью gtk_window_set_focus ().
-
neol
- Сообщения: 600
- ОС: Debian Stable
Re: [Решено] GTK, управление фокусом
Энергия лени неисчерпаема (:
В результате GTK обрабатывает событие так, как будто нажата соответствующая стрелка.
Код: Выделить всё
def key_press_event(self,widget,event, data=None):
keys = {}
keys[43] = 100
keys[44] = 104
keys[45] = 98
keys[46] = 102
if event.hardware_keycode in keys:
event.hardware_keycode = keys[event.hardware_keycode]В результате GTK обрабатывает событие так, как будто нажата соответствующая стрелка.