为了账号安全,请及时绑定邮箱和手机立即绑定

单击文件名时 PyQt5 QFileDialog 关闭

单击文件名时 PyQt5 QFileDialog 关闭

牧羊人nacy 2023-04-18 15:26:35
我正在使用PyQt5 QFileDialog.getOpenFileName。在单击“打开”按钮之前,我希望该框保持打开状态。但是,当我在我的 Linux 系统上运行代码时,单击文件名时对话框立即关闭。在 Windows 系统上,该框按预期运行并保持打开状态,直到单击“打开”按钮。无论是否设置选项,结果都相同QFileDialog.DontUseNativeDialog。from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialogimport sysclass Main(QMainWindow):    def __init__(self):        super().__init__()        self.setWindowTitle("QFileDialog Test")        button = QPushButton("Click to open file")        button.setCheckable(True)        button.clicked.connect(self.open_file)        # Set the central widget of the Window.        self.setCentralWidget(button)    def open_file(self):        options = QFileDialog.Options()        options |= QFileDialog.DontUseNativeDialog        file_name, _ = QFileDialog.getOpenFileName(None, "Open File",            "", "Python Files (*.py);;Text Files (*.txt)",options=options)app = QApplication(sys.argv)window = Main()window.show()app.exec_()编辑:我退出 KDE 并开始一个 Openbox 会话,然后运行上面的代码。QFileDialog 的行为如我所料,等待我单击“打开”按钮。这验证了 KDE / KWin 是否存在问题,并且在其他窗口管理器下运行的代码可能会正常工作。仍然不是一个真正的解决方案,但我现在比以前更了解情况。第二次编辑:我发现如果我将工作区行为 -> 一般行为 -> 单击行为从单击更改为双击,我的 QFileDialog 问题就会消失。不过,如何解决这个问题将是一个不同的话题。第三次编辑:向示例代码添加了“QFileDialog.DontUseNativeDialog”选项。
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

似乎 Qt 试图尊重操作系统在其文件管理器中打开文件和文件夹的方式,即使在使用本机对话框时也是如此。这取决于SH_ItemView_ActivateItemOnSingleClick 样式提示,绕过它的唯一方法是应用代理样式。

虽然您可以在其内部将样式应用于 QFileDialog 的视图__init__(只要您使用本机对话框),但您使用的是静态方法,因此您只能通过将样式设置为整个 QApplication 来实现。

请注意,与样式表、调色板和字体不同,样式不会传播到子部件,它们始终使用 QApplication 样式(或为它们手动设置的样式)。

class SingleClickWorkaroundProxy(QProxyStyle):

    def styleHint(self, hint, option, widget, data):

        if hint == self.SH_ItemView_ActivateItemOnSingleClick:

            return False

        return super().styleHint(hint, option, widget, data)


# ...

app = QApplication(sys.argv)

app.setStyle(SingleClickWorkaroundProxy())

window = Main()

window.show()

app.exec_()


查看完整回答
反对 回复 2023-04-18
  • 1 回答
  • 0 关注
  • 238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信