Javascript 代码在shell中运行,但给出';Can';找不到变量';从文件运行时出错

Javascript 代码在shell中运行,但给出';Can';找不到变量';从文件运行时出错,javascript,python,webkit,svg,gtk,Javascript,Python,Webkit,Svg,Gtk,我正在使用创建一个显示输入值的拨号盘 当我将每一行复制到pythonshell时,它运行得非常好。所以我认为是时候给它添加更多功能了。但是在shell中运行的代码在从文件运行时不起作用。它为变量'showHr'提供了一个“找不到变量”错误 代码是: import os import gobject import gtk import pygtk import sys import webkit pygtk.require('2.0') URL = "/home/antimony/Oscill

我正在使用创建一个显示输入值的拨号盘

当我将每一行复制到pythonshell时,它运行得非常好。所以我认为是时候给它添加更多功能了。但是在shell中运行的代码在从文件运行时不起作用。它为变量'showHr'提供了一个“找不到变量”错误

代码是:

import os

import gobject
import gtk
import pygtk
import sys
import webkit
pygtk.require('2.0')

URL = "/home/antimony/Oscillator Code/dials2-js.svg"
gobject.threads_init()
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_resizable(True)
window.connect("destroy", lambda window, event: gtk.main_quit())
web_view = webkit.WebView()
web_view.open(URL)

vbox = gtk.VBox(False, 0)
vbox.add(web_view)
window.add(vbox)
window.show_all()
hr1  = 23000/(1*500)
web_view.execute_script("showHr(%d)" % hr1)
gtk.main()
它实际上是将hr1的值输入到showHr,showHr是SVG文件中的一个函数

功能是:

function showHr(newBpm) {
    bpmTarget = newBpm;
}
我对SVG一无所知,所以我不知道哪里出了问题,也不知道是SVG文件的错误还是什么。当它在外壳中运行时可以找到“showHr”时,它究竟为什么找不到“showHr”

更新1 -我对另一个程序也有同样的问题。这次是PyQt4。那么,问题可能与代码无关。我的Python shell有什么问题吗?如果是这样的话,有人能告诉我怎么修吗?--好了,这已经修好了。我可能做了一些非常愚蠢的事情,比如运行一个不同的文件或者别的什么,因为当我尝试了一段时间后,它起了作用。我不知道我做错了什么

但是前面的问题仍然存在,我需要帮助

更新2 -似乎出现错误的代码行是:

web_view.execute_script("showHr(%d)" % hr1)
我知道,要用Javascript调用函数,可以将其写成“showHr(150);”(实际上,当在SVG文件中调用时,此调用有效)。即使将代码修改为现在读取

web_view.execute_script("showHr(%d);" % hr1)
它不起作用。它仍然会给出相同的错误:

Message: console message: undefined @0: ReferenceError: Can't find variable: showHr

无论如何,要将它指向那个SVG文件吗?

我无法告诉您原因,但我自己也遇到了类似的问题。稍加修改后,我发现:

web_view.execute_script("'showHr(%d)'" % hr1)

我不确定这是否重要,但您使用的是哪种Python shell?Python 2.7.2+(不确定+是什么意思,它就是这样写的)尝试在代码末尾添加
gtk.main()
,因为没有主循环,窗口将不会显示。至于为什么它能在python控制台上工作,我只能大胆猜测一下,因为我使用pygtk/python的经验相当有限。您显示窗口的代码可能会在没有事件循环的情况下立即被解释和执行,从而被显示。对于PyQt4,很难说它确实显示了一个窗口,但是拨号显示只显示默认值,而不是我希望它显示的“23000/(1*500)”值。即使在代码末尾添加了gtk.main()之后,错误,或者更确切地说是“找不到变量”的消息仍然存在。现在错误消失了,但我的程序似乎仍然没有对传递它的
hr1
值起作用:(