Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wxPython将按钮居中,应用程序在关闭时崩溃_Python_Wxpython - Fatal编程技术网

wxPython将按钮居中,应用程序在关闭时崩溃

wxPython将按钮居中,应用程序在关闭时崩溃,python,wxpython,Python,Wxpython,有人能帮我一石二鸟吗?我试着在我的wxPanel中居中放置一个按钮有一段时间了,但似乎无法找到它。我尝试了不同的属性,例如wx.CENTER和wx.ALIGN\u CENTER和wx.ALIGN\u CENTER\u HORIZONTAL,但似乎无法让按钮移动到面板的中心。我试图居中的按钮是add\u unit\u窗格中的set\u按钮 另外,当我单击X按钮关闭程序时,程序崩溃。我是否没有正确处理关闭事件 有人能指出我错在哪里吗 import wx class Example(wx.Frame

有人能帮我一石二鸟吗?我试着在我的wxPanel中居中放置一个按钮有一段时间了,但似乎无法找到它。我尝试了不同的属性,例如
wx.CENTER
wx.ALIGN\u CENTER
wx.ALIGN\u CENTER\u HORIZONTAL
,但似乎无法让按钮移动到面板的中心。我试图居中的按钮是
add\u unit\u窗格中的
set\u按钮

另外,当我单击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()
谢谢,,
Adam

更改添加hbox3的行

unit_panel_sizer.Add(hbox3,0,wx.CENTER)
也要点评出来

unit_panel.SetSizerAndFit(unit_panel_sizer) 

这将修复您的崩溃

完美,谢谢!知道为什么只在关闭时才执行
unit\u panel.setSizerAndIt(unit\u panel\u sizer)
操作会使其崩溃吗?不知道这样做时它会崩溃,可能是因为StaticBoxSizer在实例化时被分配了其主控项或其他内容