2012-07-17 65 views
0

我正在使用this guy's code创建一个显示馈送给它的值的拨号盘。代码在shell中运行,但在从文件运行时给出'无法找到变量'错误

当我将每行复制到Python shell时,它运行得非常漂亮。所以我认为是时候增加更多的功能了。但是,从文件运行时,在shell中运行的VERY SAME代码不起作用。它提供了一个“找不到变量”的变量“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的值,它是一个功能的SVG文件。

功能是:

function showHr(newBpm) { 
    bpmTarget = newBpm; 
} 

我是零线索约SVG,所以我不知道什么地方是怎么回事错了,无论是SVG文件或者什么的故障。为什么在shell中运行时找不到'showHr'呢? :S

UPDATE 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文件?

+0

我不确定这个问题,但你使用哪个Python shell? – ptomato 2012-07-17 20:04:20

+0

Python 2.7.2+(不知道是什么意思,这就是它的写法) – Antimony 2012-07-18 09:46:29

+0

尝试在代码末尾添加'gtk.main()',因为没有主循环窗口不会显示。至于为什么它能在python控制台上工作,我只能冒险猜测,因为我对pygtk/python的体验相当有限。也许你展示窗口的代码正在被解释并立即执行,而没有事件循环并因此被显示。对于PyQt4,很难说 – 2012-07-19 17:08:42

回答

0

我不能告诉你为什么,但我自己遇到了类似的问题。经过修改一下,我发现:

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

我试过了。现在错误消失了,但是我的程序似乎仍然不会处理'hr1'的值,我将它传递给:( – Antimony 2012-08-30 13:25:39

相关问题