Как определить высоту ScrollableFrame внутри ScrolledWindow?
Я хочу поставить немного (~30) CheckButton
с внутри BWidget::ScrollableFrame
который расположен внутри BWidget::ScrolledWindow
, В целях тестирования я хотел ограничить размер ScrollableFrame до 100 на 100 пикселей. Я ожидал ScrollableFrame
, размером 100x100, с возможностью прокрутки по всей сетке CheckButton
s, но окно автоматически расширяется, так что все 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
не существует в моей установке. Но мой приведенный выше вариант 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
необходимо. Как я могу предотвратить изменение размера?
1 ответ
Хорошо... Кажется, есть проблема с моим используемым конфигом, установкой или совместимостью.
Я попробовал следующее:
#!/usr/bin/env ruby1.8
Тогда никакая ошибка не выдана, и строка фоллинга работает:
sftest = scrollframe.get_frame
Теперь можно добавить CheckButton
с sftest
и тогда я могу прокрутить список Checkbutton
s...
Greetz
гг