Мне нужно прокрутить фрейм, содержащий несколько меток.
Так как фреймы не прокручиваются, я решил использовать холст, который содержитрамка с этими ярлыками.
Но это будет первый раз, когда я использую холст, поэтому я действительно не знаю, с чего начать, в итоге я получил следующий код:
canvas=TkCanvas.new(root) {grid :row =>0, :column =>0}
frame=TkLabelframe.new(canvas) {grid :row =>0, :column =>0}
scroll=Tk::Tile::Scrollbar.new(root) {orient 'vertical'; grid :row =>0, :column =>1, :sticky =>"wns"}
canvas.yscrollcommand proc {|*args| scroll.set(*args)}
scroll.command proc {|*args| canvas.yview(*args)}
x=0
5.times {
lab=TkLabel.new(frame) {grid :row =>x, :column =>0, :sticky =>"w"}
lab.text "Aaa..."
x+=1
}
Но я получаюрамку для изменения размера для каждой метки, которую я добавлю, и поэтому холст никогда не будет прокручиваться.
Как я могу установить рамку, чтобы она не изменяла размеры?Используете canvas.grid_propagate(false)
?И как я могу сделать прокрутку холста?
Я использую ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
Рабочий код для прокрутки холста:
canvas=TkCanvas.new(root) {grid :row =>0, :column =>0}
frame=TkLabelframe.new(canvas) {grid :row =>0, :column =>0}
scroll=Tk::Tile::Scrollbar.new(root) {orient 'vertical'; grid :row =>0, :column =>1}
TkcWindow.new(canvas, 1, 1, :window=>frame, :anchor=>'nw')
canvas.configure(:scrollregion => "0 0 400 400")
canvas.grid_propagate(false)
canvas.yscrollcommand proc {|*args| scroll.set(*args)}
scroll.command proc {|*args| canvas.yview(*args)}