2017-07-07 3 views
2

私はTkinter GUIを使っています。ウィンドウサイジングと位置制御を別のクラスに追加したいと思います。 私の構造はそうのようなものです:クラスを使って別のクラスのパラメータを設定する - Python

class MainApp(tk.Tk): 

    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     container = tk.Frame(self) 
     container.pack(side="top", fill="both", expand=True) 
     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 
     self.winsize= WinSize(container, 700, 500, 650, 450, True, True) 

私はWinSizeminsizeresizeable WinSizeクラスのメインアプリケーションのジオメトリを設定するだけでなく、処理したいです。

class WinSize: 

    def __init__(self, container, width, height, minx, miny, sizeablex, sizeabley): 
     self.container = container 
     self.width = width 
     self.height = height 
     self.minx = minx 
     self.miny = miny 
     self.sizeablex = sizeablex 
     self.sizeabley = sizeabley 
     self.ws = self.container.winfo_screenwidth() 
     self.hs = self.container.winfo_screenheight() 
     self.xpos = (self.ws/2) - (self.width/2) 
     self.ypos = (self.hs/2) - (self.height/2) 

は私が広範囲に検索し、その特定のインスタンスおよび/またはフレームのために WinSizeクラスに実装されたものを取得する方法には何の解決策/指導を見出されていません。 同じクラスを使用して、他の情報を表示するポップアップメッセージ/フレームにサイズやその他の属性を設定したいと考えています。 メインGUIクラスは@Bryanオークリーの有名な例から取られる: https://stackoverflow.com/a/7557028/7703610

私は私のWinSizeクラスで再びのTkを継承し、その特定のインスタンスに適用することなく、Tkのからgeometryminsizeresizeableを呼び出すにはどうすればよいですか?

答えて

1

2つの解決策があります。コンテナの代わりにウィンドウをWinSize()に渡すことも、winfo_toplevelメソッドを使用して特定のウィジェットのウィンドウを取得することもできます。

最初のソリューションは、次のようになります。

class MainApp(tk.Tk): 

    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     ... 
     self.winsize= WinSize(self, 700, 500, 650, 450, True, True) 

class WinSize: 

    def __init__(self, window, width, height, minx, miny, sizeablex, sizeabley): 
     self.window = window 
     ... 
     self.window.geometry("%d%d+%d+%d" % (width, height, minx, miny)) 
     ... 

第2の解決策は、メインのアプリを変更する必要はありません。 WinSizeに以下を追加してください:

class WinSize: 
    def __init__(...): 
     ... 
     window = self.container.winfo_toplevel() 
     self.window.geometry("%d%d+%d+%d" % (width, height, minx, miny)) 
+0

ありがとう@ブライアンオークリー。どのように簡単にあなたのソリューションを作るのが大好きです。あなたが一連のビデオチュートリアルを行い、残りの人たちに適切に教えて欲しいです。簡単な質問...最初の例で 'self'が' window'変数に渡されましたか? –

関連する問題