我正在制作一个需要全屏工作的 wxPython 应用程序。我想使用 OS X Lion 中的新全屏模式。如何让全屏图标出现在右上角?
问问题
852 次
1 回答
2
在修复错误 #14357之前,没有直接的方法可以仅使用我知道的 wxPython 函数来执行此操作。
但是,您可以绕过 wxWidgets 并直接访问 Cocoa API 来做您需要的事情。请注意,您必须使用 wxMac/Cocoa 绑定(wxPython 2.9 或更高版本)。
这是使框架具有全屏功能所必需的代码:
# from http://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):
exit()
app = wx.App()
frame = Frame()
frame.Show()
app.MainLoop()
于 2012-09-08T05:41:42.437 回答