PySide6 QDateEdit关闭弹窗致系统崩溃问题咨询
PySide6 QDateEdit关闭日历弹窗触发系统崩溃问题分析
问题现象
在Ubuntu 22.04环境中,使用PySide6创建启用日历弹窗的QDateEdit控件,点击唤起日历弹窗后,再次点击箭头或通过其他方式关闭弹窗时,会直接导致gnome-shell崩溃(系统日志/var/log/syslog中记录gnome-shell[4736]: GNOME Shell crashed with signal 11),进而引发整个系统崩溃。
最小可复现代码如下:
from PySide6 import QtWidgets class DateEditGui(QtWidgets.QMainWindow): def __init__(self): super().__init__() widget = QtWidgets.QWidget() self.vertical_layout = QtWidgets.QVBoxLayout() self.date_picker = QtWidgets.QDateEdit() self.date_picker.setCalendarPopup(True) self.vertical_layout.addWidget(self.date_picker) widget.setLayout(self.vertical_layout) self.setCentralWidget(widget) app = QtWidgets.QApplication() window = DateEditGui() window.show() app.exec_()
环境与测试对比
- 崩溃触发环境:Ubuntu 22.04、Python 3.10.6、PySide6 6.4.0.1、Wayland显示服务器
- 无问题场景:
- 将显示服务器切换为Xorg后,功能恢复正常
- 替换为PySide2时,示例代码可正常运行
- 在Ubuntu 20.04 + Python 3.9 + PySide6环境下,QDateEdit功能无异常
问题归属判断
这是Qt与Ubuntu 22.04上Wayland环境的兼容性问题,属于已知的Qt适配Bug,并非仅PySide6独有:
- 问题根源在于Qt 6.4.x版本与Ubuntu 22.04自带的Wayland compositor(gnome-shell)交互逻辑存在冲突,导致gnome-shell收到SIGSEGV信号崩溃
- PySide2基于Qt 5,Qt 5对Wayland的适配逻辑与Qt 6不同,因此未触发该问题;Ubuntu 20.04的gnome-shell版本及Wayland栈与22.04存在差异,也避开了这个冲突点
内容的提问来源于stack exchange,提问作者Merlin1896
相关产品推荐
相关产品推荐

