wxPython和StaticBox(布局)问题
最近我在下面的代码上遇到了一些问题,这让我困扰了很久。我不知道为什么会这样,唯一知道的是,Python代码在标记的那一行出现了段错误,而gdb(一个调试工具)提到了一些关于内存的事情。我是不是做错了什么,还是说这是个bug?我真的很想让这个代码正常工作,如果你能帮忙,我将非常感激。
C++代码:
static int win_width = 364;
static int win_height = 478;
netlist = new wxDialog(NULL, wxID_ANY, "Network List", wxDefaultPosition, wxSize(win_width-8, win_height-8), wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER);
wxBoxSizer *hszr = new wxBoxSizer(wxHORIZONTAL),
*vszr = new wxBoxSizer(wxVERTICAL), *vszr2 = new wxBoxSizer(wxVERTICAL);
wxStaticBoxSizer* sszr = new wxStaticBoxSizer(wxVERTICAL, netlist, "User Information");
wxFlexGridSizer* fgszr = new wxFlexGridSizer(2);
fgszr->Add(new wxStaticText(sszr->GetStaticBox(), wxID_ANY, "Nick Name: "));
Python代码:
win_width = 364
win_height = 478
netlist = wx.Dialog(None, wx.ID_ANY, "Network List", wx.DefaultPosition, wx.Size(win_width-8, win_height-8), wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
hszr = wx.BoxSizer(wx.HORIZONTAL)
vszr = wx.BoxSizer(wx.VERTICAL)
vszr2 = wx.BoxSizer(wx.VERTICAL)
sszr = wx.StaticBoxSizer(wx.StaticBox(netlist, wx.ID_ANY, "User Information"), orient=wx.VERTICAL)
fgszr = wx.FlexGridSizer(2)
fgszr.Add(wx.StaticText(sszr.GetStaticBox(), wx.ID_ANY, "Nick Name: ")) # Segmentation Fault
1 个回答
0
在Python这边,Add
方法有以下几个参数:
Add(self, item, int proportion=0, int flag=0, int border=0, userData=None)
proportion
不是一个ID(但因为它们都是整数,所以这点不会出错),而flag
也不是一个字符串。
跟C++版本相比,能正常工作的代码行是:
fgszr.Add(wx.StaticText(sszr.GetStaticBox(), wx.ID_ANY, "Nick Name: "))
更新:
以下代码在使用wxPython 2.9.1.1的Windows系统上成功执行。
import wx
app = wx.PySimpleApp()
win_width = 364
win_height = 478
netlist = wx.Dialog(None, wx.ID_ANY, "Network List", wx.DefaultPosition, wx.Size(win_width-8, win_height-8), wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER)
hszr = wx.BoxSizer(wx.HORIZONTAL)
vszr = wx.BoxSizer(wx.VERTICAL)
vszr2 = wx.BoxSizer(wx.VERTICAL)
sszr = wx.StaticBoxSizer(wx.StaticBox(netlist, wx.ID_ANY, "User Information"), orient=wx.VERTICAL)
fgszr = wx.FlexGridSizer(2)
fgszr.Add(wx.StaticText(sszr.GetStaticBox(), wx.ID_ANY, "Nick Name: ")) # Segmentation Fault
netlist.ShowModal()