wxPython Mac OS X全屏解决错误
我试图使用这个问题答案中的代码获得wxPython应用程序的全屏支持 我的错误wxPython Mac OS X全屏解决错误,python,objective-c,macos,wxpython,pyobjc,Python,Objective C,Macos,Wxpython,Pyobjc,我试图使用这个问题答案中的代码获得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 "te
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'
回溯(最近一次呼叫最后一次):
文件“test_mac_fullscreen.py”,第36行,在
frame=frame()
文件“test_mac_fullscreen.py”,第29行,在初始化中__
可设置全屏(自)
文件“test_mac_fullscreen.py”,第16行,setfullscreenable
window=frameobj.window()
AttributeError:“NSHIObject”对象没有属性“window”
我的代码(刚刚从上面的链接复制并粘贴到一个文件中)
#来自https://stackoverflow.com/questions/12328143/getting-pyobjc-object-from-integer-id
导入ctypes,objc
_objc=ctypes.PyDLL(objc.\u objc.\uuuuuu文件)
#PyObject*PyObjCObject_新建(id objc_对象,int标志,int保留)
_objc.PyObjCObject_New.restype=ctypes.py_对象
_objc.PyObjCObject_New.argtypes=[ctypes.c_void_p,ctypes.c_int,ctypes.c_int]
def objc_对象(id):
return _objc.pyobjc object_New(id,0,1)
def SETFULLSCREENABLE(帧):
frameobj=objc_对象(frame.GetHandle())
NSWindowCollectionBehaviorFullScreenPrimary=1虽然这已经很晚了,但最近看到它时,它突然点击了
如果您在错误中注意到它声明了一个类NSHIObject(嗨,我猜它代表人机界面),那么这与wxPython使用的后端、古旧的Carbon(在本例中)或更新的Cocoa有关。在早期版本中,只有碳元素可用,但在2.9.5(IIRC)版本中,可可元素可用(我相信,在使用可可元素或碳元素时,它会有意义地移动到3.0)。只需使用cocoa版本重新安装,它就可以工作。尝试在链接问题中对该特定答案进行评论,您可能会从引用代码的作者那里得到很好的响应。该代码对我来说没有任何错误。嗯,奇怪的是,您在运行Mountain Lion吗?
# 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"