wxPython MacOS X Lion全屏模式

时间:2012-09-08 02:47:42

标签: python macos wxpython osx-lion

我正在制作一个需要全屏工作的wxPython应用程序。我想使用OS X Lion中新的全屏模式。如何在屏幕右上角显示全屏图标?

1 个答案:

答案 0 :(得分:2)

在修复bug #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()