質問: MyFrame() f.Show(True) app.MainLoop() ``` ### 環境 Windows10 Python3.8 64bit
回答: ウィンドウのスタイルは「ビットフラグ」になっているので、 通常はデフォルトのスタイル wx.DEFAULT_FRAME_STYLE と合わせて、 ビット演算で on/off を指定します。 2進数で表記すると解りやすいです。 https://wxpython.org/Phoenix/docs/html/wx.Frame.html > > wx.DEFAULT_FRAME_STYLE: Defined as wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN. > > > `style=wx.MAXIMIZE` では他のフラグが適応されてない状態になります。 フラグを追加するには、 `style=wx.DEFAULT_FRAME_STYLE|wx.MAXIMIZE` 因みに、MAZMIMIZE はフレーム「初期化時のサイズ」を指定するもので、 ドキュメントには GTK+/Window のみで有効と記載されてます。 解決策: ウィンドウを最大化するには・・・ * ウィンドウを最大化するには Maximizeメソッド、 * フルスクリーンにするには ShowFullScreenメソッドがあります。 レイアウトが期待通りに表示されてない問題については、最大化指定とは別で、 直接の原因は、Panel のサイズが未指定になっている為、 その中に置かれたテキストが見切れています。 Panelにサイズを指定するか、 BoxSizer 等のレイアウトを管理する部品を使って、 自動的にサイズ・レイアウトを調整するようにしましょう。 ``` # XXX: style=MAXIMIZE を指定してなくても、同様の現象を再現できます p = wx.Panel(self,-1) p2 = wx.Panel(p,-1) l = wx.StaticText(p2,-1,"あいうえお") ``` フレーム作成時の style=wx.MAXIMIZE 指定では、 初期化時(`__init__の時点`) のサイズ指定の為、 ウィジェット配置後にサイズ変更が各ウィジェットに通知されません。 Maximize() メソッドを使って最大化する場合は、 小ウィジェットにもサイズ変更が通達される為、正常に表示されます。