2011-11-10 2 views
0

우분투의 루비/gtk에 키오스크 GUI를 쓰려고합니다. 나는 루비에 능숙하지만 GUI 작성에 익숙하지 않고 리눅스에는별로 좋지 않습니다.GTK - 선택/마우스 오버시 버튼을 강조 표시하지 않음

저는 터치 스크린을 사용하고 있습니다.

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의 프리 라이트/선택된/활성 조명을 버튼에 적용하고 있습니다. 여러 가지 방법으로 버튼 속성을 변경해 보았습니다. 또한 내 테마를 해킹하는 방법을 시도해 보았습니다. 강조 표시가 어떻게 수정 될지는 모르지만 완전히 제거 할 수는 없습니다. 내 테마를 통해 하이라이트의 색상을 변경하는 것은 쉽지만, 제 설정을 제거하면 여전히 기본이 없으므로 제거 할 수 없습니다.

누군가를 막을 방법이 있는지 알고 있거나 투명하게 만들 수 있습니까? 미리 감사드립니다!

답변

0

페데리코 (Federico)가 제안한 것처럼 그림에 간섭을 시도했지만이 문제를 해결하는 가장 직접적인 방법은 단추 대신 이벤트 상자를 사용하는 것이 었습니다. 이벤트 상자 그냥 버튼처럼 클릭을 허용하지만 루비에서 등, 선택에 응답 유혹하지 마십시오 코드는 다음과 같습니다

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 * 메소드는 버튼 이미지 아래에 이벤트 상자가 보이지 않도록합니다.

2

일반 GtkButton 내부에 넣는 대신 전체 버튼에 대해 이미지를 정확하게 사용하려는 것처럼 들리지만 여전히 버튼의 모든 정상적인 동작을 사용하십시오.

가장 쉬운 방법은 도면을 무시하는 것입니다. gtk2에 있다면, "expose-event"신호에 연결하고, 거기에서 드로잉을하고, true를 반환하여 기본 핸들러가 실행되지 않도록하십시오. gtk3에 있다면, "draw"신호에 연결하고 똑같이하십시오.

+0

오, 흥미 롭군요. 전에는 깊이 생각하지 못했지만, 시도해 보겠습니다. 제안 해 주셔서 감사합니다. – tekunokurato

관련 문제