It looks like you're new here. If you want to get involved, click one of these buttons!
Hi, Matthias!
I encountered problem with QTreeWidgetItem.setBackground
(both variants of calls) in 0.27.8 and 0.26.4. Sample code:
import pya class Test_Dialog(pya.QDialog): def __init__(self, parent): super(Test_Dialog, self).__init__(parent) self.setWindowTitle('Test') self.resize(200, 200) vertical_layout = pya.QVBoxLayout(self) self.setLayout(vertical_layout) tree_widget = pya.QTreeWidget(self) header_labels = [] for column_name in ['Column', '1', '2']: header_labels.append(column_name) tree_widget.setHeaderLabels(header_labels) top_level_items = [] top_level_item = pya.QTreeWidgetItem(tree_widget) top_level_item.setText(0, 'Test') top_level_item.setCheckState(1, pya.Qt_CheckState.Checked) top_level_item.setCheckState(2, pya.Qt_CheckState.Unchecked) for column_index in range(top_level_item.columnCount()): # top_level_item.setBackground(column_index, pya.QBrush(pya.Qt_GlobalColor.yellow)) top_level_item.setBackground(column_index, pya.QBrush(pya.QColor(0xFF, 0xFF, 0x00))) tree_widget.addTopLevelItems(top_level_items) tree_widget.expandAll() for column_index in range(tree_widget.headerItem.columnCount()): tree_widget.resizeColumnToContents(column_index) vertical_layout.addWidget(tree_widget) def test(): Test_Dialog(pya.Application.instance().main_window()).exec_()
Stack trace (reduced to fit forum requirements) on Ubuntu 18.04:
Signal number: 11 Address: 0x7fa2a4daf630 Program Version: KLayout 0.27.8 (2022-02-13 rcbd805f8e) Backtrace: /usr/lib/klayout/libklayout_lay.so.0 +0x2af223 lay::enable_signal_handler_gui(bool) [??:?] /lib/x86_64-linux-gnu/libc.so.6 +0x3ef10 killpg [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x2e3bf6 QBrush::QBrush(QBrush const&) [??:?] /usr/lib/klayout/libklayout_QtGui.so.0 +0xc99421 non-virtual thunk to gsi::VariantUserClass::~VariantUserClass() [??:?] /usr/lib/klayout/libklayout_pya.so.0 +0x355a7 pya::python2c_func::operator()(_object*) [??:?] /usr/lib/klayout/libklayout_pya.so.0 +0x39741 tl::Channel::operator<<(char const*) [??:?] /usr/lib/klayout/libklayout_gsi.so.0 +0x4fd09 gsi::VariantAdaptor::copy_to(gsi::AdaptorBase*, tl::Heap&) const [??:?] /usr/lib/klayout/libklayout_QtGui.so.0 +0x25d64b1 gsi::qtdecl_QTreeWidgetItem() [??:?] /usr/lib/klayout/libklayout_pya.so.0 +0x54415 pya::PythonModule::init(char const*, _object*) [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x21353b _PyCFunction_FastCallDict [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x266ff1 _PyObject_FastCallDict [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x24c1a5 PyDescr_NewMethod [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x267768 PyObject_Call [??:?] /usr/lib/klayout/libklayout_pya.so.0 +0x493d1 pya::PYAObjectBase::destroy() [??:?] /usr/lib/klayout/libklayout_QtGui.so.0 +0x25dcac2 gsi::VariantUserClass<QTreeWidgetItem>::~VariantUserClass() [??:?] /usr/lib/klayout/libklayout_QtGui.so.0 +0x25ca85a gsi::qtdecl_QTreeWidgetItem() [??:?] /usr/lib/klayout/libklayout_pya.so.0 +0x54415 pya::PythonModule::init(char const*, _object*) [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x21353b _PyCFunction_FastCallDict [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x17c1ec _PyFunction_FastCallDict [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x182303 _PyEval_EvalFrameDefault [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x17ba0f _PyEval_GetBuiltinId [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x17bd34 _PyFunction_FastCallDict [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x266fd1 _PyObject_FastCallDict [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x2676fd _PyObject_Call_Prepend [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x267768 PyObject_Call [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x1f4739 PyUnicode_Encode [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x1fc1c2 PySet_Clear [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x266f29 _PyObject_FastCallDict [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x17bec8 _PyFunction_FastCallDict [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x182303 _PyEval_EvalFrameDefault [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x17a803 _PyEval_SliceIndex [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x17c2be _PyFunction_FastCallDict [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x182303 _PyEval_EvalFrameDefault [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x17ba0f _PyEval_GetBuiltinId [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x17c4ce PyEval_EvalCodeEx [??:?] /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 +0x17d24b PyEval_EvalCode [??:?] /usr/lib/klayout/libklayout_pya.so.0 +0x2fba2 pya::PythonInterpreter::eval_string(char const*, char const*, int, int) [??:?] /usr/lib/klayout/libklayout_lym.so.0 +0x464e4 lym::Macro::run() const [??:?] /usr/lib/klayout/libklayout_laybasic.so.0 +0x26ad77 lay::Action::qaction_triggered() [??:?] /usr/lib/x86_64-linux-gnu/libQtCore.so.4 +0x19ef70 QMetaObject::activate(QObject*, QMetaObject const*, int, void**) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x1bedc2 QAction::triggered(bool) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x1c0113 QAction::activate(QAction::ActionEvent) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x62236d QMenu::highlighted(int) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x626759 QMenu::internalDelayedPopup() [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x21b930 QWidget::event(QEvent*) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x62a96b QMenu::event(QEvent*) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x1c503c QApplicationPrivate::notify_helper(QObject*, QEvent*) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x1cc136 QApplication::notify(QObject*, QEvent*) [??:?] /usr/lib/klayout/libklayout_lay.so.0 +0x10b5b6 lay::GuiApplication::notify(QObject*, QEvent*) [??:?] /usr/lib/x86_64-linux-gnu/libQtCore.so.4 +0x18a8ad QCoreApplication::notifyInternal(QObject*, QEvent*) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x1cb73d QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer&, bool) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x249ddc QApplication::x11ProcessEvent(_XEvent*) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x248ce3 QApplication::x11ProcessEvent(_XEvent*) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x272592 QPaintDevice::devType() const [??:?] /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 +0x4c537 g_main_context_dispatch [??:?] /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 +0x4c770 g_main_context_dispatch [??:?] /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 +0x4c7fc g_main_context_iteration [??:?] /usr/lib/x86_64-linux-gnu/libQtCore.so.4 +0x1bb20e QEventDispatcherGlib::processEvents(QFlags) [??:?] /usr/lib/x86_64-linux-gnu/libQtGui.so.4 +0x272666 QPaintDevice::devType() const [??:?] /usr/lib/x86_64-linux-gnu/libQtCore.so.4 +0x18912f QEventLoop::processEvents(QFlags) [??:?] /usr/lib/x86_64-linux-gnu/libQtCore.so.4 +0x189495 QEventLoop::exec(QFlags) [??:?] /usr/lib/x86_64-linux-gnu/libQtCore.so.4 +0x18f459 QCoreApplication::exec() [??:?] /usr/lib/klayout/libklayout_lay.so.0 +0x10ce65 lay::GuiApplication::exec() [??:?] /usr/lib/klayout/libklayout_lay.so.0 +0x10dd87 lay::ApplicationBase::run() [??:?] /usr/bin/klayout +0x333b ?? [??:0] ... /usr/bin/klayout +0x2a4a ?? [??:0]
Comments
@EugeneZelenko Thanks for this report and the nice test case.
I can reproduce it and the problem is due to an internal loss of ownership of the QBrush object. I have created a ticket for this problem: https://github.com/KLayout/klayout/issues/1029. It will be fixed in the next minor release.
Thanks and best regards,
Matthias