0

こんばんは/おはようございます

私は 1920x1080 のモニターでかなり詳細なプログラムに取り組んでいます。最大化したときにモニターに収まるようにすべてを設定しました。サイザーの設定方法に関連すると思われる問題がいくつかあります。

まず、画面の実際のサイズを縮小すると、ウィンドウの内容は縮小されず、右側から切り取られます。したがって、画面が小さいということは、コンテンツ サイズの半分ではなく、コンテンツの半分を意味します。

この問題は、解像度を調整するときにも引き継がれます。解像度が低いと、画面に実際に収まるコンテンツの約半分しか取得できません。この問題を解決するためにサイザーをどのようにセットアップすればよいかわかりません。そのため、現在サイザーを使用している方法を簡単に説明します。

import wx

class simpleapp_wx(wx.Frame):
    def __init__(self,parent,id,title):
        wx.Frame.__init__(self,parent,id,title,(-1,-1))
        self.parent = parent
        self.initialize()

    """ Create All of the pieces for the GUI """
    def initialize(self):
        sizer = wx.GridBagSizer()
        panel = wx.Panel(self)

        # Handles the creation of all of the buttons
        def make_button(text, starty, startx, height, width):
            button = wx.Button(self, -1, text)
            sizer.Add(button, (starty, startx), (height, width), wx.EXPAND)
            return button

        # Handles the c reation of all of the static text labels
        def make_label(text, starty, startx, height, width):
            self.label = wx.StaticText(self, -1, text, wx.DefaultPosition, wx.DefaultSize)
            sizer.Add(self.label, (starty, startx), (height, width), wx.EXPAND)
            return self.label

        # Create all of the labels for each slot and buttons
        for i in range(0, 4):
            # all the labels
            make_label('Voltage', 7, i*5, 1, 1)
            make_label('Current', 8, i*5, 1, 1)
            make_label('Power', 9, i*5, 1, 1)
            make_label('Rail 1', 6, (i*5)+1, 1, 1)
            make_label('Rail 2', 6, (i*5)+2, 1, 1)
            make_label('Rail 3', 6, (i*5)+3, 1, 1)
            make_label('Total Power', 6, (i*5)+4, 1, 1)
            make_label('Status:', 14, (i*5), 1, 1)
            # Global Rail commands for all 4 slots
            make_button("Margin Low", 1, (i*5)+2, 1, 1)
            make_button("Margin High", 1, (i*5)+3, 1, 1)
            make_button("Margin Off", 1, (i*5)+4, 1, 1)
            # Rail 1 for all 4 slots
            make_button("Margin High", 11, (i*5)+1, 1, 1)
            make_button("Margin Low", 12, (i*5)+1, 1, 1)
            make_button("Margin Off",  13, (i*5)+1, 1, 1)
            # Rail 2 for all 4 slots
            make_button("Margin High",  11, (i*5)+2, 1, 1)
            make_button("Margin Low", 12, (i*5)+2, 1, 1)
            make_button("Margin Off", 13, (i*5)+2, 1, 1)
            # Rail 3 for all 4 slots
            make_button("Margin High",  11, (i*5)+3, 1, 1)
            make_button("Margin Low",  12, (i*5)+3, 1, 1)
            make_button("Margin Off",  13, (i*5)+3, 1, 1)
            # Create the Configure buttons for each slot (only needs to run three times so needs if statement
            if i < 3:
                # Make the Configure buttons for Slot 1
                make_button("Configure",  10, i+1, 1 ,1)
                # Make the Configure buttons for Slot 2
                make_button("Configure",  10, i+6, 1, 1)
                # Make the Configure buttons for Slot 3
                make_button("Configure",  10, i+11, 1, 1)
                # Make the Configure buttons for Slot 4
                make_button("Configure",  10, i+16, 1, 1)

        self.SetSizerAndFit(sizer)
        self.SetSizeHints(-1,-1)
        self.Show(True)
        self.Maximize(True)

if __name__ == "__main__":
    app = wx.App()
    frame = simpleapp_wx(None,-1,'Add-in Card GUI')
    app.MainLoop()

私は読んでいて、gridbagsizer をパネルに配置することについてどこかで読んだので、それはうまくいくはずなので、変更したヘッダーとクローザーは次のとおりです。

    sizer = wx.GridBagSizer()
    panel = wx.Panel(self)

    panel.SetSizer(sizer)
    panel.Fit()
    self.Fit()
    self.Show(True)
    self.Maximize(True)

これも何も変わりませんでした。SetSizeHints を特定の解像度に設定しようとしましたが、それもうまくいきませんでした。

では、この問題の原因は何ですか? すべてのコンテンツに 1 つのサイザーを使用していることに何か関係があるような気がします。この場合、新しいサイザーを完全に再構築してコンテンツを分割することなく、これを修正する最も簡単な方法は何ですか?

4

1 に答える 1

0

sizer の列と行を拡張可能としてマークする必要があります。

...
for i in range(0, 20):
    sizer.AddGrowableCol(i, 1)
for i in range(0, 15):
    sizer.AddGrowableRow(i, 1)

self.SetSizerAndFit(sizer)
...

あなたの例で動作します。たくさんのウィジェットがあり、すべてのウィジェットのサイズが最小であるため、それほど小さくなりませんが、少なくとも少しは詰め込まれます。(利用可能な場合は、より多くのスペースを占有するように拡張します。)

少なくとも wxPython>=3 の場合、行または列が存在する場合にのみ、その行または列を拡張可能にするようにする必要があります。

于 2016-04-21T22:28:58.633 に答える