2012-11-24 99 views
5

我在使用python控制檯和python腳本的同一代碼上遇到不同的行爲。python控制檯和python腳本之間的不同行爲

的代碼如下:

import gtk 
import webkit 
win = gtk.Window() 
win.show() 
web = webkit.WebView() 
win.add(web) 
web.show() 
web.open("http://www.google.com") 

當運行在Python控制檯的代碼,輸出是包含谷歌主網頁一個新的幀。

將代碼作爲腳本運行時,結果爲無效幀。它關閉得非常快,但即使我使用延遲功能,webkit也不會添加到框架中。

這怎麼可能?

此外,使用PyDev IDE它標記:「未解析的導入:gtk」, 但如果我運行該項目,該程序啓動時沒有編譯問題。這是正常的嗎?

回答

8

添加

gtk.main() 

到腳本的結尾。這會啓動gtk事件循環。


import gtk 
import webkit 

class App(object): 
    def __init__(self): 
     win = gtk.Window() 
     win.connect("destroy", self.destroy) 
     web = webkit.WebView() 
     web.open("http://www.google.com") 
     win.add(web) 
     web.show() 
     win.show() 
    def destroy(self, widget, data = None): 
     gtk.main_quit() 
app = App() 
gtk.main() 
+0

響應:d它的工作!謝謝,你有什麼想法,爲什麼pydev不承認gtk庫,但無論如何編譯? – Luca

+0

對不起,我沒有pydev的經驗。 – unutbu

+0

@PhantomFav你可以[**接受答案**](http://meta.stackexchange.com/a/5235/164313),因爲它適合你。 – phant0m

1

我的猜測是,控制檯保持python會話打開,而在腳本程序結束時關閉。當腳本關閉時,它會將其創建的所有內容都包含在內。

有些事情要測試這個理論:如果你在控制檯中輸入「exit」,你會看到界面以相同的方式關閉嗎?如果是這樣,請考慮一些代碼(例如暫停,如raw_input),以便腳本保持打開狀態。

祝你好運!

+0

好吧,我只是嘗試,並等待合適的時機彈出會出現: 的metacity:沒有從應用 – Luca

相關問題