Ruby / Tk: как получить меньший виджет кнопки с изображением - PullRequest
0 голосов
/ 18 марта 2011

Я пишу на Tk 8.5.9 из ActiveTcl на Ruby 1.8.7 на Mac OS X 10.6.

Чтобы соответствовать требованиям моего приложения, мне нужно, чтобы виджеты кнопок были такими же маленькими, как изображение gif, но я не могу. Я часами искал и экспериментировал с отрицательными результатами.

Заранее большое спасибо за любые подсказки.

Ниже приведен код, из которого я пытаюсь получить маленькие кнопки.

require 'tk'
require 'tkextlib/tile'

$up_img = TkPhotoImage.new("file"=>"arrowup-n.gif")
$down_img = TkPhotoImage.new("file"=>"arrowdown-n.gif")

root = TkRoot.new {title "Ek Composer"}

content = Tk::Tile::Frame.new(root).pack
Tk::Tile::Button.new(content) {width 1;image $up_img;  command {move_up}  }.pack
Tk::Tile::Button.new(content) {width 1;image $down_img;command {move_down}}.pack

def move_up
    p "move up"
end

def move_down
    p "move down"
end

Tk.mainloop

Но кнопки остаются слишком большими: (.

Ответы [ 2 ]

1 голос
/ 18 марта 2011

Это неловко. Тема OSX на самом деле хочет добавить дополнительное место на любом конце кнопки.

Вы можете попробовать переключиться на классическую кнопку (в самой tk), но она оставляет больше места по вертикали и выглядит немного менее естественной. Или вы можете поместить изображение в метку (которую вы можете точно уменьшить) и добавить привязки к ней, чтобы она реагировала на щелчки мышью.

0 голосов
/ 28 марта 2011

Я добавил привязку к ярлыку. Работает отлично. Благодарю. Следует фрагмент кода метки с привязкой в ​​виде кнопки.

require 'tk'


$resultsVar = TkVariable.new
root = TkRoot.new
root.title = "Window"

$up_img = TkPhotoImage.new("file"=>"arrowup-n.gif")
$down_img = TkPhotoImage.new("file"=>"arrowdown-n.gif")

Lbl = TkLabel.new(root) do
  image $up_img
  borderwidth 0
  font TkFont.new('times 20 bold')
  foreground  "red"
  relief      "groove"
  pack("side" => "right",  "padx"=> "50", "pady"=> "50")
end

Lbl.bind("ButtonPress-1")  {
    Lbl.configure("image"=>$down_img) 
}

Lbl.bind("ButtonRelease-1") { 
    Lbl.configure("image"=>$up_img) 
}

Lbl['textvariable'] = $resultsVar
$resultsVar.value = 'New value to display'

Tk.mainloop
...