a の中にあるCheckButton
a の中にいくつかの (~30) sを入れたいです。テスト目的で、ScrollableFrame のサイズを 100px x 100px に制限したいと思いました。サイズが 100x100 で、グリッド化されたすべての をスクロールできると思っていましたが、すべての が に収まるようにウィンドウが自動的に拡張されます。BWidget::ScrollableFrame
BWidget::ScrolledWindow
ScrollableFrame
CheckButton
CheckButton
TkRoot
これが私が試したことです:
#!/usr/bin/env ruby
require 'tk'
require 'tkextlib/bwidget'
class TestClass < TkRoot
attr_reader :checkbutton
def initialize(*args)
minsize(800, 400)
@checkbutton = []
for i in 0..29
@checkbutton.push({:name => "checkbutton #{i}"})
end
createGUI()
end
def createGUI
TkLabel.new(self, :text => 'first label').grid({:column => 0, :row => 0, :sticky => 'w'})
scrolledwindow = Tk::BWidget::ScrolledWindow.new(self).grid({:column => 0, :row => 1, :sticky => 'w'})
scrolledwindow.auto('none') # want to see if scrollbars are attached correctly
scrollframe = Tk::BWidget::ScrollableFrame.new(scrolledwindow).grid({:column => 0, :row => 0, :sticky => 'w'})
scrollframe.height(100)
scrollframe.width(100)
# leads to error: /usr/lib/ruby/1.9.1/tk.rb:215:in `class_eval': window name "frame" already exists in parent (RuntimeError)
#sftest = scrollframe.get_frame
scrolledwindow.set_widget(scrollframe)
@checkbutton.each_with_index { |cb, index|
TkCheckButton.new(scrollframe, :text => cb[:name]).grid({:column => 0, :row => index, :sticky => 'w'})
}
TkLabel.new(self, :text => 'second label').grid({:column => 1, :row => 0, :sticky => 'w'})
end
end
それで…どうしたの?ここで見たものから、次のように でフレームを取得できるはずですScrollableFrame#get_frame
:
set a [$f getframe]
Rubyでは、次のようにします:
sftest = scrollframe.get_frame
この方法get_frame
は私のインストールには存在しません。しかし、私の上記のルビーバリアントは次のエラーにつながります:
/usr/lib/ruby/1.9.1/tk.rb:215:in `class_eval': window name "frame" already exists in parent (RuntimeError)
この小さなスクリプトでこのエラーがスローされる理由がまったくわからないため、このウィジェットで高さと幅を構成できるかどうかをテストできません。ScrollableFrame の固定の高さと幅を設定するにはどうすればよいですか?
更新:何も追加されていない限り、サイズは正しく設定さCheckButton
れます。CheckButton
ScrollableFrame を初めて追加すると、CheckButton
必要なサイズに設定されます。サイズ変更を防ぐにはどうすればよいですか?