2012-08-31 16 views
6

मैं PyQtनहीं QFileDialog खिड़की

का उपयोग कर कोड में एक सरल कोड लिख रहा हूँ में दिखाई देने वाली फ़ाइलें, मैं एक QFileDialog आह्वान, लेकिन जब मैं स्थिर कार्यों सब ठीक काम करता है का उपयोग कर इसे आह्वान है, लेकिन सामान्य विधि यानी साथ dialog.exec_(), का उपयोग करके मुझे फ़ाइल संवाद विंडो में कोई भी फाइल नहीं दिखाई दे रही है।

फ़ाइल के पूर्ण पथ को टाइप करने के बाद ही मैं फ़ाइल संवाद विंडो में फ़ाइल देख सकता हूं। ध्यान दें कि यह समस्या केवल तभी होती है जब मैं FileDialoghandler फ़ंक्शन का आह्वान करता हूं, अगर मैं ऐसा नहीं करता, कोई फर्क नहीं पड़ता कि मैं QFileDialog कैसे आमंत्रित करता हूं, सब कुछ ठीक काम करता है। और यह समस्या केवल लिनक्स पर है, विंडोज 7 पर सबकुछ ठीक काम करता है। मुझे आश्चर्य है कि यह एक पीईक्यूटी बग है या क्या मुझे यहां कुछ याद आ रहा है?

कोड इस प्रकार है:

import sys 
from PyQt4.QtCore import Qt 
from PyQt4.QtGui import * 
from PyQt4.QtCore import QAbstractFileEngine 
from PyQt4.QtCore import QAbstractFileEngineHandler 
from PyQt4.QtCore import QFSFileEngine 

class FileDialogHandler(QAbstractFileEngineHandler): 
    def create(self,filename): 
     if str(filename).startswith(':'): 
      return None # Will be handled by Qt as a resource file 
     print("Create QFSFileEngine for {0}".format(filename)) 
     return QFSFileEngine(filename) 

class Example(QMainWindow): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 

    def initUI(self):  

     self.textEdit = QTextEdit() 
     self.setCentralWidget(self.textEdit) 
     self.statusBar() 

     openFile = QAction(QIcon('open.png'), 'Open', self) 
     openFile.setShortcut('Ctrl+O') 
     openFile.setStatusTip('Open new File') 
     openFile.triggered.connect(self.showDialog) 

     menubar = self.menuBar() 
     fileMenu = menubar.addMenu('&File') 
     fileMenu.addAction(openFile)  

     self.setGeometry(300, 300, 350, 300) 
     self.setWindowTitle('File dialog') 
     self.show() 

    def showDialog(self): 
     handler = FileDialogHandler() 
     #using QFileDialog.getOpenFileName works fine 
     fname = QFileDialog.getOpenFileName(None, 'Open file', '/home','All files (*.*)') 
     #dialog = QFileDialog() 
     #dialog.setOption(QFileDialog.DontUseNativeDialog,False) 
     #if dialog.exec_(): 
      #fname = dialog.selectedFiles() 
     #else: 
      #fname = None 
     f = open(fname, 'r')   
     with f:   
      data = f.read() 
      self.textEdit.setText(data) 

def main(): 
    app = QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 

if __name__ == '__main__': 
    main() 
+0

पुष्टि की है कि यह मेरे लिए लिनक्स पर काम नहीं करता है। हालांकि, एक ही कोड पायसाइड के साथ काम करता है - इसलिए संभवतः यह एक पीईक्यूटी बग है। मैं सुझाव दूंगा कि आप एक निश्चित उत्तर प्राप्त करने के लिए [पीईक्यूटी मेलिंग सूची] (http://www.riverbankcomputing.com/mailman/listinfo/pyqt) पर इसकी रिपोर्ट करें। – ekhumoro

+0

ओएस एक्स पर काम करने लगता है। आपको वास्तव में 'QFSFileEngine' क्यों चाहिए? –

+0

अपने 'f = open (fname,' r ') से सावधान रहें; एफ के साथ। न केवल आप दो कथनों को एक ही 'खुले (fname,' r ') के साथ f' के रूप में रख सकते हैं, लेकिन आपको इसे' कोशिश करने के लिए 'प्रयास करना चाहिए ... IOError को छोड़कर' ताकि आप क्रैश न हों उपयोगकर्ता 'रद्द करें' दबाता है (यानी, जब 'fname = "" ') –

उत्तर

6

मैं getOpenFilename साथ नहीं बहुत पहले एक ऐसी ही समस्या का सामना करना पड़ा। मेरे लिए समाधान बैकएंड को देशी से Qt के संवाद के अपने कार्यान्वयन में बदलना था।

filename = QtGui.QFileDialog.getOpenFileName(self, 
              'Open file', 
              '/home', 
              'All files (*.*)', 
              options=QtGui.QFileDialog.DontUseNativeDialog) 

के बाद मैं इस बुला वाक्य रचना मैं कभी नहीं किसी भी समस्याओं फिर से था करने के लिए बदल: इस विस्तारित बुला वाक्य रचना जो लगता है कि withan प्राप्त किया जा सकता।

संबंधित मुद्दे