2013-12-09 4 views
0

В моем приложении pygtk я хочу закрыть текущее окно после открытия следующего окна.Открытие второго окна перед закрытием 1-го окна в pygtk

это код, который я написал

#!/usr/bin/env python 

# example base.py 

import pygtk 
pygtk.require('2.0') 
import gtk 
import subprocess 

class Base: 
    def next(self,widget): 
     subprocess.call('fabfile.py', shell=True) 
     self.window.destroy() 

    def __init__(self): 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
     self.window.set_size_request(200,200) 
     self.button = gtk.Button("Next") 
     self.button.show() 
     self.button.connect("clicked", self.next) 
     self.window.add(self.button) 
     self.window.show() 

    def main(self): 
     gtk.main() 

print __name__ 
if __name__ == "__main__": 
    base = Base() 
    base.main() 

, когда я нажимаю на следующей кнопке открывает следующее окно, но не закрывает мое текущее окно в фоновом режиме и текущее окно идет висеть в фоновом режиме после открытия следующего окно.

def next(self,widget): 
    subprocess.call("fabfile.py", shell=True) 
    self.win.destroy() 

, когда я запускаю этот код в

window machine он не закрывает существующее окно и

Linux machine он дает эту ошибку.

/bin/sh: fabfile.py: command not found

Любой, дайте мне знать, как решить эту проблему. Спасибо ...

+0

on linux: 'subprocess.call ('fabfile.py', shell = True)' должен быть 'subprocess.call ('. \ Fabfile.py', shell = True)'. Это связано с тем, что текущий рабочий каталог не включается при поиске сценария. – cstrutton

+0

Я пробовал с предложением ur, но он дает такую ​​же ошибку. любая другая идея, которую вы имеете для разрешения. – Amit

+0

@cstrutton: '' \ f'' - это один символ (ASCII Formfeed). Вам нужно избегать обратной косой черты, например, используя строковый литерал 'r '\ f'' (два символа). В любом случае вы могли бы означать '../Local_command'' (если вы не в Windows). И обычно 'fabfile.py' не вызывается напрямую, а используется команда' fab'. 'subprocess.Popen ('fab')' запускает команду 'fab', не дожидаясь ее завершения. – jfs

ответ

0

Попробуйте это, я надеюсь, что это будет работать, но я не уверен,

import subprocess 
subprocess.Popen(["fabfile.py"], bufsize=2048, shell=True,stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
self.win.destroy() 

subprocess.Popen будет открыть 2 окна и закрыть после текущего окна.

+0

спасибо, что он не висит, но некоторое время он закрывается, не дожидаясь открытия. есть какой-либо атрибут 'wait' для открытия. – Amit

+0

попробуйте 'p.wait()' или 'p.communicate()'. Я надеюсь, что это работает –

+0

это не работает, дайте мне другую идею. – Amit

Смежные вопросы