前提・実現したいこと
下記はサンプルなのですが、CSVのような表をTKに表示させたく、行数が多いとスクロールしないといけないので、
スクロールバーを設置できるTkCanvasを敷いて、その上にTkcWindowを行の数だけ配置しようと考えております。
行数が多い場合、TkCanvasをスクロールできるようにしたいのですが、3点の不具合が出てしまいます。
・スクロールバーはでるが、スクロールバーのスライダーが出現しない。
・Canvasウィンドウ上でスクロールしても、画面が上下しない。
・スクロールバー上でスクロールすると画面が上下するが、無限に上下できてしまう。(Canvasで定義したheightを超えてスクロールできてしまう)
この3点の不具合の原因と対応策をご教授いただけないでしょうか。
該当のソースコード
ruby
1require 'tk' 2 3root = TkRoot.new 4root.geometry('1280x800') 5 6root_frame = TkFrame.new(root, background: "blue", height: 800, width: 1280).pack 7yscrollbar = TkScrollbar.new(root_frame, orient: 'vertical', width:20).pack(side: 'right', fill: 'y') 8canvas = TkCanvas.new(root_frame, background: "red", height: 800, width: 1260, yscrollcommand: proc{|*idx| yscrollbar.set(*idx)}).pack(side: 'right') 9 10yscrollbar.command(proc{|*idx| canvas.yview(*idx)}) 11 12(0..10).each do |x| 13 frame = TkFrame.new(background: "yellow", height: 100, width: 1260) 14 TkcWindow.new(canvas, 630, 50+100*x, window: frame, height: 100, width: 1260) 15 TkLabel.new( 16 frame, 17 text: 'hoge', 18 ).pack 19end 20 21 22 23Tk.mainloop 24
試したこと
ruby
1yscrollbar = TkYScrollbar.new(root_frame, width:20).pack(side: 'right', fill: 'y') 2canvas = TkCanvas.new(root_frame, background: "red", height: 800, width: 1260).pack(side: 'right') 3 4yscrollbar.assign(canvas)
を試しましたが、同じ挙動でした。
補足情報(FW/ツールのバージョンなど)
macOS Catalina 10.15.7
ruby 2.6.5
tk 0.3.0
###その後
ruby
1canvas = TkCanvas.new(root_frame, background: "red", height: 800, width: 1260, scrollregion:[0,0,0,100*ary.size], yscrollcommand: proc{|*idx| yscrollbar.set(*idx)})
とscrollregion
を加えたところ、
・スクロールバーはでるが、スクロールバーのスライダーが出現しない。
・スクロールバー上でスクロールすると画面が上下するが、無限に上下できてしまう。(Canvasで定義したheightを超えてスクロールできてしまう)
上記2点は解決しました。
・Canvasウィンドウ上でスクロールしても、画面が上下しない。
が解決されず、こちらに関してご意見いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/24 08:03