मैं 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()
पुष्टि की है कि यह मेरे लिए लिनक्स पर काम नहीं करता है। हालांकि, एक ही कोड पायसाइड के साथ काम करता है - इसलिए संभवतः यह एक पीईक्यूटी बग है। मैं सुझाव दूंगा कि आप एक निश्चित उत्तर प्राप्त करने के लिए [पीईक्यूटी मेलिंग सूची] (http://www.riverbankcomputing.com/mailman/listinfo/pyqt) पर इसकी रिपोर्ट करें। – ekhumoro
ओएस एक्स पर काम करने लगता है। आपको वास्तव में 'QFSFileEngine' क्यों चाहिए? –
अपने 'f = open (fname,' r ') से सावधान रहें; एफ के साथ। न केवल आप दो कथनों को एक ही 'खुले (fname,' r ') के साथ f' के रूप में रख सकते हैं, लेकिन आपको इसे' कोशिश करने के लिए 'प्रयास करना चाहिए ... IOError को छोड़कर' ताकि आप क्रैश न हों उपयोगकर्ता 'रद्द करें' दबाता है (यानी, जब 'fname = "" ') –