Ubuntu20.04下PyQt5的ShowDirsOnly选项失效问题求助
解决PyQt5中QFileDialog.ShowDirsOnly在Ubuntu20.04不生效的问题
问题原因
Ubuntu 20.04默认使用GTK风格的系统原生文件对话框,Qt的ShowDirsOnly选项对这类对话框不生效——系统对话框会忽略Qt的部分参数设置。
解决方案
方法1:强制使用Qt原生对话框
在调用getExistingDirectory时,添加QtWidgets.QFileDialog.DontUseNativeDialog选项,强制启用Qt自身实现的对话框,这样ShowDirsOnly就能正常生效:
import sys,os from PyQt5 import QtWidgets def button_pressed(): folder = QtWidgets.QFileDialog.getExistingDirectory(None, "Select folder", os.getcwd(), QtWidgets.QFileDialog.ShowDirsOnly | QtWidgets.QFileDialog.DontUseNativeDialog) print(folder) def window(): app = QtWidgets.QApplication(sys.argv) w = QtWidgets.QWidget() w.setWindowTitle("Test") b = QtWidgets.QPushButton(w) b.setText("Select folder") b.pressed.connect(button_pressed) w.show() sys.exit(app.exec_()) if __name__ == '__main__': window()
方法2:保留系统对话框的兼容处理(可选)
如果希望保留系统原生对话框的风格,其实getExistingDirectory本身就限制了只能选择文件夹,只是界面上可能会显示文件但无法选中。如果需要更严格的校验,可以在获取路径后手动判断:
def button_pressed(): folder = QtWidgets.QFileDialog.getExistingDirectory(None, "Select folder", os.getcwd()) if os.path.isdir(folder): print(folder) else: print("请选择有效的文件夹")
补充说明
使用DontUseNativeDialog后,对话框外观可能和系统风格略有差异,但能确保Qt的所有参数选项正常工作;若优先考虑系统风格一致性,直接使用默认的系统对话框即可,因为它本身不会允许用户选中文件。
内容的提问来源于stack exchange,提问作者user559678
相关产品推荐
相关产品推荐

