2016-04-09 37 views
0

enter image description herePython: bir dizin için gözatmak için Diyalog (PyQt4 yüklenirken bir hata veriyor ve çekirdek ölür)

Ben Canopy sürüm 1.6.4 (Nisan 2016 itibariyle son sürümünü) kullanıyorum ve sadece yapmak isteyen Kullanıcının bir açılır pencerede bir Klasöre (dizin) göz atmasını istemek için bir diyalog ve klasör adını ve yolu bir değişken olarak almak için python için. PyQt4 kullanırken deneyin ne olursa olsun

, aşağıdaki hata iletisini almaya devam:

ImportError: Pyside

Ben ettik: PyQt4 zaten Uyumsuz QT Bağlama ithal vardır ipython olarak devre içe aktarılıyor Benzer bir şey yaşayan diğer insanların çok sayıda bulundu (örneğin: How can I use Pyqt with Enthought Canopy ve bu cevap anlaşılmaz buldum bu cevap: https://github.com/ipython/ipython/issues/2955/), ama bu nasıl çözmek için basit bir cevap (Ben Python ve Python ortamlarında oldukça yeni). Herkes hızlı bir tilki önerebilir veya daha basit bir x-platform (Mac ve pencereler) Diyalog kutusu (Tkinter ya Canopy'de çalışmıyor!) Yapmanın başka bir yoludur.

Bu kapalı ekran görüntüsü tarayıcı penceresi için değil, ancak aynı hata mesajını veriyor; Jüpiter notebook ve iPython gibi.

FYI: PySide'yi içe aktarmadan bile bu hatayı alıyorum! (Sadece bir kere ithal ettim, ama o zamandan beri değil).

Teşekkürler!

cevap

1

Qt - PyQt ve PySide için iki farklı python bağlaması vardır. İkisini de aynı anda kullanamazsınız. Her ikisini de aynı python oturumuna aktaramazsınız. Sanırım, bunu PySide'i kullanmayı seçen IDE'nizdeki gömülü bir python konsolundan başlatıyorsunuz (bu yüzden bu hatayı alıyorsunuz).

İki seçeneğiniz var.

  1. PyQt yerine PySide kullanın.
  2. Komut dosyanızı, IDE'nizin içindeki yerleşik konsol yerine normal bir konsoldan (örn., Cmd.exe, terminal, bash) başlatın (PySide önceden yüklenmez ve PyQt'yi kullanabilirsiniz).

PyQt ve PySide çok benzerdir ve çoğu durumda içe aktarma ifadelerini değiştirebilirsiniz.

bir dizin almak için bir iletişim kutusu oluşturmak için nasıl orijinal soru için
from PySide import QtGui, QtCore 

, kendi öz cevap, Brendan için QFileDialog.getExistingDirectory

import sys 
from PySide import QtGui, QtCore 


class Dialog(QtGui.QDialog): 

    def __init__(self, parent): 
     super(Dialog, self).__init__(parent) 
     self.ui_lay = QtGui.QHBoxLayout() 
     self.setLayout(self.ui_lay) 
     self.ui_line = QtGui.QLineEdit(self) 
     self.ui_lay.addWidget(self.ui_line) 
     self.ui_btn = QtGui.QPushButton('...', self) 
     self.ui_lay.addWidget(self.ui_btn) 
     self.ui_btn.clicked.connect(self.browse) 

    @QtCore.Slot() # for pyqt, QtCore.pyqtSlot() 
    def browse(self): 
     path = QtGui.QFileDialog.getExistingDirectory(self, 'Pick a Folder') 
     if path: 
      self.ui_line.setText(path) 


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    dlg = Dialog(None) 
    dlg.show() 
    app.exec_() 
+0

Teşekkür kullanabilirsiniz. En son Canopy sürümünü (1.6.2 [64bit]) çalıştırdığımı ve tüm paketleri güncellediğimi tekrar kontrol ettim. Yeni bir Canopy oturumu başlattığımda, sağladığınız komut dosyasını çalıştırdığımda bir hata alıyorum: \ n ** RuntimeError: Bir QApplication örneği zaten var. ** traceback günlüğüne bunu olası bir suçlu olarak işaret ederek: - -> app = QtGui.QApplication (sys.argv). – thescoop

+0

komut dosyasını bir windows10 makinesinde bir komut isteminden çalıştırırken, bir hata iletisi alıyorum: ** AttributeError 'module' nesnesi 'HBoxLayout' özelliğine sahip değil ** – thescoop

+0

iPython'dan çalıştırırken aynı hatayı macumda alıyorum. Python'umdan sadece kendi Mac'imde koşarsam, 'Mac'in hiçbir modülü yok' anlamına gelir. Bu, Mac'imin varsayılan olarak Canopy'nin python'unu kullanmadığı anlamına gelir (bundan önce bunun olacağını düşünmüştüm !!!). – thescoop