LINUX.ORG.RU

GTK+


0

1

Простенький вопрос вообщем-то. Как сгенерировать событие нажатия на клавишу и передать при этом код какой-нибудь клавиши ?

g_signal_emit_by_name( ( GtkEntry * ) entry, «key_press_event», ... ? )


Ответ на: комментарий от baverman

Почему координаты события GdkEventButton x и y имеют такие ужасные значения ? типа 1.1458777273831018e-310 как их преобразовывать ?

tk ()
Ответ на: комментарий от baverman

Сгенерировать событие через те функции у меня не получилосью Но пофиг, нашел gdk_test_simulate_key. Она как раз делает, то что мне нужно. Но в этой симуляции еще и кнопку мышки сдвигает. А мне надо что бы не сдвигалась, конечно, а то она улетает хрен знает куда. Ну вот я и пытаюсь передать ей значения нормальные, текущие т.е.

g_signal_connect( GTK_OBJECT( button_1 ), "clicked", 
                      G_CALLBACK( button_digit_click ), (void *) buttons_numb );
....
void button_digit_click( GtkWidget *widget, GdkEvent *event,  gpointer data )
{
    GdkEventButton * pevent = (GdkEventButton *) event;
....
}
Дальше в отладчике смотрю значения у (*pevent).x и y.

tk ()
Ответ на: комментарий от baverman

Ну либо можно с координатами этими не париться, а все же попробовать почеловечески создать это событие. gdk_event_new () - создает объект структурки с пустыми значениями. Среди полей есть поле time. Как его корректно заполнить ? Допустим заполним его. Потом куда ? gdk_event_put () делать ?

tk ()
Ответ на: комментарий от tk

Вот, набросал по-быстрому:

import gtk

def on_btn_click(widget, entry):
    event = gtk.gdk.Event(gtk.gdk.KEY_PRESS)
    event.keyval = ord('G')
    entry.emit('key-press-event', event)

window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect('delete-event', gtk.main_quit)

vbox = gtk.VBox()
window.add(vbox)

entry = gtk.Entry()
vbox.pack_start(entry)

btn = gtk.Button('generate')
btn.connect('clicked', on_btn_click, entry)
vbox.pack_start(btn)

window.show_all()
gtk.main()

Для gtk_widget_event надо аккуратно заполнять все поля у события, поэтому эммичу здесь напрямую (аналогично g_signal_emit_by_name).

Вообще, мне кажется, ты маешься фигней. Зачем симулировать нажатие клавишь?

baverman ★★★ ()
Ответ на: комментарий от baverman

Задание написать калькулятор. Ввод можно осуществлять как с клавы так и с помощью созданных кнопок. Вот я клаву обработал уже и теперь по нажатию на кнопку хочу, что бы запускалась обработка клавы.

tk ()
Ответ на: комментарий от tk

Вот я клаву обработал уже и теперь по нажатию на кнопку хочу, что бы запускалась обработка клавы.

Что-то типа этого я и подозревал.

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

baverman ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.