【问题标题】:pygame event.get Fatal Python error: PyEval_RestoreThread: NULL tstatepygame event.get 致命的 Python 错误:PyEval_RestoreThread: NULL tstate
【发布时间】:2019-10-28 21:48:42
【问题描述】:

我有一个带有 Tkinter 和 Pygame 窗口的 python 程序,并且正在使用 win32gui 做一些事情,这可能是导致错误的原因

Fatal Python error: PyEval_RestoreThread: NULL tstate

Current thread 0x00004344 (most recent call first):
  File "C:\Users\stemb\Documents\programing\python\programs\img editor\FIND_PARTS.py", line 489 in handleEvents
  File "C:\Users\stemb\Documents\programing\python\programs\img editor\FIND_PARTS.py", line 456 in main
  File "C:\Users\stemb\Documents\programing\python\programs\img editor\FIND_PARTS.py", line 554 in main
  File "C:/Users/stemb/Documents/programing/python/programs/img editor/__init__.py", line 79 in main
  File "C:/Users/stemb/Documents/programing/python/programs/img editor/__init__.py", line 86 in <module>

当我运行for event in pygame.event.get():

我正在运行 Windows 10 并使用 PyCharm

编辑:

经过更多测试,我发现这是由&lt;Configure&gt; 绑定tkinter 窗口引起的,因此我可以将其保留在pygame 窗口旁边。

【问题讨论】:

  • 为什么首先要同时使用 pygame 和 tkinter?
  • @unlut 我将它们放在 2 个单独的窗口中,因为我需要不同的东西,例如在 tkinter 中很容易做到的列表框和在 pygame 中更容易使用的带有绘制内容的图像跨度>
  • 也许您可以将这些作为单独的进程运行?

标签: python pygame fatal-error


【解决方案1】:

我在尝试让 Pygame 和 tkinter 玩得很好时遇到了同样的问题,在尝试打开 tkinter 文件对话框后调用pygame.event.get() 时得到Fatal Python error: PyEval_RestoreThread: NULL tstate。

我通过将pump=False 传递给pygame.event.get() 并在事件循环结束时手动调用pygame.event.pump() 来解决它,如下所示:

for event in pygame.event.get(pump=False):

    # Process events here

    pygame.event.pump()

我的猜测是 Pygame 和 tkinter 可以争夺内部事件,并且当 tkinter 正在做一些阻塞主循环的事情(比如打开文件对话框)时会处理。

【讨论】:

    猜你喜欢
    • 2022-10-14
    • 2011-11-18
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    相关资源
    最近更新 更多