我应该混合wxpython和pyobjc吗?

0 投票
3 回答
588 浏览
提问于 2025-04-15 21:07

我有一个基于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的代码混合在一起,有什么问题吗?会不会出什么故障?

3 个回答

0

你有没有想过直接写一个自定义的WX对话框,让它继承自wx.Dialog呢?WX的示例中有一个很不错的例子。虽然这样需要多花点时间,但这样做会更整洁。

0

可以问的一个问题是;我觉得你可能在使用基于Carbon的Mac版wx,因为我认为Cocoa版还没有发布。一旦wx的Cocoa版发布了,我觉得会有“更少”的问题。Carbon和Cocoa混合使用听起来有点麻烦,但我不能具体指出有哪些问题。

0

我觉得这样混合事件循环可能不太好用...

[补充说明:我最开始是这么想的,因为对话框是模态的,而它后面的窗口不是,这可能会导致两个事件循环争夺控制权。(因为每个窗口都有自己的事件循环,这就是为什么你可以在一个主要是另一种类型的应用程序中同时使用Carbon和Cocoa窗口。)

不过,从另一方面来说,前面的窗口——也就是你的对话框——如果是模态的,就会控制整个事件循环,所以其实是有可能工作的。]

我真的建议你看看这个Carbon/Cocoa集成指南。现在,这可能会比较难,因为你用的是Python而不是C,但它可能会解释一些概念。

我记得在之前的一个项目中,我们实现了自己的对话框,包括可自定义的文本。(因为我们使用的是wxWidgets/C++,所以我们通过Carbon API和wxWidgets层实现了这个功能,效果还不错。(...而且我们对wx做了很多修改...))

撰写回答