Я хотел бы понять причину сбоя, которую я вижу с событиями wx Python и Quartz в macOS Catalina и python 3.8.1. Вот минимальный python скрипт
import Quartz
import threading
import time
import wx
def press_key():
time.sleep(10)
Quartz.CGEventPost(Quartz.kCGHIDEventTap, Quartz.CGEventCreateKeyboardEvent(None, 6, True))
Quartz.CGEventPost(Quartz.kCGHIDEventTap, Quartz.CGEventCreateKeyboardEvent(None, 6, False))
class MainFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
worker = threading.Thread(target=press_key)
worker.start()
self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
self.Show(True)
app = wx.App(False)
frame = MainFrame(None, 'Small editor')
app.MainLoop()
Здесь wx Python событие l oop выполняется в основном потоке, а отдельный поток публикует сообщения Quartz CGEvents. При публикации CGEvent происходит сбой сценария с ошибкой недопустимой инструкции.
Illegal instruction: 4
Может ли кто-нибудь помочь мне понять причину ошибки? Более простой тест, где CGEvents публикуются в отдельном потоке, но wx.App.MainL oop () не выполняется, работает без ошибок.