0

私はMac OS Xに移植しているwxPythonベースのアプリを持っています。ネイティブの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

イベントループを混ぜて、それがうまくいくとは思わない...

[編集:ダイアログはモデルであり、その背後のウィンドウはモデルではなく、制御のために戦う2つのイベントループが存在する可能性があるため、最初はこれを考えました。(各ウィンドウには独自のウィンドウがあるため、CarbonウィンドウとCocoaウィンドウを含めることができます(ほとんどが他のタイプのアプリケーション)。

一方、フロントウィンドウ(ダイアログボックス)は、モデルの場合はイベントループ全体を制御するため、実際に機能する可能性があります。]

Carbon /CocoaIntegrationガイドを読むことをお勧めします。さて、あなたはPythonを使っていて、Cを使っていないので、これはもっと難しいですが、いくつかの概念を説明しているかもしれません。

以前のプロジェクトでは、カスタマイズ可能なテキストを含め、このような独自のダイアログを実装したと思います。(wxWidgets / C ++を使用していたので、wxWidgetsレイヤーでCarbon APIを使用してこれを実装したところ、かなり見栄えがしました。(...そしてwxのかなり大幅に変更されたバージョンがありました...))

于 2010-04-03T02:39:28.503 に答える
0

wx.Dialogから継承するカスタムWXダイアログを作成しない理由はありますか? WXデモには、その非常に良い例があります。もう少し作業が必要ですが、よりクリーンなアプローチです。

于 2010-04-01T16:47:36.817 に答える
0

考えられる質問の 1 つ。Cocoa バージョンはまだリリースされていないと思うので、Carbon の上にある Mac 用の wx バージョンを使用しているに違いないと思います。cocoa バージョンが (wx 用に) リリースされたら、問題は「少なく」なければならないと思います。カーボンとカカオの混合は私には問題があるように思えますが、特定の落とし穴を指摘することはできません.

于 2010-04-01T16:02:06.010 に答える