2016-06-27 4 views
1

Ich versuche, zwei Instanzen von Kivy auszuführen. Ich weiß, dass Sie nicht versuchen sollten, ein zweites Fenster wie in den Dokumenten zu öffnen, aber ich brauche ein zweites Fenster, auf das ich nicht verzichten kann. Entweder öffnen Sie ein zweites Fenster oder kicken auf Kivy.Subprozess popen zweite Instanz von Kivy gibt Modul Importfehler

Da jede Python-GUI-Bibliothek, die ich untersucht habe, eine weniger ansprechende Ästhetik hat, würde ich lieber bei Kivy bleiben. Fühl mich frei, mich zu korrigieren, wenn ich falsch liege.

Hier ist das Problem. Ich kann die zweite App-Datei nicht öffnen. Es wird bei Zeile 1 erwischt und importiert Kivy.

### call to popen from main.py 
class RefreshButton(Button): 
    pass 
    def launchChild(self): 
     import subprocess 
     subprocess.Popen('python test.py', shell=True) 

    def on_press(self): 
     self.launchChild() 

### test.py 
from kivy.app import App ### <- Line 1 ImportError: No module named kivy.app 
from kivy.uix.button import Button 

class MainApp(App): 
    def build(self): 
     b = Button(text='Test') 
     return b 


if __name__ == '__main__': 
    MainApp().run() 
+1

Sind Sie sicher, dass es nicht wegen des Knopfes ? Was ist die vollständige Rückverfolgung? 'Import Button, Button, Button'? Magst du Buttons wirklich? –

+0

@PadraicCunningham Nein, es kommt aus der Datei test.py. Main.py öffnet/läuft gut, der Button macht was er soll. Der genaue Fehler ist 'Line 1 ImportError: Kein Modul namens kivy.app'. –

+0

Wie starten Sie Main.py? Wie in wie Sie die Methode ausführen, die es den Prozess aufruft? Das Problem ist am ehesten so, weil Python auf einen anderen Interpreter zeigt als den, den Sie für –

Antwort

0

sich nach den Kommentaren ein Konflikt zwischen dem Python-Interpreter ist, dass Sie in Ihrem IDE verwenden, die ist python3.4 und welche Interpreter Python bezieht sich auf in Ihrem subprocess Ruf, die meisten ist wahrscheinlich python2. Um es zu lösen Sie müssen nur geben Sie die python3 Interpreter zu verwenden, Sie brauchen auch nicht shell = True, kann man einfach eine Liste von Argumenten übergeben:

subprocess.Popen(['python3', 'test.py']) 
Verwandte Themen