【问题标题】:PyQt5 file dialog not showing upPyQt5 文件对话框未显示
【发布时间】:2015-05-17 07:47:11
【问题描述】:

我已将QPushButton 连接到调用文件对话框的方法。简化后的代码如下所示:

def init_buttons(self):
    self.browse_button = QPushButton('&Browse')
    self.browse_button.clicked.connect(self.browse_file)

def browse_file(self):
    file_name = QFileDialog.getExistingDirectory()
    # Just for checking
    print(file_name)

有时QFileDialog 不会出现。该过程确实正在运行,因为主类/小部件没有响应我的点击。有时会出现。

如果QFileDialog 没有出现,使用pycharm,我必须停止并终止进程才能结束程序。如果我直接从终端运行程序,我必须手动结束正在运行的进程才能结束程序。我不知道是什么原因造成的,因为终端没有显示任何异常或警告。

那么,这是什么?

【问题讨论】:

  • 我已经在 Arch Linux 上测试了你的代码,但我无法重现问题。目录路径按预期打印,进程正常终止。因此,要么你正在做一些你没有告诉我们的其他事情,要么是你的设置有一些特定的东西导致了问题。您是否可以在不同的机器上测试您的代码,或者在虚拟机中测试您的代码?
  • PS:在我的机器上,我有一个外部驱动器,它会在一段时间未使用时自动进入睡眠模式以节省电量。如果我在睡眠时尝试打开文件对话框,则需要 5-10 秒才能唤醒,并在此过程中阻止所有内容。也许你的机器上也有类似的问题?
  • 通常,在测试我的代码时,我会运行 chromium、pycharm 和 konsole。我不知道这些进程是否会干扰我的代码。但是,似乎每个人都可以很好地运行我的代码。也许我的系统有问题。或者,也许是因为我使用的是基于 qt5 的 KDE Plasma 5?
  • 可能是因为这个错误:bugs.kde.org/show_bug.cgi?id=350758我正在处理它git.reviewboard.kde.org/r/125208

标签: qt pyqt qt5 pyqt5 qfiledialog


【解决方案1】:

getExistingDirectory 的参数错误。请试试这个。另外,我在拉取请求中添加了更多信息。

import os

def browse_file(self):
    self.save_dir = QFileDialog.getExistingDirectory(self, 
                      "Open Save Directory", os.path.expanduser('~'))
    print(self.save_dir)

【讨论】:

  • 正如我在 cmets 中所说的那样。我想问题出在我的系统上。但我无法确认。请注意,您在 github 上提供的代码在我的系统上提供了Segmentation Fault, core dumpedThis answer about segmentation fault 让我相信我的代码之外有问题。无论如何,谢谢你的帮助
  • 抱歉,我无法提供更多帮助。我刚刚在另一个操作系统上测试过,没有问题。也许使用 Pyqt 邮件列表看看是否有人知道原因。
【解决方案2】:
#!/usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import (QMainWindow, QTextEdit,
    QAction,QMessageBox, QFileDialog, QApplication,QPushButton,QInputDialog,QLineEdit)
from PyQt5.QtGui import QIcon


class Example(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()


    def initUI(self):
        self.fileName=""
        self.text=""
        btn1 = QPushButton("Encrypt", self)
        btn1.clicked.connect(self.onBtn1)
        self.show()

    def onBtn1(self):

        self.fileName, _  = QFileDialog.getOpenFileName(self, 'Open file', '/Users/Jarvis/Desktop/')

if __name__ == '__main__':

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

【讨论】:

  • self.fileName, _ 这是什么(下划线)是什么意思?你能解释一下吗?
  • 错误,不工作。我尝试像您在那里那样添加_not showing 仍在发生。更糟糕的是,Segmentation fault (core dumped) 发生了
  • 您使用的是什么平台?代码运行良好 mac osx yosemite。我没有在linux中测试过。
  • 您可以删除_。我撕掉了一些我以前的代码来给你这个例子。请检查您正在使用的平台。该代码在 Mac OSX yosemite 中运行良好,并给了我选择的文件名。
  • 如果您是 linux 用户,请确保您已安装所有必要的软件包。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
  • 2013-06-28
  • 2016-05-30
  • 2017-02-05
相关资源
最近更新 更多