Проблема с wxPython и StaticBox (Sizer) - PullRequest
0 голосов
/ 28 октября 2010

Недавно у меня возникла проблема с кодом, показанным ниже, и это меня давно беспокоило.Я не знаю, почему это происходит, единственное, что я знаю, это то, что код python вызывает ошибку segf на отмеченной строке, а gdb - что-то о памяти.Я что-то не так делаю или это ошибка?Мне бы очень хотелось, чтобы это сработало, поэтому, если вы можете мне помочь, я буду очень признателен.

C ++ code:

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 code:

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 голосов
/ 28 октября 2010

На стороне Python метод Add имеет следующие аргументы:

Add(self, item, int proportion=0, int flag=0, int border=0, userData=None)

proportion не является идентификатором (но он проходит молча, потому что они оба целые), а flag не является строкой.

По сравнению с версией C ++ рабочая строка будет выглядеть так:

fgszr.Add(wx.StaticText(sszr.GetStaticBox(), wx.ID_ANY, "Nick Name: "))

UPDATE:

Следующий код успешно выполняется в Windows с помощью wxPython 2.9.1.1

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()
...