2016-12-20 9 views
0

私はPythonのTkinterのキャンバスにスクロールバーのサイズを変更することはできません(それは小さすぎる、私は幅オプションを設定し、それはうまくいきませんでした)

w=10000 
h=10000 
m=500 
import tkinter 
canvas=tkinter.Canvas(width=w,height=h,bg='white',scrollregion=[0,0,w,h]) 
canvas.pack() 
from tkinter import* 

この作品:

vscrollbar = Scrollbar(canvas,orient="vertical",width=500) 
vscrollbar.pack(side=RIGHT, fill=Y) 
canvas.config(yscrollcommand=vscrollbar.set) 
vscrollbar.config(command=canvas.yview) 

が、いくつかの問題があり、私は思う:

hscrollbar = Scrollbar(canvas,orient="horizontal",width=500) #does not work 
hscrollbar.pack(side=BOTTOM, fill=X) 
canvas.config(xscrollcommand=hscrollbar.set) 
hscrollbar.config(command=canvas.xview) 

答えて

1

あなたが内部のスクロールバーを置くべきではありません キャンバス。それらをキャンバスの外に置く必要があります。内側に表示したい場合は、キャンバスとスクロールバーを保持するフレームを作成し、キャンバスの枠線をオフにします。他のウィジェットはないので、スクロールバーをルートウィンドウに置くことができます。

このコードには他にも問題があります。 1つは、ワイルドカードのインポートを使用しないでください。すでにtkinterをインポートしているので、from tkinter import *もする必要はありません。ワイルドカードのインポートを取り除いて、すべてのtkinterコマンドと定数の前に必ず "tkinter"を付けてください。個人的にはimport tkinter as tkのほうが少し簡単です。接頭辞は少し簡単です(例:tk.Canvastkinter.Canvas)。

また、明示的にルートウィンドウを作成する必要があります。また、スクロールバーの幅を明示的に設定する必要はほとんどありません。最後に、パッカーを使うときは、物を詰める順序が重要です。すべてのpackコマンドをまとめてレイアウトを視覚化しやすくするのが最善です。

最後に、キャンバスの幅と高さを10,000に設定しました。実際に10000x10000ピクセルのディスプレイを持っていない限り、より合理的なものを与えるべきです。スクロール領域が10000x10000に設定され、実際のキャンバスが10000x10000の場合、スクロールバーは必要ありません。

私はそれらのもののすべてを固定し、それ以外無傷であなたのコードを残してみました:

w=10000 
h=10000 
m=500 
import tkinter 

root = tkinter.Tk() 

canvas=tkinter.Canvas(root, width=400,height=400,bg='white',scrollregion=[0,0,w,h]) 

vscrollbar = tkinter.Scrollbar(root,orient="vertical") 
canvas.config(yscrollcommand=vscrollbar.set) 
vscrollbar.config(command=canvas.yview) 

hscrollbar = tkinter.Scrollbar(root,orient="horizontal") 
canvas.config(xscrollcommand=hscrollbar.set) 
hscrollbar.config(command=canvas.xview) 

hscrollbar.pack(side=tkinter.BOTTOM, fill=tkinter.X) 
vscrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y) 
canvas.pack(side=tkinter.LEFT, fill="both", expand=True) 

root.mainloop() 
関連する問題