2016-02-04 2 views
0

У меня проблема с wxPython. У меня есть рамка, и в этом фрейме у меня есть панель. На этой панели мне нужна другая панель фиксированного размера (100x100). Мой код ниже:размер панели в панели с использованием wxPython неверно

import wx 

class TestPanel(wx.Panel): 
    def __init__(self, *args, **kwargs): 
     wx.Panel.__init__(self, *args, **kwargs) 
     self.SetBackgroundColour(wx.RED) 
     self.SetSize((100, 100)) 


class ExampleFrame(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, parent) 

     self.panel = wx.Panel(self) 
     self.panel.SetMinSize((-1, -1)) 
     self.panel.SetBackgroundColour(wx.WHITE) 

     self.filesize = TestPanel(self.panel, -1) 

     hSizer = wx.BoxSizer(wx.HORIZONTAL) 
     hSizer.Add(self.filesize, 0, wx.CENTER) 

     vSizer = wx.BoxSizer(wx.VERTICAL) 
     vSizer.Add(hSizer, 1, wx.EXPAND) 
     self.panel.SetSizer(vSizer) 


app = wx.App(False) 
frame = ExampleFrame(None) 
frame.Show() 
app.MainLoop() 

Когда я запускаю программу, мой TestPanel виджет только 1x1 пикселей. Однако, когда я печатаю размер с помощью метода GetSize, он говорит, что размер 100x100. Почему в этом случае он отображается как красный блок 1x1?

Я использую WxPython 3.0.2.0 на OS X.

+0

Я не уверен, в чем ваша проблема. Когда я запускаю код на ubuntu 15.10 и python-wxgtk2.8 и python 2.7.8, код работает просто отлично –

+0

Это странно, так как если я запустил этот код, он отобразится как блок 1x1, а не 100x100. Я думаю, это связано с OS X ... – Devos50

+0

Это может быть причиной. Возможно, вы можете попробовать использовать функцию SizeHints вместо setMinSize для вашей белой панели. –

ответ

1

Я не уверен, почему SetSize() не работает, но вы можете просто передать размер конструктору. Это работало для меня в Windows 7 с помощью wxPython 3.0.2, где не было вызова SetSize.

import wx 

class TestPanel(wx.Panel): 
    def __init__(self, *args, **kwargs): 
     wx.Panel.__init__(self, size=(100, 100), *args) 
     self.SetBackgroundColour('red') 
     self.Layout() 


class ExampleFrame(wx.Frame): 
    def __init__(self, parent): 
     wx.Frame.__init__(self, parent) 

     self.panel = wx.Panel(self) 
     self.panel.SetMinSize((-1, -1)) 
     self.panel.SetBackgroundColour(wx.WHITE) 

     self.filesize = TestPanel(self.panel, -1) 

     hSizer = wx.BoxSizer(wx.HORIZONTAL) 
     hSizer.Add(self.filesize, 0, wx.CENTER) 

     vSizer = wx.BoxSizer(wx.VERTICAL) 
     vSizer.Add(hSizer, 1, wx.EXPAND) 
     self.panel.SetSizer(vSizer) 

import wx.lib.inspection 
app = wx.App(False) 
frame = ExampleFrame(None) 
frame.Show() 
wx.lib.inspection.InspectionTool().Show() 
app.MainLoop() 
+0

Спасибо. Это работает для меня. Мне все еще интересно, почему 'SetSize' не работает, однако ... – Devos50

+0

Я тоже. Вы можете спросить о группе wxPython Google. Они могли бы пролить свет на это. –