pythongtk3与pyOpenGL的分割错误

2024-03-29 00:37:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我将Python与gtk3和来自https://github.com/tdz/gtkglext的GTKGLExt fork结合使用,因此我可以使用gobject自省特性来使用Python中的gtk3。 我创造了一个Gtk图纸区域来画我的OpenGL资料。只要我只有这个小部件的一个实例,一切正常。在

但是,我使用一个Gtk笔记本在笔记本的不同页面中显示这个小部件的多个实例(每页一个小部件)。在

有时(以非确定性的方式)程序会因分段错误而崩溃。我使用gdb运行了一个stacktrace,找到了问题所在,调用了放在绘图末尾的“gtk_widget_end_gl”,实现并配置处理程序方法(当然,每个方法的开头都有一个gtk_widget_begin_gl)。在

以下是stacktrace的相关摘录:

0  0xb1170b58 in _gdk_x11_gl_context_impl_get_current () at gdkglcontext-x11.c:514
1  0xb116c094 in gdk_gl_context_get_current () at gdkglcontext.c:244
2  0xb116c0b4 in gdk_gl_context_release_current () at gdkglcontext.c:215
3  0xb4d04592 in gtk_widget_end_gl (widget=0xa175608, do_swap=0) at gtkglwidget.c:549

下面是我的realize方法的一个最小示例,其中问题发生在“widget”是Gtk图纸区域公司名称:

^{pr2}$

由于我几乎不知道为什么有时会出现这个问题(大约每5次创建一个新的widget),我想知道是否有人曾经经历过同样的问题,或者是否可以重现这个问题,或者帮助我找到解决方案。在

我需要说的是,我没有在这里手动创建OpenGL上下文,因为在提供的示例中,这似乎从来没有必要,我认为小部件可以自己完成这项工作。stacktrace意味着获取上下文似乎有问题。令我吃惊的是,这种情况只会偶尔发生。因此,如果有人能提示我如何解决这个问题,我会非常高兴,因为我不是一个有经验的C程序员。在


Tags: 方法ingtk部件contextcurrentwidgetat