0

a の中にあるCheckButtona の中にいくつかの (~30) sを入れたいです。テスト目的で、ScrollableFrame のサイズを 100px x 100px に制限したいと思いました。サイズが 100x100 で、グリッド化されたすべての をスクロールできると思っていましたが、すべての が に収まるようにウィンドウが自動的に拡張されます。BWidget::ScrollableFrameBWidget::ScrolledWindowScrollableFrameCheckButtonCheckButtonTkRoot

これが私が試したことです:

#!/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れます。CheckButtonScrollableFrame を初めて追加すると、CheckButton必要なサイズに設定されます。サイズ変更を防ぐにはどうすればよいですか?

4

1 に答える 1