gpt4 book ai didi

python - QSpacerItem 在实例化两次时使 pyQT 崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:31 26 4
gpt4 key购买 nike

我一直在寻找我的 pyQt 应用程序中一个令人讨厌的退出时崩溃错误 https://github.com/chipmuenk/pyfda一年多了,偶然发现:下面的代码片段

    self.cmbResponseType = QtGui.QComboBox(self)
self.cmbFilterType = QtGui.QComboBox(self)
self.cmbDesignMethod = QtGui.QComboBox(self)

spacer = QtGui.QSpacerItem(1, 0, QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Fixed)

layHFilWdg = QtGui.QHBoxLayout() # container for filter subwidgets
layHFilWdg.addWidget(self.cmbResponseType)
layHFilWdg.addItem(spacer)
layHFilWdg.addWidget(self.cmbFilterType)
layHFilWdg.addItem(spacer)
layHFilWdg.addWidget(self.cmbDesignMethod)

将三个组合框放置在一个水平布局框中,它们之间的间距可变。

当我注释掉两个 layHFilWdg.addItem(spacer) 指令之一时,错误消失(退出时不再崩溃)。我正在使用 python 2.7 ... 3.5 和 pyQt 4.8。

我在应用程序中有很多选项卡式小部件(并且还有很多其他错误)并且在设计流程中工作过长时间以某种方式抑制错误,这就是为什么我花了这么长时间。只有在完全不相关的子部件中实例化了 matplotlib Canvas 时才会发生崩溃,这只是另一种怪异现象,让我找错了树很长一段时间......

有人知道上面代码的问题出在哪里吗?

最佳答案

这看起来像是 Python 垃圾收集器以 Qt 不期望的顺序删除对象的典型案例。多次向同一个布局添加间隔符可能会导致 Qt 尝试删除它两次,或者在它不再存在时将其删除。显而易见的解决方案很简单:不要那样做。

所以要么每次都创建一个新的垫片:

    def spacer():
return QtGui.QSpacerItem(
1, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)

...

layHFilWdg.addItem(spacer())

或者只使用布局的 addStretch() 方法:

    layHFilWdg.addWidget(self.cmbResponseType)
layHFilWdg.addStretch()

关于python - QSpacerItem 在实例化两次时使 pyQT 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39833793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com