This forum has been archived. All content is frozen. Please use KDE Discuss instead.

My first PyQt plasmoid crashes

Tags: None
(comma "," separated)
linuxoidoz
Registered Member
Posts
6
Karma
0
OS

My first PyQt plasmoid crashes

Tue Apr 20, 2010 2:15 am
Hello,

I am trying to write my first plasmoid in PyQt but when I try to view it in plasmaviewer it crashes with segmentation fault "Executable: plasmoidviewer PID: 23063 Signal: 11 (Segmentation fault)", here's the log:
Code: Select all
~/Develop/Python/plasmoids> plasmoidviewer qt-converter.plasmoid
plasmoidviewer(23614)/plasma main: setting FormFactor to "planar"
plasmoidviewer(23614)/plasma main: setting Location to "floating"
plasmoidviewer(23614)/plasma main: setting containment to "null"
plasmoidviewer(23614)/plasma main: setting auth policy
plasmoidviewer(23614)/plasma main: just load applet
plasmoidviewer(23614)/plasma FullView::addApplet: adding applet
"qt-converter.plasmoid" in "null"
plasmoidviewer(23614)/libplasma Plasma::CoronaPrivate::addContainment: loading
of containment "null" failed.
plasmoidviewer(23614)/kdecore (KSycoca): Trying to open ksycoca from 
"/var/tmp/kdecache-linuxoid/ksycoca4"
plasmoidviewer(23614)/libplasma Plasma::AppletPrivate::init: Check your
constructor!  You probably want to be passing in a Service::Ptr  or a
QVariantList with a valid storageid as arg[0].
plasmoidviewer(23614)/python (plugin)
KPythonPluginFactory::KPythonPluginFactory:
KPythonPluginFactory::KPythonPluginFactory()
plasmoidviewer(23614)/python (plugin) KPythonPluginFactory::initialize:
Initializing Python interpreter.
plasmoidviewer(23614)/python (plugin) KPythonPluginFactory::initialize:
Succesfully initialized Python interpreter.
plasmoidviewer(23614)/python (plugin) KPythonPluginFactory::create:
KPythonPluginFactory::create iface:  Plasma::AppletScript
plasmoidviewer(23614)/python (plugin) KPythonPluginFactory::create: keyword to
be used for finding the plugin code: 
"plasma_scriptengine_python/pyappletscript.py"
plasmoidviewer(23614)/python (plugin) KPythonPluginFactory::create: Path to
plugin code is: 
"/usr/share/kde4/apps/plasma_scriptengine_python/pyappletscript.py"
plasmoidviewer(23614)/python (plugin) KPythonPluginFactory::create: Returning
result qobject
plasmoidviewer(23614)/libplasma Plasma::AppletPrivate::setupScriptSupport:
setting up script support, package is in
"/home/linuxoid/Develop/Python/plasmoids/qt-converter.plasmoid/" which is a
"Plasmoid" package , main script is
"/home/linuxoid/Develop/Python/plasmoids/qt-converter.plasmoid/contents/code/main.py"
plasmoidviewer(23614)/libplasma Plasma::Package::filePath:
"/home/linuxoid/Develop/Python/plasmoids/qt-converter.plasmoid/contents/locale"
does not exist
plasmoidviewer(23614)/libplasma Plasma::Package::filePath:
"/home/linuxoid/Develop/Python/plasmoids/qt-converter.plasmoid/contents/config/main.xml"
 does not exist
plasmoidviewer(23614)/libplasma Plasma::Package::filePath:
"/home/linuxoid/Develop/Python/plasmoids/qt-converter.plasmoid/contents/ui/config.ui"
 does not exist
KCrash: Application 'plasmoidviewer' crashing...
sock_file=/home/linuxoid/.kde4/socket-linuxoid/kdeinit4__0

[1]+  Stopped                 plasmoidviewer qt-converter.plasmoid


Here's my main.py file below. I have a stand alone application and it works fine. It must be something to do with plasma. What am I doing wrong? Will greatly appreciate your help. Thank you.

Code:
Code: Select all
# -*- coding: utf-8 -*-

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyKDE4.plasma import Plasma
from PyKDE4 import plasmascript
 
class PyQtConverter(plasmascript.Applet):
    def __init__(self,parent,args=None):
        plasmascript.Applet.__init__(self,parent)
 
    def init(self):
        self.setHasConfigurationInterface(False)
        self.setAspectRatioMode(Plasma.Square)
 
        self.theme = Plasma.Svg(self)
        self.theme.setImagePath("widgets/background")
        self.setBackgroundHints(Plasma.Applet.DefaultBackground)

        self.mainWidget = QWidget()
        self.scene = QGraphicsScene()
        self.mainGraphicsWidget = self.scene.addWidget(self.mainWidget)

        self.btnSize = QSize(50, 50)
        self.iconSize = QSize(40, 40)
       
        self.iconFind = QIcon(":/myresources/icons/search.svg")
        self.iconCheck = QIcon(":/myresources/icons/check.svg")
        self.iconAbout = QIcon(":/myresources/icons/about.svg")

        sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
       
        self.btnCheck = QPushButton(self.iconCheck, "", self.mainWidget)
        self.btnCheck.setIconSize(self.iconSize)
       
        sizePolicy.setHeightForWidth(self.btnCheck.sizePolicy().hasHeightForWidth())
        self.btnCheck.setSizePolicy(sizePolicy)
        self.btnCheck.setMinimumSize(self.btnSize)
        self.btnFind = QPushButton(self.iconFind, "", self.mainWidget)
        self.btnFind.setIconSize(self.iconSize)
       
        sizePolicy.setHeightForWidth(self.btnFind.sizePolicy().hasHeightForWidth())
        self.btnFind.setSizePolicy(sizePolicy)
        self.btnFind.setMinimumSize(self.btnSize)
        self.btnAbout = QPushButton(self.iconAbout, "", self.mainWidget)
        self.btnAbout.setIconSize(self.iconSize)
       
        sizePolicy.setHeightForWidth(self.btnAbout.sizePolicy().hasHeightForWidth())
        self.btnAbout.setSizePolicy(sizePolicy)
        self.btnAbout.setMinimumSize(self.btnSize)
       
        self.hbToolbar = QHBoxLayout()
        self.hbToolbar.sizeConstraint = QLayout.SetDefaultConstraint
        self.hbToolbar.addWidget(self.btnCheck)
        self.hbToolbar.addWidget(self.btnFind)
        self.hbToolbar.addWidget(self.btnAbout)
       
        self.mainLayout = QVBoxLayout(self.mainWidget)
        self.mainLayout.sizeConstraint = QLayout.SetDefaultConstraint
        self.mainLayout.addLayout(self.hbToolbar)

        self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet)
        self.layout.addItem(self.mainGraphicsWidget)
       
        self.applet.setLayout(self.layout)
        self.resize(125,125)

 
def CreateApplet(parent):
    return PyQtConverter(parent)
User avatar
bcooksley
Administrator
Posts
19765
Karma
87
OS

Re: My first PyQt plasmoid crashes

Tue Apr 20, 2010 6:54 am
Have you tried generating a backtrace using Dr Konqi?


KDE Sysadmin
[img]content/bcooksley_sig.png[/img]
linuxoidoz
Registered Member
Posts
6
Karma
0
OS

Re: My first PyQt plasmoid crashes

Tue Apr 20, 2010 9:40 pm
Sorry, i'm new to this. Can you please repeat this in english? What's a backtrace and who's Dr Konqi?
User avatar
bcooksley
Administrator
Posts
19765
Karma
87
OS

Re: My first PyQt plasmoid crashes

Wed Apr 21, 2010 5:46 am
When the application you are using to test your Plasmoid, "plasmoidviewer" crashes, the Crash Assistant should start and if you select the "Developer Information" tab it will generate a backtrace which can be used to find the cause of the crash.


KDE Sysadmin
[img]content/bcooksley_sig.png[/img]
linuxoidoz
Registered Member
Posts
6
Karma
0
OS

Re: My first PyQt plasmoid crashes

Thu Apr 22, 2010 11:24 am
Here it is:
Code: Select all
Application: Plasma Widget Viewer (plasmoidviewer), signal: Segmentation fault
[KCrash Handler]
#5  0x00007fb837d3abc7 in QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem*, QVariant const*, QVariant const*) () from /usr/lib64/libQtGui.so.4
#6  0x00007fb837d3b1da in QGraphicsItem::setParentItem(QGraphicsItem*) () from /usr/lib64/libQtGui.so.4
#7  0x00007fb837d55e44 in QGraphicsLinearLayout::insertItem(int, QGraphicsLayoutItem*) () from /usr/lib64/libQtGui.so.4
#8  0x00007fb81d7db003 in ?? () from /usr/lib64/python2.6/site-packages/PyQt4/QtGui.so
#9  0x00007fb81e63fbf9 in PyEval_EvalFrameEx () from /usr/lib64/libpython2.6.so.1.0
#10 0x00007fb81e640194 in PyEval_EvalFrameEx () from /usr/lib64/libpython2.6.so.1.0
#11 0x00007fb81e64454e in PyEval_EvalCodeEx () from /usr/lib64/libpython2.6.so.1.0
#12 0x00007fb81e5e27f2 in ?? () from /usr/lib64/libpython2.6.so.1.0
#13 0x00007fb81e5c2e32 in PyObject_Call () from /usr/lib64/libpython2.6.so.1.0
#14 0x00007fb81e5cf010 in ?? () from /usr/lib64/libpython2.6.so.1.0
#15 0x00007fb81e5c2e32 in PyObject_Call () from /usr/lib64/libpython2.6.so.1.0
#16 0x00007fb81e63dea6 in PyEval_CallObjectWithKeywords () from /usr/lib64/libpython2.6.so.1.0
#17 0x00007fb81dd19d5b in ?? () from /usr/lib64/python2.6/site-packages/sip.so
#18 0x00007fb81dfbb98c in ?? () from /usr/lib64/python2.6/site-packages/PyQt4/QtCore.so
#19 0x00007fb81d0ab212 in sipPlasma_AppletScript::init() () from /usr/lib64/python2.6/site-packages/PyKDE4/plasma.so
#20 0x00007fb838c1a4ba in Plasma::Applet::init() () from /usr/lib64/libplasma.so.3
#21 0x00007fb838c30568 in Plasma::Containment::addApplet(Plasma::Applet*, QPointF const&, bool) () from /usr/lib64/libplasma.so.3
#22 0x0000000000407059 in _start ()
User avatar
bcooksley
Administrator
Posts
19765
Karma
87
OS

Re: My first PyQt plasmoid crashes

Fri Apr 23, 2010 7:09 am
The crash is caused by the following line of your Plasmoid.

Code: Select all
self.layout = QGraphicsLinearLayout(Qt.Horizontal, self.applet)


It crashes on this line in particular though:
Code: Select all
self.layout.addItem(self.mainGraphicsWidget)


I don't see self.applet used anywhere else, hence this is probably invalid, and causing the crash.


KDE Sysadmin
[img]content/bcooksley_sig.png[/img]
linuxoidoz
Registered Member
Posts
6
Karma
0
OS

Re: My first PyQt plasmoid crashes

Mon Apr 26, 2010 11:23 am
Still crashes after I removed 'self.applet':
Code: Select all
Application: Plasma Widget Viewer (plasmoidviewer), signal: Segmentation fault
[KCrash Handler]
#5  0x00007f0318f2cbc7 in QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem*, QVariant const*, QVariant const*) () from /usr/lib64/libQtGui.so.4
#6  0x00007f0318f2d1da in QGraphicsItem::setParentItem(QGraphicsItem*) () from /usr/lib64/libQtGui.so.4
#7  0x00007f0318f45d17 in ?? () from /usr/lib64/libQtGui.so.4
#8  0x00007f0318f88295 in QGraphicsWidget::setLayout(QGraphicsLayout*) () from /usr/lib64/libQtGui.so.4
#9  0x00007f02fe9c662e in ?? () from /usr/lib64/python2.6/site-packages/PyQt4/QtGui.so
#10 0x00007f02ff831bf9 in PyEval_EvalFrameEx () from /usr/lib64/libpython2.6.so.1.0
#11 0x00007f02ff832194 in PyEval_EvalFrameEx () from /usr/lib64/libpython2.6.so.1.0
#12 0x00007f02ff83654e in PyEval_EvalCodeEx () from /usr/lib64/libpython2.6.so.1.0
#13 0x00007f02ff7d47f2 in ?? () from /usr/lib64/libpython2.6.so.1.0
#14 0x00007f02ff7b4e32 in PyObject_Call () from /usr/lib64/libpython2.6.so.1.0
#15 0x00007f02ff7c1010 in ?? () from /usr/lib64/libpython2.6.so.1.0
#16 0x00007f02ff7b4e32 in PyObject_Call () from /usr/lib64/libpython2.6.so.1.0
#17 0x00007f02ff82fea6 in PyEval_CallObjectWithKeywords () from /usr/lib64/libpython2.6.so.1.0
#18 0x00007f02fef0bd5b in ?? () from /usr/lib64/python2.6/site-packages/sip.so
#19 0x00007f02ff1ad98c in ?? () from /usr/lib64/python2.6/site-packages/PyQt4/QtCore.so
#20 0x00007f02fe29d212 in sipPlasma_AppletScript::init() () from /usr/lib64/python2.6/site-packages/PyKDE4/plasma.so
#21 0x00007f0319e0c4ba in Plasma::Applet::init() () from /usr/lib64/libplasma.so.3
#22 0x00007f0319e22568 in Plasma::Containment::addApplet(Plasma::Applet*, QPointF const&, bool) () from /usr/lib64/libplasma.so.3
#23 0x0000000000407059 in _start ()


BTW, I used this tutorial as a basis and it has 'self/applet': http://techbase.kde.org/Development/Tut ... ng_widgets
User avatar
bcooksley
Administrator
Posts
19765
Karma
87
OS

Re: My first PyQt plasmoid crashes

Tue Apr 27, 2010 5:38 am
If you try running the Plasmoid code as shown in the tutorial does it work?


KDE Sysadmin
[img]content/bcooksley_sig.png[/img]
linuxoidoz
Registered Member
Posts
6
Karma
0
OS

Re: My first PyQt plasmoid crashes

Tue Apr 27, 2010 5:57 am
Yes, it does. If I display simple widgets (labels, buttons etc.), it all works fine. As soon as I start adding layouts and adding complex widgets (widgets with widgets and/or layouts), it starts crashing.
User avatar
bcooksley
Administrator
Posts
19765
Karma
87
OS

Re: My first PyQt plasmoid crashes

Thu Apr 29, 2010 5:15 am
I would recommend asking in #plasma on Freenode, who should be able to help you with this.


KDE Sysadmin
[img]content/bcooksley_sig.png[/img]


Bookmarks



Who is online

Registered users: Bing [Bot], Google [Bot], Sogou [Bot]