Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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
Python SDL2调整大小事件转到错误线程?_Python_Sdl 2_Pysdl2 - Fatal编程技术网

Python SDL2调整大小事件转到错误线程?

Python SDL2调整大小事件转到错误线程?,python,sdl-2,pysdl2,Python,Sdl 2,Pysdl2,我使用Python3.5中的SDL2,我有2个线程,每个线程都有自己的OpenGl窗口 绘图进展顺利,所有鼠标和键盘事件都到达正确的线程。 只有当我调整其中一个窗口的大小时,调整大小事件才会转到错误的窗口 以下是我的部分代码: def pollEvent (self): event = s2.SDL_Event () if s2.SDL_PollEvent (ct.byref (event)): if event.type == s2.SDL_QUIT:

我使用Python3.5中的SDL2,我有2个线程,每个线程都有自己的OpenGl窗口

绘图进展顺利,所有鼠标和键盘事件都到达正确的线程。 只有当我调整其中一个窗口的大小时,调整大小事件才会转到错误的窗口

以下是我的部分代码:

def pollEvent (self):
    event = s2.SDL_Event ()
    if s2.SDL_PollEvent (ct.byref (event)):
        if event.type == s2.SDL_QUIT:
            self.running = False
        elif event.type == s2.SDL_WINDOWEVENT:
            if event.window.event == s2.SDL_WINDOWEVENT_RESIZED:
                print (111, self.name, 222)
                self.event = resizeEvent
                self.width = event.window.data1
                self.height = event.window.data2
                self.reshape ()
            elif event.window.event == s2.SDL_WINDOWEVENT_CLOSE:
                self.running = False
            self.renderDisplayList ()
        elif event.type == s2.SDL_MOUSEBUTTONDOWN:
            print (222, self.name, 333)
SDL_MOUSEBUTTONDOWN会转到正确的窗口,打印正确的名称,但调整大小的SDL_WINDOWEVENT_会转到错误的窗口,打印错误的名称

有人知道这是什么原因吗?
每个SDL窗口只能从它自己的线程访问。

SDL只生成一个事件队列。事件队列基本上是线程安全的,但在逻辑上很难在多个线程中使用它。最好只在一个线程中读取事件,并通过其他方式向其他线程发送通知


对于窗口事件,它们包含
windowID
字段。您可以使用
SDL\u GetWindowID
调用获取窗口的ID。

SDL只生成一个事件队列。事件队列基本上是线程安全的,但在逻辑上很难在多个线程中使用它。最好只在一个线程中读取事件,并通过其他方式向其他线程发送通知


对于窗口事件,它们包含
windowID
字段。您可以使用
SDL\u GetWindowID
调用获取窗口的ID。

只有一个事件队列。窗口可以由
事件.Window.windowID
确定。这很有帮助,谢谢!如果你将你的评论提升为一个答案,我可以相信你。只有一个事件队列。窗口可以由
事件.Window.windowID
确定。这很有帮助,谢谢!如果你把你的评论提升到一个答案,我可以相信你。