1

我正在使用 Python 和 PyObjC 编写一个简单的 OSX 应用程序。我使用 Interface Builder 设计了设置对话框,并使用 ibtool 编译它,然后从 Python 加载它。问题是如何从 Python 代码访问我在此窗口中的控件?我之前玩过 iPhone 开发,我记得我需要在控制器类中有一个 IBOutlet,它将连接到界面构建器中的 UI 控件。在 Python 中它应该看起来像这样:

class MyClass(NSObject):
  my_outlet = objc.IBOutlet('my_outlet')

但由于我不在 XCode 中工作(我只有一个 .py 文件和一个 .xib 文件),Interface Builder 不知道我的网点。在这种情况下如何进行绑定?或者我还能如何从代码中访问 UI 元素?

4

2 回答 2

4

首先,是否使用 Xcode 与 NIB 加载无关(除了让它更方便之外)。

正如 Ole 所说,您可以使用 IB 手动将您需要的插座添加到文件所有者或您在 NIB 文件中拥有的自定义对象实例中。通过这样做,这一切都将“正常工作”。

然而,这句话是促使我做出相对相似的回答的原因:

我只有一个 .py 文件和一个 .xib 文件

您是否尝试在 .app 包装器之外编写一些 UI 代码?如果是这样,这是一个完全不受支持的模式,很难得到正确的,并且很可能会跨越软件更新或主要版本(就像过去很多次一样)。

解决问题的最佳方法是使用 Xcode 项目并构建标准应用程序。模板不再随开发工具一起提供。只需单独下载它们。

如果您需要从命令行运行它,您仍然可以这样做。

于 2009-12-11T16:42:35.770 回答
1

这个我没试过,不过你也可以直接在IB中定义网点。打开 Library 面板,在顶部的分段控件中选择 Classes,然后选择要为其定义插座的自定义类。假设您有一个名为 MyWindow 的 NSWindow 子类。在列表中选择 NSWindow 类,单击左下角的操作按钮,选择 New Subclass... 并将其命名为 MyWindow。现在切换到 Outlets 选项卡并为您的窗口创建一个 NSButton 插座。现在您将一个按钮连接到插座。

我不知道这将如何转移到 PyObjC,但我很想在您尝试时看到您的结果。

于 2009-12-11T11:28:08.107 回答