0

我有一个基于 wxPython 的应用程序,我正在移植到 Mac OS X,因为我需要显示一些看起来像本机 mac 警报的警报,所以我为此使用 pyobjc

import Cocoa

import wx

app = wx.PySimpleApp()
frame = wx.Frame(None, title="mac alert test")
app.SetTopWindow(frame)
frame.Show()

def onclick(event):
    Cocoa.CFUserNotificationDisplayAlert(0, 3, 0, 0, 0, "Should i mix wxpython and objc", "hmmm...", 
                                         "Cool", "Not Cool", "Whatever")

frame.Bind(wx.EVT_LEFT_DOWN, onclick)
app.MainLoop()

wx 和 objc 代码的这种混合有什么问题吗,有什么故障点吗?

4

3 回答 3

0

一个可能要问的问题;我相信您必须使用位于 Carbon 之上的 Mac 的 wx 版本,因为我认为 Cocoa 版本尚未发布。一旦可可版本发布(对于 wx),那么我认为必须有“更少”的问题。碳和可可的混合物对我来说听起来有问题,但我无法指出具体的问题。

于 2010-04-01T16:02:06.010 回答
0

你有什么理由不只是编写一个继承自 wx.Dialog 的自定义 WX 对话框? WX 演示有一个很好的例子。更多的工作,但更清洁的方法。

于 2010-04-01T16:47:36.817 回答
0

我认为这不会很好,混合事件循环......

[编辑:我最初是这么想的,因为对话框是模型,而它后面的窗口不是,并且可能有两个事件循环争夺控制权。(因为每个窗口都有自己的窗口,这就是为什么您可以在其中包含 Carbon 和 Cocoa 窗口(主要是其他类型的应用程序)。

另一方面,前面的窗口——你的对话框——控制整个事件循环(如果它是模型),所以它可以实际工作。]

我真的建议您阅读Carbon/Cocoa 集成指南。现在,这更加困难,因为您使用的是 Python 而不是 C,但它可以解释一些概念。

我认为在之前的项目中,我们实现了这样的自己的对话框,包括可自定义的文本。(因为我们使用的是 wxWidgets/C++,所以我们只是使用带有 wxWidgets 层的 Carbon API 来实现它,我们看起来非常好。(...我们有一个经过大量修改的 wx 版本...))

于 2010-04-03T02:39:28.503 回答