私はコードではPyQtはファイルがありません
を使用して簡単なコードを書いています、私はなく、通常の方法、すなわちと、私は静的関数を使用して、それを呼び出すときしかし、すべてが正常に動作し、QFileDialog
を呼び出しますusing dialog.exec_(),
ファイルダイアログウィンドウにファイルが表示されません。
ファイルの完全なパスを入力した後で、ファイルダイアログウィンドウでそのファイルを見ることができます。 この問題は、FileDialoghandler
関数を呼び出す場合にのみ発生します。私がQFileDialog
を呼び出す方法に関わらず、それをしなければ、すべて正常に動作します。 また、この問題はLinuxのみで、Windows7ではすべて正常に動作します。 これがPyQtのバグかどうか、私はここで何か不足していますか?次のように
コードは次のとおりです。
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()
Linuxでは私にとってはうまくいかないことを確認しました。しかし、同じコードがPySideで動作します。だから、おそらくPyQtのバグです。私は[PyQtメーリングリスト](http://www.riverbankcomputing.com/mailman/listinfo/pyqt)に報告して決定的な答えを得ることをお勧めします。 – ekhumoro
OS Xで動作するようです。なぜあなたは本当に 'QFSFileEngine'を必要としますか? –
'f = open(fname、 'r')に注意してください。 f 'である。 2つの文を 'open(fname、 'r')をfとして' single 'に入れることができるだけでなく、とりわけ 'try ... except IOError'にカプセル化して、ユーザーが 'Cancel'を押したとき(すなわち、 'fname =" "') –