

いつもお世話になっております。

Python 2.7のTkinterを用いてGUIアプリにスクロールが  
できる(ブラウザを見るときのような全体をスクロールできる)  
機能を付けたいです。  
様々なサイトを参考にしてみたのですが解決できませんでした。  
垂直方向にまずはスクロールできるようにしたいのですが、  
どのようにすればよろしいでしょうか。  
その際クラスは用いずにご説明していただけましたら、幸いです。

お手数をおかけいたしますが、よろしくお願いいたします。


CC BY-SA 4.0
2018-12-01T10:07:26.313
50814
2019-03-01T03:08:52.040
2019-03-01T03:08:52.040
19110
30396
question
python python2 tkinter gui
Tkinterでスクロールできるようにしたい


どのような **Widget** を配置したいのかが書かれていないので想定となりますが、例えば **Canvas Widget** に **Scroll
Bar** を付ける場合は以下のように

  * **Root Window** 上に **Scrollbar Widget** と **Canvas Widget** を配置
  * `Scrollbar.config(command=Canvas.yview)` にて **Scrollbar** を動かしたときに **Canvas** に通知する処理を追加
  * `Canvas.config(scrollregion=())` にてScrollの範囲を設定
  * `Canvas.config(yscrollcommand=Scrollbar.set)` にて **Canvas** の可動域を **Scrollbar** に通知する処理を追加

で動作するかと思います。

[code]

    # -*- coding: utf-8 -*-
    import Tkinter as tk
    
    root = tk.Tk()
    root.geometry("400x200")
    
    # Canvas Widget を生成して配置
    canvas = tk.Canvas(root)
    canvas.pack(side=tk.LEFT, fill=tk.BOTH)
    
    # Scrollbar を生成して配置
    bar = tk.Scrollbar(root, orient=tk.VERTICAL)
    bar.pack(side=tk.RIGHT, fill=tk.Y)
    
    # Scrollbarを制御をCanvasに通知する処理を追加
    bar.config(command=canvas.yview)
    
    # Canvasのスクロール範囲を設定
    canvas.config(scrollregion=(0,0,400,400))
    
    # Canvasの可動域をScreoobarに通知する処理を追加
    canvas.config(yscrollcommand=bar.set)
    
    # Canvas上に適当な図形を書いておく
    id = canvas.create_oval(10, 10, 370, 370)
    canvas.itemconfigure(id, fill = 'red')
    
    root.mainloop()
    
[/code]

* * *

**Frame Widget** は残念ながら **Scrollbar** をサポートしていないのですが、上記の **Scrollbar** 付きの
**Canvas Widget** 上に **Frame Widget** を配置することで対応できるかと思います。

[code]

    # -*- coding: utf-8 -*-
    import Tkinter as tk
    
    root = tk.Tk()
    root.geometry("400x200")
    
    # Canvas Widget を生成
    canvas = tk.Canvas(root)
    canvas.pack(side=tk.LEFT, fill=tk.BOTH)
    
    # Scrollbar を生成して配置
    bar = tk.Scrollbar(root, orient=tk.VERTICAL)
    bar.pack(side=tk.RIGHT, fill=tk.Y)
    
    # Scrollbarを制御をCanvasに通知する処理を追加
    bar.config(command=canvas.yview)
    
    # Canvasのスクロール範囲を設定
    canvas.config(scrollregion=(0,0,400,400))
    
    # Canvasの可動域をScreoobarに通知する処理を追加
    canvas.config(yscrollcommand=bar.set)
    
    # Frame Widgetを 生成
    frame = tk.Frame(canvas)
    
    # Frame Widgetを Canvas Widget上に配置
    canvas.create_window((0,0), window=frame, anchor=tk.NW, width=canvas.cget('width'))
    
    # Frame上に適当なコンテンツを配置
    tk.Label(frame, text="Hello World!!", font=("",24)).pack()
    
    root.mainloop()
    
[/code]


CC BY-SA 4.0
2018-12-03T07:25:57.363
50858
2018-12-03T07:25:57.363
24801
50814
answer