質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.61%

Python - wxPythonのフルスクリーンモードがおかしい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 65

HaruruYaki

score 15

実現したいこと

全画面表示をするために、styleにwx.MAXIMIZEを入力したのですが、うまく表示されません。
こうなった
右上になんか一部表示されてる感じで、後は灰色で何もありません。

ソースコード

import wx
class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"a",style=wx.MAXIMIZE)
        p = wx.Panel(self,-1)
        l = wx.StaticText(p,-1,"あいうえお")
app = wx.App(False)
f = MyFrame()
f.Show(True)
app.MainLoop()

環境

Windows10
Python3.8
64bit

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ウィンドウのスタイルは「ビットフラグ」になっているので、
通常はデフォルトのスタイル 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() メソッドを使って最大化する場合は、
小ウィジェットにもサイズ変更が通達される為、正常に表示されます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/11/22 05:46

    いつも回答ありがとうございます^^
    style=MAXIMIZEを指定すると、サイズ変更が子ウィジェットに通知されないのですね。
    分かりやすい説明ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る