我使用一个名为Anki的flashcard程序,它是用Python编写的。我想写我的第一个插件。我是Python的新手。我不是技术人员,但我有几年的经验,可以在Java,C ++,C#等其他人的代码中跳过。
闪存卡显示了一个问题,例如"法国的资本?"。当"显示答案"按下按钮,Anki显示答案" Paris"。
我希望在它出现之前抓住这个文字"巴黎"
我已经在Anki代码中到达了这一点。在这一刻,卡片显示了法国的首都?"。答案仍然是空白。我想我希望能够抓住" val" (我认为是" Paris")并在我的附加组件中使用它。
def _getTypedAnswer(self):
self.web.evalWithCallback("typeans ? typeans.value : null", self._onTypedAnswer)
def _onTypedAnswer(self, val):
self.typedAnswer = val
self._showAnswer()
我一直在谷歌搜索试图找到这个意思:
("typeans ? typeans.value : null", self._onTypedAnswer)
我可以访问所有代码,并且我可以提供可能对响应者有用的任何代码。
感谢。
补充:在回复者的问题之后。
Anki可以在计算机或互联网上运行。学习卡的所有结果都是同步的,因此就最终用户而言,一种方法或另一种方法之间没有区别。
来自" webview"类:
def evalWithCallback(self, js, cb):
self.page().runJavaScript(js, cb)
"评论家"课程显示问题和答案。评论者窗口是" mw" (对于"主窗口")
这是"评论员"
的初始声明def __init__(self, mw):
self.mw = mw
self.web = mw.web
答案 0 :(得分:1)
typeans ? typeans.value : null
是C/C++/C#
(也可能是Java,不记得)代码等同于(伪代码)
if typans:
return typeans.value
else:
return null
("typeans ? typeans.value : null", self._onTypedAnswer)
是一个元组,它包含这行代码作为字符串。
答案 1 :(得分:0)
一旦在代码中找到了所需变量的位置,就可以通过多种方式将这些信息提取到您自己的代码中。
如果允许直接操作源,那么您可以将val作为属性分配给您在问题中显示的方法中的其他对象。
例如:
def _onTypedAnswer(self, val):
self.typedAnswer = val
myobj.answer = val
# or call a method on myobj to break flow
# myobj.method(val)
self._showAnswer()
答案 2 :(得分:0)
BTW, typeans的确切(和有效)python相当于? typeans.value:null 是:
typeans and typeans.value or None
答案 3 :(得分:0)
self.web.evalWithCallback("typeans ? typeans.value : null", self._onTypedAnswer)
这只是使用两个参数调用evalWithCallback
方法:字符串"typeans ? typeans.value : null"
和方法对象self._onTypedAnswer
。您可以在发布的代码中查看evalWithCallback
对此的影响:
def evalWithCallback(self, js, cb):
self.page().runJavaScript(js, cb)
所以evalWithCallback
接受字符串并将其作为JavaScript运行。目前还不清楚回调是如何被调用的(例如,它将被调用的参数),但代码的作用的本质是它作为JavaScript执行字符串typeans ? typeans.value : null
然后调用函数{ {1}}。我的猜测是传递给self._onTypedAnswer
的{{1}}参数将是评估JS表达式的结果。
顺便说一句,从名称“打字的答案”来判断,我猜测val
不是问题的正确答案,而是用户的猜测(即用户键入的值)。