- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图破解一个工具来为我的游戏可视化着色器,我想我会尝试使用 python 和 cocoa。不过,我遇到了各种各样的砖墙。也许我对 objective-c 的理解有点差,但我似乎无法为我试图编写的 View 获取这段代码:
from objc import YES, NO, IBAction, IBOutlet
from Foundation import *
from AppKit import *
import gv
class SceneView(NSOpenGLView):
def __init__(self):
NSOpenGLView.__init__(self)
self.renderer = None
def doinit(self):
self.renderer = gv.CoreRenderer()
def initWithFrame_(self, frame):
self = super(SceneView, self).initWithFrame_(frame)
if self:
self.doinit()
print self.__dict__
return self
def drawRect_(self, rect):
clearColor = [0.0,0.0,0.0,0.0]
print self.__dict__
self.renderer.clear(CF_Target|CF_ZBuffer,clearColor)
执行时输出:
{'renderer': <gv.CoreRenderer; proxy of <Swig Object of type 'GV::CoreRenderer *' at 0x202c7d0> >}
{}
2009-04-03 19:13:30.941 geom-view-edit[50154:10b] An exception has occured:
Traceback (most recent call last):
File "/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python/PyObjCTools/AppHelper.py", line 235, in runEventLoop
File "/mnt/gilead/amcharg/projects/geom-view-edit/build/Debug/geom-view-edit.app/Contents/Resources/SceneView.py", line 37, in drawRect_
self.renderer.clear(CF_Target|CF_ZBuffer,clearColor)
AttributeError: 'SceneView' object has no attribute 'renderer'
它似乎丢失了我的渲染器变量,考虑到 initWithFrame_ 代码多么时髦,这并不奇怪,但这是 xcode 似乎写的东西,我认为这是有道理的,因为 objective-c 的 init 与 alloc 习惯用法分开。然而,看到它 python 仍然很奇怪。
有没有办法挽救这个,或者我应该把它从代码后面拿出来射它并使用 QT 或 wxPython?我考虑过使用 objective-c,但我想测试一下我刚刚编译的这些漂亮的 swig 绑定(bind) =)
最佳答案
根据您应用中其他地方发生的情况,您的实例实际上可能会被复制。
在这种情况下,实现 copyWithZone
方法以确保新副本也获得渲染器。 (注意,虽然我是一名 Python 开发人员和一名 Objective-C cocoa 开发人员,但我自己并没有使用过 PyObjC,所以我不能肯定地说你是否应该实现 copyWithZone
或 __copy__
).
事实上,通过打印将 copyWithZone
方法推送到类中,您可以判断是否正在调用该方法,以及这是否是渲染器似乎消失的原因。
编辑:根据您的反馈,我已将您的代码粘贴到一个空白的 xcode python 项目中(只是用其他东西代替 gv.CoreRenderer,因为我没有),然后它稍作修改即可正常工作。您如何实例化 SceneView?
就我而言:
SceneView.py
的新文件。我粘贴了你的代码。MainMenu.xib
文件,然后将一个 NSOpenGLView 框拖到窗口上。SceneView
main.py
的导入中添加了 import SceneView
,以便在加载 xib 文件时可以使用该类SceneView.py
中实现了一个 awakeFromNib
方法来处理 self.renderer
的设置。请注意,在程序执行期间不会为 nib 对象调用 __init__
和 initWithFrame
...它们被视为“序列化”到 nib 文件中,因此已经实例化。我掩盖了一些细节,但这就是 awakeFromNib 存在的原因。__dict__
在 drawRect_
调用中有适当的值,等等。这是 awakeFromNib 函数:
def awakeFromNib(self):
print "Awake from nib"
self.renderer = gv.CoreRenderer()
所以,我猜在您的对象实例化和/或添加到 View 的过程中,只有一些交叉线。您是为您的对象使用 Interface Builder,还是手动创建它并稍后将其添加到 View 中?我很想知道您从 initWithFrame 获取登录输出,这就是为什么我要问您如何创建 SceneView。
关于python - 为什么我的 PyObjc Cocoa View 类忘记了它的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/716386/
我有一个 Mercurial 存储库。它在 rev A 上。我做了一些更改,提交(到 rev B)并推送。然而,后来,我意识到我不想做那些改变。我更新回修订版 A,并对修订版 C 进行了一些替代更改。
我是 Prolog 的新手,我遇到了一个问题,我的变量似乎被遗忘了 test(S) :- X = 'testing', (S = y, write(X) ); (S = n, write(X) ).
这个问题已经有答案了: How to handle a lost KeyStore password in Android? (43 个回答) 已关闭 6 年前。 我有一组应用程序,在将它们发布到商店
因为this question从未得到答复,我希望有人可以帮助我重置密码以连接到我的 neo4j 密码(位于 localhost:7474)。 Zachary wrote a post通过某人重新启动
使用 Netbeans 我曾经从 SVN 存储库中 checkout 一个项目,只是为了在 Netbeans 中测试 SVN 功能。 现在,每次我创建一个新项目或打开一个不受源代码控制的现有项目时,N
我觉得这个问题以前已经被问过,但每个发帖者的答案似乎都非常具体。 我正在寻找一种方法来识别给定元素并查找具有特定类的下一个元素。我不想处理parent()或children(),因为我正在解析一个表,
我是一名老师,正在制作一个基本的迷你 Steam 客户端,作为我的编程课的学习练习。我们正在使用 Python 和 tkinter。 该程序生成两组单选按钮。第一个是用户的“游戏库”,他们可以在其中选
我忘记了我的商业管理员帐户的 apache 密码,我要求发送一封电子邮件,但是我不知道哪个帐户与 ofbiz 服务器相关联,所以我无法查看电子邮件修改了密码,有没有人有什么提示? 谢谢 最佳答案 如果
这可能听起来很愚蠢,但我正在使用一个小型框架来生成包含 3 个类的 html: Tag extends LinkedList Attribute Attributes extends LinkedLi
我有点不知道该怎么办。我在这个站点和 mysql 站点之间找到了几个关于如何解决忘记的 root 密码的选项,但我想我现在已经把它弄坏了。 我无法将 line 命令与 mysql.com 推荐的已创建
如何从 SVN 版本控制中删除文件? 它以前是由某人无意中犯下的。 它是一个需要的本地文件,但因人而异,不需要在版本控制中。 如果我删除并提交,它将为每个人删除该文件。 我无法向 svn:ignore
我正在使用 JSHINT,并注意到当我有以下代码时它不会抛出错误: function barfoo() { a = 10; } 我想要每个全局定义的变量都有一个错误。我现在有以下 gulp 任
我不久前安装了 SQL Server 2005,但忘记了在安装过程中设置的管理员密码。现在如何连接到 SQL Server? 编辑:我想我只允许 Sql Server 身份验证。使用集成安全性登录也不
如果我在 REPL 中玩并且我为函数定义了几种不同的方法: julia> methods(next) # 3 methods for generic function "next": next(i::
如果我在 REPL 中玩并且我为函数定义了几种不同的方法: julia> methods(next) # 3 methods for generic function "next": next(i::
(不确定这是否是一个可以提问的地方,但我会尝试)。在 Fedora 16 中安装一些更新后,Eclipse 不再知道如何使用 Java 文件。它无法制作它们、编译它们或格式化语法。它只是 eclips
我安装了 MySQL,但忘记了 root 密码 (Mac OSX El Capitan)。 我正在使用 [Ubuntu][1] 的教程来重置我的密码,但我很早就遇到了问题 我输入sudo/usr/lo
我理解为什么 Python 在引用实例属性时需要显式 self 限定符。 但我经常忘记它,因为我在 C++ 中不需要它。 我以这种方式引入的错误有时很难发现;例如,假设我写 if x is not N
我正在使用客户端证书通过 HTTPS 对网站进行身份验证。第一次,chrome 询问我要使用哪个证书。但是,我不知道如何冲洗/忘记这个选择来选择另一个证书。 Chrome 会记住它,但我没有找到(无论
你如何在 Laravel 中删除 cookie。这不起作用: public function logout(Request $request) { $this->guard()->logout
我是一名优秀的程序员,十分优秀!