首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从QWidgets中获得子类QToolBox?

如何从QWidgets中获得子类QToolBox?
EN

Stack Overflow用户
提问于 2014-03-13 18:06:20
回答 1查看 635关注 0票数 0

我通过子类QWidget编写了一些定制的小部件类。我使用它们创建了一些定制的小部件,并将它们添加到QToolBox中。

代码语言:javascript
复制
class BaseWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        # initialize

    def mymethod():
        pass

class AWidget(BaseWidget):
    def __init__(self, parent=None):
        # initialize

    def mymethod():
        print "A"

class BWidget(BaseWidget):
    def __init__(self, parent=None):
        # initialize

    def mymethod():
        print "B"

现在,我想遍历添加到QToolBox中的所有小部件,并调用这些自定义小部件的方法:

代码语言:javascript
复制
class toolboxWidget(QtGui.QToolBox):
    def __init__(self, parent=None):
        super(toolboxWidget, self).__init__(parent=parent)
        a = AWidget(self)
        b = BWidget(self)
        self.addItem(a, "A")
        self.addItem(b, "B")

    def printMethod(self):
        for i in range(self.count()):
            self.widget(i).mymethod()

但是,由于widget()方法的QToolBox只返回QWidget类型的对象,所以当调用toolboxWidget对象的printMethod()时,会出现以下错误:

AttributeError:'QWidget‘对象没有属性'mymethod’。

有办法将widget()返回的widget()对象转换为BaseWidget对象吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-13 19:15:57

在修复了示例代码中所有明显的错误和遗漏之后,我能够让它在没有任何问题的情况下工作。

如果QToolBox.widget方法没有返回一个BaseWidget子类的实例,那么它将是PyQt (或sip)中的一个bug。

下面是一个适用于我的脚本,使用了sip 4.15.4和PyQt 4.10.3:

代码语言:javascript
复制
from PyQt4 import QtCore, QtGui

class BaseWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

    def mymethod(self):
        pass

class AWidget(BaseWidget):
    def __init__(self, parent=None):
        BaseWidget.__init__(self, parent)

    def mymethod(self):
        print "A"

class BWidget(BaseWidget):
    def __init__(self, parent=None):
        BaseWidget.__init__(self, parent)

    def mymethod(self):
        print "B"    

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.toolbox = QtGui.QToolBox(self)
        a = AWidget(self.toolbox)
        b = BWidget(self.toolbox)
        self.toolbox.addItem(a, "A")
        self.toolbox.addItem(b, "B")
        self.button = QtGui.QPushButton('Test', self)
        self.button.clicked.connect(self.printMethod)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.toolbox)
        layout.addWidget(self.button)

    def printMethod(self):
        for i in range(self.toolbox.count()):
            self.toolbox.widget(i).mymethod()

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.setGeometry(500, 300, 300, 300)
    window.show()
    sys.exit(app.exec_())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22387235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档