我想把一些(~30) CheckButton放在位于BWidget::ScrolledWindow内部的BWidget::ScrollableFrame中。出于测试目的,我希望将ScrollableFrame的大小限制为100 by。我预期会有一个大小为100x100的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所以..。怎么了?根据我看到的here,应该可以使用ScrollableFrame#get_frame检索一个框架,如下所示:
set a [$f getframe]在红宝石里,我会这样做:
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所需的大小。如何防止调整大小?
发布于 2015-04-01 21:13:06
好的..。我使用的配置、安装或兼容性似乎存在问题。
我尝试了以下几点:
#!/usr/bin/env ruby1.8
然后不抛出错误,折叠行工作:
sftest = scrollframe.get_frame
现在可以将CheckButtons添加到sftest中,然后我可以滚动查看Checkbutton的列表.
格列茨
gg
https://stackoverflow.com/questions/29332444
复制相似问题