@@ -287,15 +287,17 @@ void PythonQt::init(int flags, const QByteArray& pythonQtModuleName)
287
287
QtDebugMsg,
288
288
QtWarningMsg,
289
289
QtCriticalMsg,
290
+ QtCriticalMsg,
290
291
QtFatalMsg,
291
- QtSystemMsg
292
+ QtCriticalMsg
292
293
};
293
294
const char * enumNames[] = {
294
295
" QtDebugMsg" ,
295
296
" QtWarningMsg" ,
296
- " QtCriticalMsg" ,
297
+ " QtCriticalMsg" , // Qt6 replacement of QtSystemMsg
298
+ " QtSystemMsg" , // Qt5 deprecated name QtSystemMsg
297
299
" QtFatalMsg" ,
298
- " QtSystemMsg "
300
+ " QtCriticalMsg "
299
301
};
300
302
301
303
for (auto i = 0u ; i < sizeof (enumValues)/sizeof (int ); i++) {
@@ -341,11 +343,71 @@ PythonQt::PythonQt(int flags, const QByteArray& pythonQtModuleName)
341
343
_p->_initFlags = flags;
342
344
343
345
if ((flags & PythonAlreadyInitialized) == 0 ) {
344
- Py_SetProgramName (const_cast <wchar_t *>(L" PythonQt" ));
346
+ #if PY_VERSION_HEX < 0x030C0000
347
+ // Python < 3.12: legacy initialization
348
+ Py_SetProgramName ((wchar_t *)L" PythonQt" );
349
+ Py_Initialize ();
350
+
351
+ #elif PY_VERSION_HEX < 0x030D0000
352
+ // Python 3.12: Py_SetProgramName is deprecated, use PyConfig
353
+ PyConfig config;
354
+ PyStatus status;
355
+
356
+ PyConfig_InitPythonConfig (&config);
357
+ status = PyConfig_SetString (&config, &config.program_name , L" PythonQt" );
358
+ if (PyStatus_Exception (status)) {
359
+ PyConfig_Clear (&config);
360
+ Py_ExitStatusException (status);
361
+ }
362
+
363
+ status = Py_InitializeFromConfig (&config);
364
+ PyConfig_Clear (&config);
365
+ if (PyStatus_Exception (status)) {
366
+ Py_ExitStatusException (status);
367
+ }
368
+
369
+ #else
370
+ // Python >= 3.13: Py_SetProgramName is removed
371
+ PyConfig config;
372
+ PyStatus status;
373
+
374
+ PyConfig_InitPythonConfig (&config);
375
+ status = PyConfig_SetString (&config, &config.program_name , L" PythonQt" );
376
+ if (PyStatus_Exception (status)) {
377
+ PyConfig_Clear (&config);
378
+ Py_ExitStatusException (status);
379
+ }
380
+
381
+ status = Py_InitializeFromConfig (&config);
382
+ PyConfig_Clear (&config);
383
+ if (PyStatus_Exception (status)) {
384
+ Py_ExitStatusException (status);
385
+ }
386
+ #endif
387
+
345
388
346
389
if (flags & IgnoreSiteModule) {
347
390
// this prevents the automatic importing of Python site files
391
+ #if PY_VERSION_HEX < 0x030B0000
392
+ // Python < 3.11 // Use legacy global flags
348
393
Py_NoSiteFlag = 1 ;
394
+ Py_Initialize ();
395
+ #elif PY_VERSION_HEX < 0x030D0000
396
+ // Python == 3.12
397
+ // Py_NoSiteFlag is deprecated (still available, but use PyConfig preferred)
398
+ PyConfig config;
399
+ PyStatus status;
400
+
401
+ PyConfig_InitPythonConfig (&config);
402
+ config.site_import = 0 ;
403
+
404
+ status = Py_InitializeFromConfig (&config);
405
+ PyConfig_Clear (&config);
406
+
407
+ if (PyStatus_Exception (status)) {
408
+ Py_ExitStatusException (status);
409
+ }
410
+ #endif
349
411
}
350
412
Py_Initialize ();
351
413
}
@@ -1155,7 +1217,13 @@ void PythonQt::removeVariable(PyObject* object, const QString& name)
1155
1217
if (PyDict_Check (object)) {
1156
1218
PyDict_DelItemString (object, QStringToPythonCharPointer (name));
1157
1219
} else {
1220
+ #if PY_VERSION_HEX < 0x030C0000
1158
1221
PyObject_DelAttrString (object, QStringToPythonCharPointer (name));
1222
+ #else
1223
+ PyObject *pname = PyUnicode_FromString (QStringToPythonCharPointer (name));
1224
+ PyObject_DelAttr (object, pname);
1225
+ Py_DECREF (pname);
1226
+ #endif
1159
1227
}
1160
1228
}
1161
1229
0 commit comments