こんばんは/おはようございます
私は 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 つのサイザーを使用していることに何か関係があるような気がします。この場合、新しいサイザーを完全に再構築してコンテンツを分割することなく、これを修正する最も簡単な方法は何ですか?