GTK - не подсвечивать кнопки при выборе / наведении - PullRequest
0 голосов
/ 10 ноября 2011

Я пытаюсь написать графический интерфейс киоска в 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. Я попытался изменить свойства кнопки различными способами, а также попытался взломать мою тему, и хотя я могу изменить внешний вид подсветки, я не могу полностью избавиться от нее. Изменить цвет подсветки с помощью моей темы очень просто, но если я удаляю настройки, все равно есть значение по умолчанию, от которого я не могу избавиться.

Кто-нибудь знает, есть ли способ остановить это или сделать его прозрачным? Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 12 ноября 2011

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

Самый простой способ сделать это - просто переопределить рисунок. Если вы находитесь на gtk2, подключитесь к сигналу «expose-event», сделайте ваше рисование там и верните true, чтобы обработчик по умолчанию не запускался. Если вы используете gtk3, подключитесь к сигналу «draw» и сделайте то же самое.

0 голосов
/ 19 ноября 2011

Я попытался вмешаться в рисунок, как предложил Федерико, но обнаружил, что самым прямым способом решения этой проблемы было вместо этого использовать окно событий, а не кнопку.Окна событий принимают щелчки точно так же, как кнопки, но не реагируют на выбор, зависание и т. Д. В 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 * не позволяет отображать окно события под изображением кнопки.

...