【问题标题】:wxPython and StaticBox(Sizer) issuewxPython 和 StaticBox(Sizer) 问题
【发布时间】:2010-10-28 02:48:19
【问题描述】:

最近我遇到了下面显示的代码的问题,它一直困扰着我一段时间。我不知道为什么会这样,我唯一知道的是 python 代码在指出的行上提出了一个段错误,而 gdb 提出了一些关于内存的问题。我做错了什么还是这是一个错误?我真的很想让这个工作,所以如果你能提供帮助,我将不胜感激。

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

【问题讨论】:

    标签: c++ python wxpython wxwidgets


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复!很抱歉,您上面提到的最初是代码的一部分,并且是导致段错误的原因。代码已更新,但问题依然存在。
    • 我在回复之前测试了代码,工作正常。我在 Windows 上使用 wxPython 2.9.1.1。尝试使用 wxFormBuilder 设计您的表单,看看它生成的代码是否有效。
    • 我会试试的,看起来不错的应用程序!可悲的是,我将无法再开始 4.5 小时。在此之前,是否可以发布您用于测试的文件?您提到您使用的是 Windows,而我使用的是 Arch Linux。不知道这是否意味着任何不同。
    • 区别在于底层的gui库。虽然您可能偶然发现了一些 wxGTK 错误,但不太可能,但您在此处展示的用例太常见了。
    • 可悲的是,它仍然存在段错误,我无法安装您拥有的版本,因为 python 给了我一个错误。这将是一段时间......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-09
    • 2013-08-01
    相关资源
    最近更新 更多