2012-11-24 5 views
5

Ich erfahre ein anderes Verhalten auf den gleichen Code mit der Python-Konsole und einem Python-Skript.Unterschiedliches Verhalten zwischen Python-Konsole und Python-Skript

Der Code lautet wie folgt:

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

Wenn der Code in der Python Konsole ausgeführt wird, wird der Ausgang ein neuer Frame ist, der den Google Haupt Seite enthält.

Wenn der Code als Skript ausgeführt wird, ist das Ergebnis ein ungültiger Rahmen. Es schließt sehr schnell, aber selbst wenn ich eine Verzögerungsfunktion verwende, wird das Webkit nicht zum Rahmen hinzugefügt.

Wie ist es möglich?

Darüber hinaus kennzeichnet Flags mit PyDev IDE: "unaufgelöster Import: GTK", , aber wenn ich das Projekt ausführen, startet das Programm ohne Problem der Kompilierung. Es ist normal?

Antwort

8

gtk.main() 

bis zum Ende des Skripts hinzufügen. Dies startet die Ereignisschleife 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 es funktionierte! danke, hast du eine ahnung warum pydev erkennt gtk library aber es kompilieren sowieso? – Luca

+0

Sorry, ich habe keine Erfahrung mit Pydev. – unutbu

+0

@PhantomFav Sie können [** die Antwort ** akzeptieren] (http://meta.stackexchange.com/a/5235/164313), da es für Sie funktioniert hat. – phant0m

1

Meine Vermutung ist, dass die Konsole die Python-Sitzung offen hält, während am Ende des Skripts das Programm geschlossen wird. Wenn das Skript geschlossen wird, nimmt es alles mit, was es damit erstellt hat.

Etwas, um diese Theorie zu testen: Wenn Sie "Exit" in der Konsole eingeben, sehen Sie die Schnittstelle auf die gleiche Weise heruntergefahren? Wenn ja, denke an einen Code (z. B. eine Pause wie eine raw_input), die das Skript offen bleiben lässt.

Viel Glück!

+0

ok, ich habe gerade versucht, und warten auf den richtigen Zeitpunkt ein Pop-up erscheint: metacity: keine Antwort von der Anwendung – Luca

Verwandte Themen