Это скорее понимание того, как работает GTK + 2 / wx / wxRuby.Таким образом, приведенный выше код не работает с вашей конфигурацией на машине Virtual Box, которую я настроил для тестирования, ни на Ubuntu 11.10 x86_64 моей машины для разработки с опцией компиляции ядра 1000 Гц и ruby 1.9.3 p21.
GTK +2 ошибка возникает при возникновении события on_size во время создания кадра.Создание еще не завершено, поэтому у окна сообщения на тот момент не было родителя.Вы можете проверить это, закомментировав (в def on_size (событие):
message("X = " + x.to_s + ", Y = " + y.to_s, "Size event")
и попытавшись:
puts "Size event: X = #{x}, Y = #{y}"
, чтобы увидеть подробности события на стандартном выходе. Вы заметите, что естьдва события, сгенерированные во время создания: событие начального размера и событие изменения размера
Другим предупреждением является цикл простоя, который блокирует Unity на моей системе. Вы можете проверить, что событие простоя происходит без блокировки, изменив кодкак показано ниже:
в def initialize добавьте это перед show ():
create_status_bar(2)
self.status_text = "Welcome to wxRuby!"
затем в idle_event:
def on_idle(event)
@idleCounter += 1
#if @idleCounter > 15 # Without the counter to slow this down, Idle events would be firing every second
# message("The system is idle right now", "Idle event")
# @idleCounter = 0
#end
set_status_text @idleCounter.to_s, 1
event.request_more() # You must include this, otherwise the Idle event won't occur again
end
Последнее предупреждение о коде: вы можетеобратите внимание, что вы не видите события нажатия клавиши или мыши, создающие их окно сообщения. Это происходит потому, что элемент управления кнопки заполняет клиентскую область и перехватывает события рамки для клавиш и кнопок. Если вы измените размер рамки во время работы приложения, кнопка будетне изменяйте его размеры по умолчанию (платформа GTK + 2). Если затем щелкнуть внутри области клиента рамки, но не на кнопке, вы увидите события мыши.
Удачи!