【发布时间】:2020-07-30 16:48:03
【问题描述】:
我正在使用PyQt5 QFileDialog.getOpenFileName。我希望该框保持打开状态,直到单击“打开”按钮。但是,当我在我的 Linux 系统上运行代码时,单击文件名时对话框会立即关闭。在 Windows 系统上,该框按预期运行并保持打开状态,直到单击“打开”按钮。无论是否设置QFileDialog.DontUseNativeDialog 选项集,结果都相同。
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QFileDialog
import sys
class 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 存在问题,并且在其他窗口管理器下运行的代码可能会正常工作。
仍然不是一个真正的解决方案,但我现在比以前更了解情况。
第二次编辑: 我发现如果我将 Workspace Behavior -> General Behavior -> Click Behavior 从 Single click 更改为 Double click,我的 QFileDialog 问题就会消失。但是如何解决这个问题将是一个不同的话题。
第三次编辑: 在示例代码中添加了“QFileDialog.DontUseNativeDialog”选项。
【问题讨论】:
-
您的代码在 artix linux、python 3.8.5、pyqt 5.15 上按预期运行
-
你的窗口管理器是什么:gnome、kde 等?
-
这个系统是 Fedora 32 上的 KDE Plasma,带有 Python 3.8.5 和 pyqt 5.15。令人鼓舞的是,它在不同的 linux 系统上运行良好。我仍然不知道为什么它在我的系统上表现得这样以及如何处理它。但至少我现在知道范围有点窄了。
-
我在 i3、openbox、xfce、gnome-wayland 上尝试成功
-
@a_manthey_67 - 感谢您的信息。看起来它在任何地方都可以工作,但 KDE 除外。
标签: python pyqt pyqt5 qfiledialog