2010-12-12 13 views
1

スクロールされたTkinterのテキストボックスを作成して、最大のスペースをいっぱいにしたいと思います。私はそれが働いています...スクロールされたTkinterテキストボックスのサイズ変更

私はウィンドウを伸ばす何らかの理由で、テキストウィジェットは問題ありません。ただし、スクロールバーはx軸に1トンのパディングを取得します。

2番目の問題は、スクロールバーが画面の画面を縮小するときです。

誰でもこの2つのプログラムの解決策を知っていますか?

スニペット:あなたはfill='both'を使用しているため

self.Fr = Tkinter.Frame(self, width=self.Wi, height=self.He) 
    self.Fr.pack(side='right', fill='both', expand='yes') 


    self.Te = Tkinter.Text(self.Fr, font=self.Fo, fg=self.FG, bg=self.BG, 
          selectforeground=self.SFG, 
          selectbackground=self.SBG, 
          insertbackground=self.IBG, wrap='word', 
          undo=True, maxundo=100) 
    #self.Te.grid(column=0, row=0, sticky='NSEW') 
    self.Te.pack(side='left', fill='both', expand='yes') 


    self.Sc = Tkinter.Scrollbar(self.Fr, elementborderwidth=1) 
    #self.Sc.grid(column=1, row=0, sticky='NSEW') 
    self.Sc.pack(side='right', fill='both', expand='yes') 

    self.Te.configure(yscrollcommand=self.Sc.set) 
    self.Sc.configure(command=self.Te.yview) 

答えて

6

あなたのスクロールバーは、すべてのパディングを取得します。それは垂直スクロールバーですが、x軸に沿って余分なスペースを取るように頼んだので、スクロールバー自体が伸びて広いスクロールバーにならないため、パディングが発生します。縦方向のスクロールバーはY方向のみを埋めるように、横方向のスクロールバーはX方向を埋めるようにします。

スクロールバーの画面が消えるにつれ、説明は少し複雑ですが、単純な解決策があります。

問題はこれです:packで管理されているウィンドウを、内部のウィジェットよりも小さいポイントに縮小すると、ウィジェットのクリッピングが開始されます。これが動作する方法は、ウィジェットを順番に処理し、ウィンドウをレイアウトし、残りのウィジェットに残っているスペースを割り当てます。つまり、注文の早いウィジェットが残りのビジュアルスペースをすべて占有した場合、それ以降のウィジェットは表示されません。

上記の「注文」は、梱包リストの注文です。具体的には、アイテムがパックされた順序。したがって、テキストウィジェットをパックした後、スクロールバーTkが最初にテキストウィジェットをレイアウトし、残りのスペースはスクロールバーに割り当てられます。最初にスクロールバーをパックした場合、それはレイアウトされ、残りのスペースはテキストウィジェットに与えられます。

すべてが非常に複雑に聞こえますが、クールなことは、適切な順番で物を梱包すればすべて機能します。

大まかに言って、パックする最後のウィジェットがexpandがtrueに設定されているものであることを確認することです。これはあなたの "弾力のある"ウィジェットです。そうすることで、すべての固定サイズのウィジェットが最初に必要なスペースを占有し、あなたの「弾力のある」ウィジェットが残っているすべてのウィジェットを占めるようになります。

テキストウィジェットに要求された幅と高さを要求する別の解決策があります。これにより、パッカーが最初にスペースを割り当てたときには、わずかなスペースしか割り当てられません。したがって、ウィンドウが縮小されると、テキストウィジェットはその小さなサイズまで縮小されます。これは非常に実用的ではありません。なぜなら、パックの大きな特徴の1つは、すべてのウィジェットに自然なサイズを与えることができるということです(あるいは、ボタンやラベルの場合はコンテンツに基づいて自然なサイズを仮定します)作品。幅と高さを1に設定すると、最初のウィンドウ(明示的に大きなサイズに設定されていない限り)はかなり小さくなります。

この動作は、パックのマニュアルページにすべて記載されていますが、この動作を完全に理解するためには、これを非常に詳しく読む必要があります。

+0

うわー、それは本当に良い情報です。私は主に.gridと.placeメソッドで作業していました。そこで私は、.packメソッドがどのように働いていたかをあいまいに理解していました。これは確かに私の誤解を解消しました。 – rectangletangle

関連する問題