2017-08-14 4 views
0

スクロールバーの例をhereに基づいて実行します。しかし、フレームにボタン(Prev)を追加したいのですが、スクロールバーが下に移動すると、このボタンはそのまま残り、他のコンテンツはスクロールバーと共に移動します。ここでTkinterのスクロールバーで修正ボタンを作成する

enter image description here

私のコードです:

import Tkinter as tk 

class Example(tk.Frame): 
    def __init__(self, root): 

     tk.Frame.__init__(self, root) 
     self.canvas = tk.Canvas(root, borderwidth=0, background="#ffffff") 
     self.frame = tk.Frame(self.canvas, background="#ffffff") 
     self.vsb = tk.Scrollbar(root, orient="vertical", command=self.canvas.yview) 
     self.canvas.configure(yscrollcommand=self.vsb.set) 

     self.vsb.pack(side="right", fill="y") 
     self.canvas.pack(side="left", fill="both", expand=True) 
     self.canvas.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame") 

     self.frame.bind("<Configure>", self.onFrameConfigure) 

     self.populate() 

    def populate(self): 

     button = tk.Button(self.frame, text='Prev') 
     button.grid(row=0, columns=1) 

     for row in range(1,100): 
      tk.Label(self.frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0) 
      t="this is the second column for row %s" %row 
      tk.Label(self.frame, text=t).grid(row=row, column=1) 

    def onFrameConfigure(self, event): 
     '''Reset the scroll region to encompass the inner frame''' 
     self.canvas.configure(scrollregion=self.canvas.bbox("all")) 

if __name__ == "__main__": 
    root=tk.Tk() 
    Example(root).pack(side="top", fill="both", expand=True) 
    root.mainloop() 

誰も私は、この問題の解決に役立つことはできますか?どうもありがとう!

+0

は、以下のコードを見てみましょう。 –

答えて

1

はあなたにもpack()でこれを行うことができますが、私はgrid()

何をする必要がある場所の行0上のルートにあるボタンを使用して、ルートの1行目に、クラスの枠を配置することを好みます。これはあなたの問題を解決するはずです。

grid()を使用する場合は、ウィンドウのサイズを変更したときに大きくなったり小さくなったりするように、行と列の重みを管理する必要があります。 rowconfigute()columnconfigute()でこれを行うことができます。このプログラムでは、rootの重みを設定する必要があります。

ボタンを左に留めるには、grid()の内側にsticky = "w"を使用して、スティックする側を選択します。あなたは `グリッド()`ここだけスクロールされた領域の上にボタンを配置を使用する必要があります

import tkinter as tk 

class Example(tk.Frame): 
    def __init__(self, root): 

     tk.Frame.__init__(self, root) 
     self.canvas = tk.Canvas(root, borderwidth=0, background="#ffffff") 
     self.frame = tk.Frame(self.canvas, background="#ffffff") 
     self.vsb = tk.Scrollbar(root, orient="vertical", command=self.canvas.yview) 
     self.canvas.configure(yscrollcommand=self.vsb.set) 

     self.vsb.grid(row = 1, column = 1, sticky = "nsew") 
     self.canvas.grid(row = 1, column = 0, sticky = "nsew") 
     self.canvas.create_window((4,4), window=self.frame, anchor="nw", tags="self.frame") 

     self.frame.bind("<Configure>", self.onFrameConfigure) 

     self.populate() 

    def populate(self): 

     button = tk.Button(root, text='Prev') 
     button.grid(row=0, columns=1, sticky = "w") 

     for row in range(1,100): 
      tk.Label(self.frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0) 
      t="this is the second column for row %s" %row 
      tk.Label(self.frame, text=t).grid(row=row, column=1) 

    def onFrameConfigure(self, event): 
     '''Reset the scroll region to encompass the inner frame''' 
     self.canvas.configure(scrollregion=self.canvas.bbox("all")) 

if __name__ == "__main__": 
    root=tk.Tk() 
    root.columnconfigure(0, weight = 1) 
    root.rowconfigure(1, weight = 1) 
    Example(root).grid(row = 1) 
    root.mainloop() 
+0

ありがとうございました。そして今、ボタンを中央に置いていきたいと思います。どうしたらいいですか? –

関連する問題