2012-09-08 43 views
1

我正在製作一個需要全屏工作的wxPython應用程序。我想使用OS X Lion中提供的新全屏模式。我怎樣才能讓全屏幕圖標出現在右上角?wxPython MacOS X Lion全屏模式

+0

你嘗試過什麼?快速谷歌搜索「wxpython全屏」顯示了幾種不同的選擇。 – acattle

+1

他特別想使用Lion的新全屏API。 wxWidgets還沒有這個功能。 – nneonneo

+0

@nneonneo這是可能的,但書面的問題並未顯示任何獨立的研究努力,這是違反社區準則。 – acattle

回答

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() 
+0

當在python 2.7.2的MountainLion 10.8.2上使用你的上述代碼時,我得到一個AttributeError:'NSHIObject'對象沒有屬性'窗口'的整個代碼和錯誤在這裏http://stackoverflow.com/questions/14068923/ wxpython-mac-os-x-fullscreen-work-around-error#comment19955401_14068923我懷疑我錯過了一些東西,因爲我看不到爲什麼代碼會產生錯誤(以及爲什麼它沒有窗口屬性) – Zimm3r

+0

I已經回答了它與碳或可可作爲後端的問題,請參閱問題的答案以獲取更多信息。 – Zimm3r