【问题标题】:wxPython MacOS X Lion full screen modewxPython MacOS X Lion 全屏模式
【发布时间】:2012-09-08 02:47:41
【问题描述】:

我正在制作一个需要全屏运行的 wxPython 应用程序。我想使用 OS X Lion 中的新全屏模式。如何让全屏图标出现在右上角?

【问题讨论】:

  • 你试过什么?快速谷歌搜索“wxpython 全屏”显示了几个不同的选项。
  • 他特别想使用 Lion 的新全屏 API。 wxWidgets 还没有这个功能。
  • @nneonneo 可能是这样,但所写的问题没有显示任何独立的研究工作,这违反了社区准则。
  • 我也不知道该怎么做...这是 OS X 的一个新功能,除了 Apple 自己的支持之外,还没有很多 GUI 框架支持它。

标签: python macos wxpython osx-lion


【解决方案1】:

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

【讨论】:

  • 当在 MountainLion 10.8.2 和 python 2.7.2 上使用上述代码时,我得到一个 AttributeError: 'NSHIObject' object has no attribute 'window' 整个代码和错误在这里stackoverflow.com/questions/14068923/… 我怀疑我遗漏了一些东西,因为我不明白为什么代码会产生错误(以及为什么它没有窗口属性)
  • 我已经回答了与 Carbon 或 Cocoa 作为后端有关的问题,请参阅问题的答案以获取更多信息。
猜你喜欢
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 2020-02-29
  • 2011-12-16
  • 2011-10-31
  • 2017-04-19
  • 1970-01-01
  • 2012-04-23
相关资源
最近更新 更多