One of the goals of PySide2 is to be API compatible with PyQt5, with certain exceptions.
The latest considerations and known issues will be also reported in the wiki .
The hash value returned for the classes
PySide2.QtCore.QDate
,
PySide2.QtCore.QDateTime
,
PySide2.QtCore.QTime
,
PySide2.QtCore.QUrl
will be based on their string representations, thus objects with the same value will produce the same hash.
Methods and functions that change the contents of a QString argument were modified to receive an immutable Python Unicode (or str) and return another Python Unicode/str as the modified string.
The following methods had their return types modified this way:
Classes: QAbstractSpinBox, QDateTimeEdit, QDoubleSpinBox, QSpinBox, QValidator
fixup(string):
string
validate(string,
int):
[QValidator.State,
string,
int]
Classes: QDoubleValidator, QIntValidator, QRegExpValidator
validate(string,
int):
[QValidator.State,
string,
int]
Class: QClipboard
text(string,
QClipboard.Mode
mode=QClipboard.Clipboard):
[string,
string]
Class: QFileDialog
Instead of
getOpenFileNameAndFilter()
,
getOpenFileNamesAndFilter()
and
getSaveFileNameAndFilter()
like PyQt does, PySide has modified the original methods to return a tuple.
getOpenFileName(QWidget
parent=None,
str
caption=None,
str
dir=None,
str
filter=None,
QFileDialog.Options
options=0):
[string,
filter]
getOpenFileNames(QWidget
parent=None,
str
caption=None,
str
dir=None,
str
filter=None,
QFileDialog.Options
options=0):
[list(string),
filter]
getSaveFileName(QWidget
parent=None,
str
caption=None,
str
dir=None,
str
filter=None,
QFileDialog.Options
options=0):
[string,
filter]
Class: QWebPage
javaScriptPrompt(QWebFrame,
string,
string):
[bool,
string]
Classes: QFontMetrics and QFontMetricsF
They had two new methods added. Both take a string of one character and convert to a QChar (to call the C++ counterpart):
widthChar(string)
boundingRectChar(string)
Inside this class some renames were applied to avoid clashes with native Python functions. They are:
bin_()
,
hex_()
and
oct_()
. The only modification was the addition of the ‘_’ character.
As
QVariant
was removed, any function expecting it can receive any Python object (
None
是无效
QVariant
). The same rule is valid when returning something: the returned
QVariant
will be converted to its original Python object type.
When a method expects a
QVariant::Type
the programmer can use a string (the type name) or the type itself.
The C++ API of QtWidgets provides a macro called
qApp
that roughly expands to
QtWidgets::QApplication->instance()
.
In PySide, we tried to create a macro-like experience. For that, the
qApp
variable was implemented as a normal variable that lives in the builtins. After importing
PySide2
, you can immediately use
qApp
.
As a useful shortcut for the action “create an application if it was not created”, we recommend:
qApp or QtWidgets.QApplication()
or if you want to check if there is one, simply use the truth value:
if qApp:
# do something if an application was created
pass
Comparing to
None
is also possible, but slightly over-specified.
For testing purposes, you can also get rid of the application by calling:
qApp.shutdown()
As for 5.14.2, this is currently an experimental feature that is not fully tested.
In embedded mode, application objects that are pre-created in C++ don’t have a Python wrapper. The
qApp
variable is created together with a wrapped application. Therefore,
qApp
does not exist in that embedded mode. Please note that you always can use
QtWidgets.QApplication.instance()
代替。
我们还试着替代实现采用
qApp()
function that was more
pythonic
and problem free, but many people liked the
qApp
macro better for its brevity, so here it is.