如何访问作为 List 中的 Box 的小部件

Posted

技术标签:

【中文标题】如何访问作为 List 中的 Box 的小部件【英文标题】:How access widget that is a Box in a List 【发布时间】:2020-07-25 16:00:33 【问题描述】:

在下面的代码中,我正在访问垂直滚动列表,并且 e 设置为我所追求的条目。

我认为这只是一个具有 2 个小部件的 QHLayout 的小部件,但我尝试访问失败。

通过下面的尝试,我得到 builtin_function_or_method' 对象没有属性 'hbox

class GDMLColourMapEntry(QtGui.QWidget) :
    def __init__(self,colour,material) :
        super().__init__()
        print('Map Entry : '+str(colour))
        self.colour = colour
        self.hbox = QtGui.QHBoxLayout()
        self.hbox.addWidget(GDMLColour(colour))
        self.hbox.addWidget(material)
        self.setLayout(self.hbox)

    def dataPicker(self):
        print('DataPicker')


class GDMLColourMapList(QtGui.QScrollArea) :
    def __init__(self,matList) :
        super().__init__()
        # Scroll Area which contains the widgets, set as the centralWidget
        # Widget that contains the collection of Vertical Box
        selfwidget = QtGui.QWidget()
        self.matList = matList
        # The Vertical Box that contains the Horizontal Boxes of  labels and buttons
        self.vbox = QtGui.QVBoxLayout()
        self.widget.setLayout(self.vbox)

        #Scroll Area Properties
        self.setVerticalScrollBarPolicy(QtGui.Qt.ScrollBarAlwaysOn)
        self.setHorizontalScrollBarPolicy(QtGui.Qt.ScrollBarAlwaysOff)
        self.setWidgetResizable(True)
        self.setWidget(self.widget)

    def addEntry(self, colour) :
        print('Add Entry')
        mat = GDMLMaterial(self.matList)
        self.vbox.addWidget(GDMLColourMapEntry(colour,mat))

     
class GDMLColourMap(QtGui.QDialog) :     
    #class GDMLColourMap(QtGui.QMainWindow) :
    def __init__(self, parent) :
        super(GDMLColourMap, self).__init__(parent, QtCore.Qt.Tool)
        self.initUI()

    def initUI(self):  
        self.result = userCancelled
        # create our window
        # define window           xLoc,yLoc,xDim,yDim
        self.setGeometry( 250, 250, 550, 350)
        self.setWindowTitle("Map FreeCAD Colours to GDML Materials")
        self.setMouseTracking(True)
        lay = QtGui.QGridLayout(self)

        materialList = self.getGDMLMaterials()
        self.mapList = GDMLColourMapList(materialList)
        mat = GDMLMaterial(self.matList)
        self.vbox.addWidget(GDMLColourMapEntry(colour,mat))
   
    def lookupColour(self, col) :
        print('Lookup Colour')
        idx = self.colorList.index(col)
        print(idx)
        e = self.mapList.vbox.itemAt(idx)
        print(e)
        f = e.hbox.itemAt(1)
        print(f)
        return(255)

【问题讨论】:

请改进缩进 新编辑后,缩进仍有问题。我建议您阅读如何正确format code,并记住始终检查预览以确保结果正确。 【参考方案1】:

固定为

def lookupColour(self, col) :
    print('Lookup Colour')
    idx = self.colorList.index(col)
    print(idx)
    entry = self.mapList.vbox.itemAt(idx).widget()
    print(entry)
    mat = entry.hbox.itemAt(1).widget().currentText()
    print(mat)
    return mat
    

【讨论】:

以上是关于如何访问作为 List 中的 Box 的小部件的主要内容,如果未能解决你的问题,请参考以下文章

Qt4:从 QDockedWidget 的子类访问 QtDesigner 创建的小部件

在 Qt 小部件中的视频顶部绘画

Kivy 如何访问子小部件中的小部件

如何访问 QTabWidget 不同选项卡中的小部件?

如何从stackedLayout访问centralWidget中的小部件?

访问 QTabWidget 中选项卡的小部件