如何在Ruby TK 中用canvas 制作可滚动的框架?
How to make a scrollable frame with canvas in Ruby TK?
我需要滚动包含多个标签的框架。
由于框架不可滚动,所以我选择使用 canvas,其中包含带有这些标签的框架。
但这对我来说是第一次使用 canvas,所以我真的不知道从哪里开始,最后我得到了这段代码:
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 将永远无法滚动。
如何设置框架使其不调整大小?使用 canvas.grid_propagate(false)
?
我怎样才能使 canvas 可滚动?
我正在使用 ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
使 canvas 可滚动的工作代码是:
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)}
我不熟悉 Ruby 或 Ruby 中的 Tk。但是您似乎只是通过网格几何管理器将框架放在 canvas 之上。在 Tcl/Tk 中,您需要将框架作为 window 项目放入 canvas 中。快速搜索互联网似乎表明您需要使用 TkcWindow class 在 Ruby.
中做同样的事情
同样,我不知道 Ruby,但我想代码应该是这样的:
canvas=TkCanvas.new(root) {grid :row =>0, :column =>0}
frame=TkLabelframe.new(canvas)
TkcWindow.new(canvas, [0, 0], :window => frame)
无论如何,请查看 TkcWindow class 了解如何进行。
我需要滚动包含多个标签的框架。
由于框架不可滚动,所以我选择使用 canvas,其中包含带有这些标签的框架。
但这对我来说是第一次使用 canvas,所以我真的不知道从哪里开始,最后我得到了这段代码:
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 将永远无法滚动。
如何设置框架使其不调整大小?使用 canvas.grid_propagate(false)
?
我怎样才能使 canvas 可滚动?
我正在使用 ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
使 canvas 可滚动的工作代码是:
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)}
我不熟悉 Ruby 或 Ruby 中的 Tk。但是您似乎只是通过网格几何管理器将框架放在 canvas 之上。在 Tcl/Tk 中,您需要将框架作为 window 项目放入 canvas 中。快速搜索互联网似乎表明您需要使用 TkcWindow class 在 Ruby.
中做同样的事情同样,我不知道 Ruby,但我想代码应该是这样的:
canvas=TkCanvas.new(root) {grid :row =>0, :column =>0}
frame=TkLabelframe.new(canvas)
TkcWindow.new(canvas, [0, 0], :window => frame)
无论如何,请查看 TkcWindow class 了解如何进行。