2012-08-02 102 views
0

有人能幫我一箭雙鵰殺死兩隻鳥嗎?我一直試圖將按鈕置於我的wxPanel中一段時間​​,似乎無法弄清楚。我嘗試過不同的屬性,例如wx.CENTERwx.ALIGN_CENTERwx.ALIGN_CENTER_HORIZONTAL,但似乎無法讓按鈕移動到面板的中心。我試圖集中的按鈕在add_unit_pane方法中爲set_buttonwxPython集中一個按鈕和應用程序崩潰關閉

此外,當我點擊X按鈕關閉程序時,程序崩潰。我沒有正確處理關閉事件嗎?

有人能指出我錯在哪裏嗎?

import wx 

class Example(wx.Frame): 

    def __init__(self, *args, **kw): 
     super(Example, self).__init__(*args, **kw) 
     self.init_ui() 

    def init_ui(self): 
     self.Bind(wx.EVT_CLOSE, self.on_close_window) 

     panel = wx.Panel(self) 
     panel_sizer = wx.BoxSizer(wx.VERTICAL) 
     panel_sizer.Add(self.add_unit_pane(panel, panel_sizer), 0, wx.EXPAND, border=5) 
     panel.SetSizerAndFit(panel_sizer) 

     self.Show() 

    def on_close_window(self, event): 
     self.Destroy() 

    def add_unit_pane(self, panel, panel_sizer): 
     """ Creates the Unit Measurement panel """ 
     unit_panel = wx.StaticBox(panel, -1, 'Unit of Measurement') 
     unit_panel_sizer = wx.StaticBoxSizer(unit_panel, wx.VERTICAL) 

     # Create horizontal row of widgets 1 
     hbox1 = wx.BoxSizer(wx.HORIZONTAL) 

     st1 = wx.StaticText(panel, label='UNIT:') 
     unit_choices = ['in (INCHES)', 
         'cm (CENTIMETERS)', 
         'mm (MILLIMETERS)' 
         ] 
     unit_cb = wx.ComboBox(panel, -1, '100%', 
            choices=unit_choices, 
            style=wx.CB_DROPDOWN|wx.CB_READONLY) 
     unit_cb.SetValue('mm (MILLIMETERS)') 

     hbox1.Add(st1) 
     hbox1.AddSpacer(5) 
     hbox1.Add(unit_cb) 

     # Create horizontal row of widgets 2 
     hbox2 = wx.BoxSizer(wx.HORIZONTAL) 

     st2 = wx.StaticText(panel, label='Pixels per selected unit:') 
     tc1 = wx.TextCtrl(panel) 

     hbox2.Add(st2) 
     hbox2.AddSpacer(5) 
     hbox2.Add(tc1) 

     # Create horizontal row of widgets 3 
     hbox3 = wx.BoxSizer(wx.HORIZONTAL) 
     set_button = wx.Button(panel, -1, 'Set') 
     hbox3.Add(set_button, 0, wx.CENTER) 

     # Add all other sizers to the main unit_panel_sizer 
     unit_panel_sizer.Add(hbox1) 
     unit_panel_sizer.AddSpacer(5) 
     unit_panel_sizer.Add(hbox2) 
     unit_panel_sizer.AddSpacer(5) 
     unit_panel_sizer.Add(hbox3) 

     # Fit all widgets to the sizer 
     unit_panel.SetSizerAndFit(unit_panel_sizer) 

     # Return the unit_panel_sizer 
     return unit_panel_sizer 

if __name__ == '__main__': 
    ex = wx.App() 
    Example(None, -1, "Centering Button", size=(250,150)) 
    ex.MainLoop() 

謝謝 亞當

回答

1

變化在其中添加行hbox3是

unit_panel_sizer.Add(hbox3,0,wx.CENTER) 

也註釋掉

unit_panel.SetSizerAndFit(unit_panel_sizer) 

應該解決您的崩潰

+0

見我編輯修復你的崩潰 – 2012-08-02 17:42:49

+0

完美,謝謝!任何想法爲什麼做'unit_panel.SetSizerAndFit(unit_panel_sizer)'只在關閉時崩潰它? – adchilds 2012-08-02 17:44:09

+0

不知道它應該會崩潰,當你這樣做可能是因爲StaticBoxSizers分配他們的主人或任何時候你instansiate他們 – 2012-08-02 17:48:01