2012-07-17 28 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

相關問題