如何访问作为 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 创建的小部件