2015-08-04 27 views
6

Bu sorunun daha önce birkaç kez sorduğunu biliyorum, bunların hiçbiri benim durumum için geçerli görünmüyor. Ben PyQt yüklemiş ve sadece gibi bir pencere açmaya çalışıyorum: Ben de burada genellikle pencere nedeniyle kapsamı dışına gidiyor bir hatadan kaynaklandığını baktımPyQt QWidget penceresi gösterildikten hemen sonra kapanıyor?

import sys 
from PyQt4 import QtGui as qt 

segmentation = qt.QApplication(sys.argv) 
main = qt.QWidget() 
main.show() 

Diğer tüm sorular Pencerenin show yöntemi, bir işlevden veya benzer bir işlevden çağrılıyor.

Kodum hiçbir işlevleri hiç bu kadar bu konu olamaz kullanır. Bu olduğu gibi çalışmalı, değil mi? Bu öğretici takip ediyorum:

https://www.youtube.com/watch?v=JBME1ZyHiP8

ve zaman 08:58 de

, eğitmen hemen hemen tam olarak yazdıklarını vardır ve bunların pencere ortaya çıkar ve sadece iyi etrafında kalır. Benimki bir saniyenin bir kesiri için görüntüler ve sonra kapanır. tüm kodu görmeden

Demo code that works

+1

Videoya bakın. Demoda '.exec _()' kodu yoktur. Değişken isimler dışında, OP tarafından yayınlanan kod aynıdır. Soru niçin orada çalışıyor, ama OP çalıştığında değil. – Andy

+1

OP tarafından belirtilen ana gitmek istemeyenler için video ekran görüntüsünü ekledim. Bu, kodun benzer olduğunu (değişken adlar farklıdır), ancak pencerenin demoda açıldığını gösterir. – Andy

+0

@Andy Thanks andy – Anonymous

cevap

11

, sana sys.exit() bit eksik olduğunu tahmin ediyorum: videodan kod bloğunun

ekran görüntüsü burada verilen kod bloğuna karşılaştırmak . Belirli kod sys.exit(segmentation.exec_()) için

ne gerekli olacaktır.

segmentation = qt.QApplication(sys.argv) 
main = qt.QWidget() 
main.show() 
sys.exit(segmentation.exec_()) 

burada neler olup bittiğini ayrıntı Biraz.

segmentation = qt.QApplication(sys.argv) fiili uygulama oluşturur.

main = qt.QWidget() ve main.show() Araç ve sonra görüntüler oluşturur. piton komut yürütürken

, bu tam olarak o kadar neler ifade:

  1. oluşturun bir widget
  2. bir uygulama
  3. oluştur widget'a bitirdi
  4. göster. Komut dosyasının sonu.

sys.exit() nolu python komut dosyasını temizler. segmentation.exec_(), QT'nin olay odaklı arka plan işlemesini başlatır. segementation.exec_() bittiğinde (kullanıcı uygulamayı kapatır, yazılımınız uygulamayı kapatır veya bir hatayla karşılaşır), daha sonra python işlemini sona erdiren sys.exit() işlevine iletilen bir değer döndürecektir.

+0

Videoya bakın. Demoda '.exec _()' kodu yoktur. Değişken isimler dışında, OP tarafından yayınlanan kod aynıdır. – Andy

+0

@jphollowed, Bu cevap doğru olsa da. Burada sağlanan kod satırının eklenmesi pencerenin kapanmasını engelleyecektir. – Andy

+1

Bu, tam olarak benim kodumun tamamı. Eğiticiyi yeni başlattım ve bu yanlış gitmeden önce bu kadar uzağa gittim. Bağlantılı videoya 8:58 de bakarsanız, tam kodum onun için çalışır. Önerdiğin şeyi denedim ve sorunu çözüyor. Ama yine de sys.exit'in neden videoda gerekli olmadığını merak ettim, ama benim için gerekli. Teşekkürler. – Anonymous