如何在 ScrolledWindow 中定义 ScrollableFrame 的高度?
How to define the height of a ScrollableFrame inside a ScrolledWindow?
我想将一些 (~30) CheckButton
放在 BWidget::ScrollableFrame
中,而 BWidget::ScrollableFrame
位于 BWidget::ScrolledWindow
中。出于测试目的,我想将 ScrollableFrame 的大小限制为 100px x 100px。我期望 ScrollableFrame
,大小为 100x100,能够滚动浏览所有网格化的 CheckButton
,但是 window 会自动扩展,以便所有 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
所以...怎么了?据我所见,here 应该可以使用 ScrollableFrame#get_frame
检索帧,如下所示:
set a [$f getframe]
在ruby中我会这样做:
sftest = scrollframe.get_frame
方法 get_frame
在我的安装中不存在。但是我上面的 ruby 变体导致了以下错误:
/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
需要的大小。我怎样才能防止调整大小?
好的...看来我使用的配置、安装或兼容性有问题。
我尝试了以下方法:
#!/usr/bin/env ruby1.8
然后没有错误被抛出并且以下行有效:
sftest = scrollframe.get_frame
现在可以将 CheckButton
添加到 sftest
,然后我可以滚动浏览 Checkbutton
的列表...
格雷茨
gg
我想将一些 (~30) CheckButton
放在 BWidget::ScrollableFrame
中,而 BWidget::ScrollableFrame
位于 BWidget::ScrolledWindow
中。出于测试目的,我想将 ScrollableFrame 的大小限制为 100px x 100px。我期望 ScrollableFrame
,大小为 100x100,能够滚动浏览所有网格化的 CheckButton
,但是 window 会自动扩展,以便所有 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
所以...怎么了?据我所见,here 应该可以使用 ScrollableFrame#get_frame
检索帧,如下所示:
set a [$f getframe]
在ruby中我会这样做:
sftest = scrollframe.get_frame
方法 get_frame
在我的安装中不存在。但是我上面的 ruby 变体导致了以下错误:
/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
需要的大小。我怎样才能防止调整大小?
好的...看来我使用的配置、安装或兼容性有问题。
我尝试了以下方法:
#!/usr/bin/env ruby1.8
然后没有错误被抛出并且以下行有效:
sftest = scrollframe.get_frame
现在可以将 CheckButton
添加到 sftest
,然后我可以滚动浏览 Checkbutton
的列表...
格雷茨
gg