2016-04-13 14 views
0

おはよう/おはよう、wxpythonアプリケーションが低解像度で画面外に出る

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

+0

問題を示す小さな実行可能な例を作成できますか? –

+0

小さな実例を掲載しました。しかし、インデントについては申し訳ありませんが、私は私の人生のためにそれが正しいようにすることはできませんでした。それは物理的にはスタック上で正しく見えますが、何らかの理由でgeditにコピーしているときにはそれが壊れてしまいますので、注意してください。この例は上記の最初のテキストボックスにあり、私の古いものに置き換えられています。 –

+1

どのように小さなスペースで動作させるかはわかりませんが、 'scrolledpanel'を使うことができます。 'panel = wx.lib.scrolledpanel.ScrolledPanel(self)panel.SetupScrolling()' –

答えて

0

あなたが成長可能とサイザーの列と行をマークする必要があります:あなたの例で

... 
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の場合は、行または列が存在する場合にのみ拡張可能にするようにする必要があります。

関連する問題