0

このstackoverflow question wxPython MacOS X Lionフルスクリーンモードからの回答のコードを使用して、wxPythonアプリのフルスクリーンサポートを取得しようとしていました

私のエラー

Traceback (most recent call last):
  File "test_mac_fullscreen.py", line 36, in <module>
    frame = Frame()
  File "test_mac_fullscreen.py", line 29, in __init__
    SetFullScreenCapable(self)
  File "test_mac_fullscreen.py", line 16, in SetFullScreenCapable
    window = frameobj.window()
AttributeError: 'NSHIObject' object has no attribute 'window'

マイ コード (上記のリンクからコピーして 1 つのファイルに貼り付けただけです)

# from https://stackoverflow.com/questions/12328143/getting-pyobjc-object-from-integer-id
import ctypes, objc
_objc = ctypes.PyDLL(objc._objc.__file__)

# PyObject *PyObjCObject_New(id objc_object, int flags, int retain)
_objc.PyObjCObject_New.restype = ctypes.py_object
_objc.PyObjCObject_New.argtypes = [ctypes.c_void_p, ctypes.c_int, ctypes.c_int]

def objc_object(id):
    return _objc.PyObjCObject_New(id, 0, 1)

def SetFullScreenCapable(frame):
    frameobj = objc_object(frame.GetHandle())

    NSWindowCollectionBehaviorFullScreenPrimary = 1<<7
    window = frameobj.window()
    newBehavior = window.collectionBehavior() | NSWindowCollectionBehaviorFullScreenPrimary
    window.setCollectionBehavior_(newBehavior)

import wxversion
wxversion.select('2-osx_cocoa') # require Cocoa version of wxWidgets
import wx

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        self.Bind(wx.EVT_CLOSE, self.OnClose)
        wx.Button(self, label="Hello!") # test button to demonstrate full-screen resizing
        SetFullScreenCapable(self)

    def OnClose(self, event):
        print "Closing"
        exit()
if __name__ == "__main__":
    app = wx.App(False)
    frame = Frame()
    frame.Show()
    app.MainLoop()
    print "running app loop"
4

1 に答える 1

1

これはかなり遅いですが、最近これを見て、突然クリックしました。

エラーに気付いた場合は、クラス NSHIObject (HI は Human Interface の略だと推測しています) を示しています。これは、wxPython が使用するバックエンド、古風な Carbon (この場合のように)、または更新された Cocoa に関係しています。以前のバージョンでは Carbon のみが利用可能でしたが、2.9.5 (IIRC) では Cocoa が利用可能です (Cocoa または Carbon で 3.0 に移行したと思います)。ココアバージョンで再インストールするだけで機能します。

于 2014-01-19T16:29:36.753 に答える