4

我使用了一个名为 Anki 的抽认卡程序,它是用 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)

“reviewer”类显示问题和答案。审阅者窗口是“mw”(用于“主窗口”)

这是“reviewer”类的初始化语句

def __init__(self, mw):
    self.mw = mw
    self.web = mw.web
4

4 回答 4

1

typeans ? typeans.value : nullC/C++/C#等效于(伪代码)的(可能也是Java,不记得)代码

if typans:
   return typeans.value
else:
   return null

("typeans ? typeans.value : null", self._onTypedAnswer)是一个包含这行代码作为字符串的元组。

于 2016-09-15T07:39:04.447 回答
0

顺便说一句, typeans 的确切(和有效)python 等价物?typeans.value : null是:

typeans and typeans.value or None
于 2016-09-15T09:02:59.967 回答
0
self.web.evalWithCallback("typeans ? typeans.value : null", self._onTypedAnswer)

这只是evalWithCallback用两个参数调用方法:字符串"typeans ? typeans.value : null"和方法对象self._onTypedAnswerevalWithCallback您可以从发布的代码中看到它的作用:

def evalWithCallback(self, js, cb):
    self.page().runJavaScript(js, cb)

所以evalWithCallback获取字符串并将其作为 JavaScript 运行。从这里并不清楚究竟是如何调用回调的(例如,将使用什么参数调用它),但代码所做的本质是将字符串typeans ? typeans.value : null作为 JavaScript 执行,然后调用函数self._onTypedAnswer。我的猜测是val传递给的参数_onTypedAnswer将是评估 JS 表达式的结果。

顺便说一句,从“输入答案”的名称来看,我猜这val不是问题的正确答案,而是用户的猜测(即用户输入的值)。

于 2016-09-15T17:36:50.487 回答
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()
于 2016-09-15T08:58:17.740 回答