#ruby #linux #ubuntu #gtk #gnome
#ruby #linux #ubuntu #gtk #gnome
Вопрос:
Я пытаюсь написать графический интерфейс киоска на ruby / gtk в Ubuntu. Я довольно свободно говорю на ruby, но новичок в написании графических интерфейсов и не силен в Linux.
Я использую сенсорный экран и использую наши собственные изображения для кнопок, например
button_image = Gtk::Image.new(Gdk::Pixbuff.new "images/button_image.png")
@button = Gtk::Button.new
@button.add(button_image)
@button.set_relief(Gtk::RELIEF_NONE)
Моя проблема в том, что когда кнопки нажаты или остаются выбранными (или наведены на них, хотя для сенсорного экрана это менее актуально), gtk показывает жирные квадратные границы вокруг них. Очевидно, что к кнопкам применяется предварительное / выбранное / активное освещение gtk. Я пробовал изменять свойства кнопок различными способами, а также пытался взломать мою тему, и хотя я могу изменить внешний вид подсветки, я, похоже, не могу полностью избавиться от нее. Изменить цвет подсветки с помощью моей темы легко, но если я удалю свою настройку, по-прежнему останется значение по умолчанию, от которого я не смогу избавиться.
Кто-нибудь знает, есть ли способ остановить это или, возможно, сделать это прозрачным? Заранее спасибо!
Ответ №1:
Похоже, вы хотите использовать именно ваше изображение для всей кнопки, вместо того, чтобы помещать изображение внутрь обычной GtkButton, но при этом использовать все обычное поведение кнопки.
Самый простой способ сделать это — просто переопределить чертеж. Если вы используете gtk2, подключитесь к сигналу «expose-event», выполните там отрисовку и верните true, чтобы не запускался обработчик по умолчанию. Если вы используете gtk3, подключитесь к сигналу «рисовать» и проделайте то же самое.
Комментарии:
1. о, интересно — раньше я не углублялся в это, но я попробую, спасибо за предложение
Ответ №2:
Я попытался вмешаться в чертеж, как предложил Федерико, но обнаружил, что самый прямой способ решить эту проблему — вместо кнопки использовать окно события. Поля событий принимают нажатия точно так же, как кнопки, но не реагируют на выбор, наведение курсора и т.д. В ruby код выглядит следующим образом:
image = Gtk::Image.new("myfile.png")
event_box = Gtk::EventBox.new.add(image)
event_box.visible_window = false
event_box.signal_connect("button_press_event") do
puts "Clicked."
end
Большая часть этого в точности похожа на кнопку; очевидно, что метод * visible_window * скрывает окно события под изображением кнопки.