Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
Python3/PyGObject:试图打包GTK.Box()会导致segfault_Python_User Interface_Segmentation Fault_Gtk_Pygobject - Fatal编程技术网

Python3/PyGObject:试图打包GTK.Box()会导致segfault

Python3/PyGObject:试图打包GTK.Box()会导致segfault,python,user-interface,segmentation-fault,gtk,pygobject,Python,User Interface,Segmentation Fault,Gtk,Pygobject,在Python3中运行以下代码给了我一个错误。这是一只虫子,还是我在做我不该做的事 我已经用调试打印语句(在TabbedWebkitBrowser类中)标记了segfault发生的位置: 我在gdb中运行了这个程序,并在SEGDB故障后进行了回溯。以下是我得到的: Starting program: /usr/bin/python3 UI.py [Thread debugging using libthread_db enabled] Using host libthread_db librar

在Python3中运行以下代码给了我一个错误。这是一只虫子,还是我在做我不该做的事

我已经用调试打印语句(在TabbedWebkitBrowser类中)标记了segfault发生的位置:

我在gdb中运行了这个程序,并在SEGDB故障后进行了回溯。以下是我得到的:

Starting program: /usr/bin/python3 UI.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
DEBUG: This .pack_start() is where the segfault is occuring ...
[New Thread 0x7fff97fff700 (LWP 14066)]
[New Thread 0x7fff9ce91700 (LWP 14065)]
[New Thread 0x7fff9e3d0700 (LWP 14064)]
[New Thread 0x7fffdebd3700 (LWP 14063)]
[New Thread 0x7fffed4d4700 (LWP 14062)]

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff44400bd in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
(gdb) bt
#0  0x00007ffff44400bd in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#1  0x00007ffff5d6ed90 in ffi_call_unix64 () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#2  0x00007ffff5d6e7f8 in ffi_call () from /usr/lib/x86_64-linux-gnu/libffi.so.6
#3  0x00007ffff6732ae4 in ?? () from /usr/lib/python3/dist-packages/gi/_gi.cpython-34m-x86_64-linux-gnu.so
#4  0x00007ffff67343e8 in ?? () from /usr/lib/python3/dist-packages/gi/_gi.cpython-34m-x86_64-linux-gnu.so
#5  0x00007ffff672859e in ?? () from /usr/lib/python3/dist-packages/gi/_gi.cpython-34m-x86_64-linux-gnu.so
#6  0x0000000000504127 in PyEval_EvalFrameEx ()
#7  0x00000000004c9fb5 in ?? ()
#8  0x000000000050ea0b in ?? ()
#9  0x0000000000564024 in ?? ()
#10 0x00000000005997ea in ?? ()
#11 0x0000000000504127 in PyEval_EvalFrameEx ()
#12 0x00000000004c9fb5 in ?? ()
#13 0x000000000050ea0b in ?? ()
#14 0x0000000000564024 in ?? ()
#15 0x00000000005997ea in ?? ()
#16 0x0000000000504127 in PyEval_EvalFrameEx ()
#17 0x00000000004c9fb5 in ?? ()
#18 0x000000000050ea0b in ?? ()
#19 0x0000000000564024 in ?? ()
#20 0x00000000005997ea in ?? ()
#21 0x0000000000504127 in PyEval_EvalFrameEx ()
#22 0x00000000005a9cb5 in PyEval_EvalCodeEx ()
#23 0x00000000005e7105 in ?? ()
#24 0x00000000005e71c9 in PyRun_FileExFlags ()
#25 0x00000000005e79aa in PyRun_SimpleFileExFlags ()
#26 0x00000000005fb69d in Py_Main ()
#27 0x00000000004c2e7f in main ()

有什么想法吗?

您忘了调用
选项卡WebKitBrowser
类的父类的
\uuuu init\uuuuu
方法。因此,这应该是可行的:

class TabbedWebkitBrowser(Gtk.VBox):
    def __init__(self):
        super().__init__()  # or Gtk.Vbox.__init__(self) if you like
        self.navbar = Gtk.HBox()
        ...

啊,谢谢!就这样。你知道为什么这样做会导致segfault而不是抛出某种异常/错误吗?对不起,我不知道。可能是因为gtk+是用C编写的,只有python绑定,而且绑定缺少一些检查。这是有道理的。我可能会继续把它作为一个小错误归档,因为我猜这些检查应该是存在的,而不是导致SEGFULT。
class TabbedWebkitBrowser(Gtk.VBox):
    def __init__(self):
        super().__init__()  # or Gtk.Vbox.__init__(self) if you like
        self.navbar = Gtk.HBox()
        ...