[Решено] GTK, управление фокусом (Не понимаю что гуглить)

Модератор: Модераторы разделов

neol
Сообщения: 600
ОС: Debian Stable

[Решено] GTK, управление фокусом

Сообщение neol »

Собственно имеется некая софтина на PyGTK с 6-10 кнопками в окошке. Задача состоит в том, чтобы при нажатии заранее определенных клавиш (пусть будет h,j,k,l (: ) фокус переходил от одной кнопки к другой (by default так работают стрелки на клавиатуре). Вопрос как это сделать по-человечески?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [Решено] GTK, управление фокусом

Сообщение sash-kan »

neol писал(а):
07.09.2010 09:30
Не понимаю что гуглить
"gtk set focus"?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: [Решено] GTK, управление фокусом

Сообщение neol »

sash-kan писал(а):
07.09.2010 11:06
neol писал(а):
07.09.2010 09:30
Не понимаю что гуглить
"gtk set focus"?

Какой функцией передать фокус понятно, а как найти кнопку, которая расположена справа/сверху/вверху/внизу - не очень. Написать-то это не великая проблема, но где-то в GTK оно уже есть, так зачем переписывать еще раз.
Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: [Решено] GTK, управление фокусом

Сообщение allez »

Очень сомневаюсь, что в GTK где-то есть функция, позволяющая определять взаимное расположение элементов управления в окне, но голову на отсечение я за это не отдам и даже на шоколадку не поспорю. :)

Мне навскидку в голову приходит такая идея:
1. Создать двумерный массив и записать в его элементы идентификаторы кнопок в окне.
2. В паре переменных держать индексы текущего элемента массива, а при нажатии управляющих клавиш соответственно уменьшать их или увеличивать.
3. Считывать из элемента массива с полученными индексами значение идентификатора кнопки и передавать ей фокус с помощью gtk_window_set_focus ().
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: [Решено] GTK, управление фокусом

Сообщение neol »

Энергия лени неисчерпаема (:

Код: Выделить всё

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 обрабатывает событие так, как будто нажата соответствующая стрелка.
Спасибо сказали: