我正在使用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文件?
我不確定這個問題,但你使用哪個Python shell? – ptomato 2012-07-17 20:04:20
Python 2.7.2+(不知道是什麼意思,這就是它的寫法) – Antimony 2012-07-18 09:46:29
嘗試在代碼末尾添加'gtk.main()',因爲沒有主循環窗口不會顯示。至於爲什麼它能在python控制檯上工作,我只能冒險猜測,因爲我對pygtk/python的體驗相當有限。也許你展示窗口的代碼正在被解釋並立即執行,而沒有事件循環並因此被顯示。對於PyQt4,很難說 – 2012-07-19 17:08:42