我有一个QGridLayout,在启动时会填充一些QLabel和QLineEdits。我的QGridlayout的第一行是各列的标题。我使用此功能。
def add_row(self, idx, name, units, is_read_only=False):
row = idx + 1
# Add name
text = QLabel(name + ':', self)
text.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum))
col = 0
self.gridLayout.addWidget(text, row, col)
# Add read values
col = 1
self.read_values[name] = QLineEdit("", self)
self.read_values[name].setMinimumHeight(20)
#self.read_values[name].setMaximumWidth(260)
self.read_values[name].setMinimumWidth(150)
self.read_values[name].setReadOnly(True)
self.gridLayout.addWidget(self.read_values[name], row, col)
效果很好。
在某些时候,我必须删除QGridLayout的内容。
然后我执行以下操作以删除小部件,然后从布局中删除然后从布局中删除,同时将第一行保留在标题(列标题)所在的位置。
def clear_grid_layout(self):
for i in reversed(range(self.gridLayout.count())):
row, col, d,e = self.gridLayout.getItemPosition(i)
if row == 0:
continue
widgetToRemove = self.gridLayout.itemAt(i).widget()
self.gridLayout.removeWidget(widgetToRemove)
widgetToRemove.deleteLater()
当尝试重新添加小部件时,我使用正确的参数重用了上面的相同功能
目前,我希望这些小部件会出现在gridlayout中,但是它们是在实际软件之外创建的。
当我检查时,QLabel对象text.parent()返回None。即使我尝试设置text.setParent(self),它也会一直返回None。
答案 0 :(得分:0)
我正在回答自己的问题。我忘记了“除了MainThread外,不要尝试更改GUI”。就在午餐之前,我意识到我已经忘记了这一点(再次!)。我添加了一个简单的信号/插槽连接来跳转线程,并且.....有效。
foo