2016-05-30 14 views
2

このコードは、ウィンドウ内に2つのキャンバスを作成します。しかし、Pythonはそれらを互いに張り合わせるのではなく、それらの間にギャップを置きます。このギャップは、ウィンドウのサイズを変更するとさらに大きくなります。2つのキャンバスの間の隙間を避ける方法

from Tkinter import * 

class App: 
    def __init__(self,master): 

     master.title('Python Canvas Testing') 
     master.minsize(width=550, height=450) 

     settingscanvas = Canvas(master,bg="yellow") 
     settingscanvas.pack(side='top',anchor='nw',expand=True,fill='x') 

     datacanvas = Canvas(master,bd=1,bg="green") 
     datacanvas.pack(side='top',anchor='nw',expand=True,fill='both') 

     for r in xrange(15): 
      Label(settingscanvas, text='Label'+str(r+1)).grid() 

     Label(datacanvas, text='Label 2').grid() 

## create main program window 
window = Tk() 

## create window container 
app = App(window) 

mainloop() 

ギャップがないように2つのキャンバスを一緒に貼り付けることができないオプションがありますか?

+0

@ TadhgMcDonald-Jensen: 'pack'と' grid'を混在させることは可能ではありませんが、良い方法です。あなたがそれを行うことができない唯一の時間は、共通の親を共有する2つ以上のウィジェットを使用することです。この場合、ウィジェットには異なる親があります。 –

+0

私はそれらが異なる親ウィジェットにあったことに気付かず、元のコメントを完全に取り消しました。 –

答えて

1

どちらのウィジェットもexpandTrueに設定されているため、それぞれに余分なスペースが割り当てられています。余分なスペースを1つだけにしたい場合は、もう1つはexpandFalseに設定します。それらの両方に余分なスペースを与えたい場合は、fillにy方向を含めるように設定してください。

+0

ありがとう、とても助かりました。 私のアプリケーションでは、最初のキャンバスは内容が変わらないので、expand = Falseに設定して、今度は私の望む動作をすることができます。 私は、 "expand = True"が "fill"に必要であるという印象を受けました。これは明らかにそうではありません。 –

1

私はパックで動作させる方法がわかりません。しかし、あなたはグリッドマネージャーでそれを行うことができます。グリッドで拡張可能なウィジェットを使用するには、2つの設定が必要です。第1に、 "sticky"パラメータは、グリッド内のセル内のスペースをウィジェットが埋めることを可能にします( 'ew'は水平方向に、 'nsew'は両方向に塗りつぶします)。第2に、列および/または行の重みパラメータは、陽性であれば消耗品にする。

from tkinter import * 

class App: 
    def __init__(self,master): 
     master.title('Python Canvas Testing') 
     master.minsize(width=550, height=450) 

     settingscanvas = Canvas(master,bg="yellow") 
     settingscanvas.grid(sticky='ew') 

     datacanvas = Canvas(master,bd=1,bg="green") 
     datacanvas.grid(sticky='nsew') 

     master.grid_rowconfigure(1,weight=1) 
     master.grid_columnconfigure(0, weight=1) 

     for r in range(15): 
      Label(settingscanvas, text='Label'+str(r+1)).grid() 

     Label(datacanvas, text='Label 2').grid() 

## create main program window 
window = Tk() 

## create window container 
app = App(window) 

mainloop() 
+0

何らかの理由で私がアプリケーションに「pack」を入れて、必要な場所にすべてのウィジェットを取得したため、私はあなたの例には行きませんでした。それにもかかわらず、このソリューションは私の例でここで定義した要件を満たしています。 –

関連する問題