2017-03-20 22 views
0

ここで私はサブフレームクラスを定義し、そのようなフレームインスタンスをそのコンテナに使用し、そのようなウィジェットに固定サイズを設定したいと考えています。常に'MainFrame' object has no attribute 'resizable'エラーが発生します。これはテストデモですが、どんな助けにも感謝します。tkinter固定ウィジェットの固定幅と高さ

from tkinter import * 

class MainFrame(Frame): 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.createWidget() 

    def createWidget(self): 
     self.innerFrame = Frame(self) 
     self.innerFrame.master.resizable(width=False, height=False) # ====> this place raise error:'MainFrame' object has no attribute 'resizable' 
     self.innerFrame.master.maxsize(width=300, height=400) 
     for l in range(100): 
      label = Label(self.innerFrame, text="label" + str(l)) 
      label.pack() 
     self.innerFrame.pack() 

if __name__ == '__main__': 
    top = Tk() 
    top.resizable(width=False, height=False) 
    top.minsize(width=400, height=600) 
    app = MainFrame(top) 
    app.pack() 
    app.mainloop() 
+0

内部フレームを固定サイズにするのは良い考えのようではありません。あなたは余分なスペースの束か内部ウィジェットのいくつかを隠すことで終わるかもしれません。異なる解像度または異なるデフォルトフォントを持つシステムでプログラムを実行するとどうなりますか?ウィジェットを特定のサイズにすることは、ほとんど常に悪い考えです。 Tkinterは正しいサイズを選ぶのに本当に良いです。 –

+0

@BryanOakley拡張エリアは拡張され、そのようなフレームの下の他のウィジェットをカバーします。より良い解決策は、ラベルフレームを追加してスクロールバーを設定することですが、フレームウィジェットでtkinterが少し短く見えます一時的に固定値を指定します。 – Crabime

答えて

2

.resizable().maxsize()のみTkのルートウィンドウに適用され、あなたがToplevel()で作成し、他のウィンドウ。フレームを固定サイズにするには、作成時にwidth=height=オプションを指定し、その上に.pack_propagate(False)または.grid_propagate(False)(子ウィジェット用に使用するジオメトリマネージャに一致するもの)のいずれかを呼び出します。

+0

'Toplevel()'ウィジェットは作成時に '.pack_propagate(False)'しか使用できません。 – Crabime

関連する問題