python调用窗口找到文件_python – QFileDialog窗口中没有可见的文件

在Linux环境中使用PyQt编程时,作者遇到一个奇怪的问题:通过QFileDialog打开文件对话框,如果不使用静态函数而是用dialog.exec_(),则对话框中无法显示文件,除非手动输入完整路径。此问题只在Linux上出现,Windows7上运行正常。代码中定义了一个FileDialogHandler类并尝试创建QFSFileEngine。解决方案或进一步讨论可能涉及PyQt的特定设置或Linux文件系统的交互。
摘要由CSDN通过智能技术生成

我正在使用pyqt编写一个简单的代码

在代码中,我调用了一个QFileDialog,但是当我使用静态函数调用它时一切正常,但是使用普通方法,即使用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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值