77# -----------------------------------------------------------------------------
88
99"""Provides widget classes and functions."""
10- from functools import partialmethod , wraps
10+ from functools import partialmethod
1111
1212from packaging .version import parse
1313
1414from . import PYQT5 , PYQT6 , PYSIDE2 , PYSIDE6 , QT_VERSION as _qt_version
15- from ._utils import add_action , possibly_static_exec , getattr_missing_optional_dep
15+ from ._utils import (
16+ add_action ,
17+ possibly_static_exec ,
18+ getattr_missing_optional_dep ,
19+ static_method_kwargs_wrapper
20+ )
1621
1722
1823_missing_optional_names = {}
@@ -23,22 +28,6 @@ def __getattr__(name):
2328 raise getattr_missing_optional_dep (
2429 name , module_name = __name__ , optional_names = _missing_optional_names )
2530
26- def _dir_to_directory (func ):
27- @wraps (func )
28- def _dir_to_directory_ (* args , ** kwargs ):
29- if "dir" in kwargs :
30- kwargs ["directory" ] = kwargs .pop ("dir" )
31- return func (* args , ** kwargs )
32- return _dir_to_directory_
33-
34- def _directory_to_dir (func ):
35- @wraps (func )
36- def _directory_to_dir_ (* args , ** kwargs ):
37- if "directory" in kwargs :
38- kwargs ["dir" ] = kwargs .pop ("directory" )
39- return func (* args , ** kwargs )
40- return _directory_to_dir_
41-
4231
4332if PYQT5 :
4433 from PyQt5 .QtWidgets import *
@@ -71,8 +60,11 @@ def _directory_to_dir_(*args, **kwargs):
7160 QMenu .exec_ = lambda * args , ** kwargs : possibly_static_exec (QMenu , * args , ** kwargs )
7261 QLineEdit .getTextMargins = lambda self : (self .textMargins ().left (), self .textMargins ().top (), self .textMargins ().right (), self .textMargins ().bottom ())
7362
74- # Map missing flags definitions
75- QFileDialog .Options = QFileDialog .Option
63+ # Add removed definition for `QFileDialog.Options` as an alias of `QFileDialog.Option`
64+ # passing as default value 0 in the same way PySide6 6.5+ does.
65+ # Note that for PyQt5 and PySide2 those definitions are two different classes
66+ # (one is the flag definition and the other the enum definition)
67+ QFileDialog .Options = lambda value = 0 : QFileDialog .Option (value )
7668
7769 # Allow unscoped access for enums inside the QtWidgets module
7870 from .enums_compat import promote_enums
@@ -108,17 +100,39 @@ def _directory_to_dir_(*args, **kwargs):
108100 QDialog .exec_ = lambda self , * args , ** kwargs : self .exec (* args , ** kwargs )
109101 QMenu .exec_ = lambda * args , ** kwargs : possibly_static_exec (QMenu , * args , ** kwargs )
110102
103+ # Passing as default value 0 in the same way PySide6 < 6.3.2 does for the `QFileDialog.Options` definition.
104+ if parse (_qt_version ) > parse ('6.3' ):
105+ QFileDialog .Options = lambda value = 0 : QFileDialog .Option (value )
106+
111107
112108if PYSIDE2 or PYSIDE6 :
113- QFileDialog .getExistingDirectory = _directory_to_dir (QFileDialog .getExistingDirectory )
114- QFileDialog .getOpenFileName = _directory_to_dir (QFileDialog .getOpenFileName )
115- QFileDialog .getOpenFileNames = _directory_to_dir (QFileDialog .getOpenFileNames )
116- QFileDialog .getSaveFileName = _directory_to_dir (QFileDialog .getSaveFileName )
109+ # Make PySide2/6 `QFileDialog` static methods accept the `directory` kwarg as `dir`
110+ QFileDialog .getExistingDirectory = static_method_kwargs_wrapper (
111+ QFileDialog .getExistingDirectory , "directory" , "dir"
112+ )
113+ QFileDialog .getOpenFileName = static_method_kwargs_wrapper (
114+ QFileDialog .getOpenFileName , "directory" , "dir"
115+ )
116+ QFileDialog .getOpenFileNames = static_method_kwargs_wrapper (
117+ QFileDialog .getOpenFileNames , "directory" , "dir"
118+ )
119+ QFileDialog .getSaveFileName = static_method_kwargs_wrapper (
120+ QFileDialog .getSaveFileName , "directory" , "dir"
121+ )
117122else :
118- QFileDialog .getExistingDirectory = _dir_to_directory (QFileDialog .getExistingDirectory )
119- QFileDialog .getOpenFileName = _dir_to_directory (QFileDialog .getOpenFileName )
120- QFileDialog .getOpenFileNames = _dir_to_directory (QFileDialog .getOpenFileNames )
121- QFileDialog .getSaveFileName = _dir_to_directory (QFileDialog .getSaveFileName )
123+ # Make PyQt5/6 `QFileDialog` static methods accept the `dir` kwarg as `directory`
124+ QFileDialog .getExistingDirectory = static_method_kwargs_wrapper (
125+ QFileDialog .getExistingDirectory , "dir" , "directory"
126+ )
127+ QFileDialog .getOpenFileName = static_method_kwargs_wrapper (
128+ QFileDialog .getOpenFileName , "dir" , "directory"
129+ )
130+ QFileDialog .getOpenFileNames = static_method_kwargs_wrapper (
131+ QFileDialog .getOpenFileNames , "dir" , "directory"
132+ )
133+ QFileDialog .getSaveFileName = static_method_kwargs_wrapper (
134+ QFileDialog .getSaveFileName , "dir" , "directory"
135+ )
122136
123137# Make `addAction` compatible with Qt6 >= 6.3
124138if PYQT5 or PYSIDE2 or parse (_qt_version ) < parse ('6.3' ):
0 commit comments