我是PyQt
的新手,也许这就是为什么要面对这个问题。我正在尝试为Excel工作表制作组件插件。为此,我使用QT作为接口,并在Qlabels
的父类中使用QMainWindow
。根据从Qlist
窗口小部件中选择的项目,Qlabels
动态mainwindow
<{1}}上的WCAP-;
很少需要更改
从上图中可以看出,Qlabel2
零件编号等标签以及下面所有标签都需要在所选项目更改时动态更改(单击选择按钮时)。但是,如果我从列表中选择一个不同的项目,那么前一个标签会停留,新标签会重叠,如下图所示Component inserter
以下代码显示每当按钮&#34;选择&#34;按下&#34;,label2(def Display(self):
self.close()
label1 = QtGui.QLabel("Select the sheet",self)
label1.move(0,15)
self.listwidget = QtGui.QListWidget(self)
self.listwidget.move(0,40)
self.listwidget.resize(150,150)
for i in range(len(self.sheetnames)):
self.listwidget.addItem("%s"%self.sheetnames[i])
btn = QtGui.QPushButton('Select',self)
btn.resize(50,50)
btn.move(170,40)
btn.clicked.connect(self.Selected)
self.show()
def Selected(self):
self.close()
selecteditem = self.listwidget.currentItem().text()
self.sheetindex = self.sheetnames.index(selecteditem)
print self.sheetindex
aa = self.loadsheet.sheet_by_name(selecteditem)
global label2
label2 = QtGui.QLabel("",self)
label2.setText(selecteditem)
label2.move(0,190)
self.show()
self.InputParameters(aa)
),如果按下选择按钮,我怎么能删除以前的标签,以便新标签动态替换旧标签。
提前多多感谢。
template<class ValueType>
struct Param
{
static void add(ParameterCode code, ValueType value, ParameterAttributes attributes)
{
}
static PreSetResultType preSetActions(ParameterCode code, ValueType& value)
{
return (SUCCESS);
}
static void set(ParameterCode code, ValueType value)
{
}
static ValueType get(ParameterCode code)
{
ValueType value = ValueType();
return (value);
}
static void serialize(ParameterCode code, vector<uint8_t>& byteArray)
{
}
static ValueType deserialize(const vector<uint8_t>& byteArray)
{
return (*reinterpret_cast<const ValueType*>(byteArray.begin()));
}
};
/* template function specialization for pointer types */
template<class ValueType>
struct Param<ValueType*>
{
static void add(ParameterCode code, ValueType* value, ParameterAttributes attributes)
{
}
static PreSetResultType preSetActions(ParameterCode code, ValueType*& config)
{
return (SUCCESS);
}
static void set(ParameterCode code, ValueType* pObjNew)
{
pObjNew->serialize(serializedObject); //error line 54
}
static ValueType* get(ParameterCode code)
{
void* value = NULL;
return ((ValueType*)value);
}
static void serialize(ParameterCode code, vector<uint8_t>& byteArray)
{
ValueType* obj = get(code);
obj->serialize(byteArray); //error line 60
}
static ValueType* deserialize(const vector<uint8_t>& byteArray)
{
return (ValueType::deserialize(byteArray)); //error line 65
}
};
答案 0 :(得分:0)
您看到一个新的QLabel
,因为每次拨打Selected
时都会创建一个新的__init__
。我会在创建窗口小部件时启动UI(在def __init__(self):
self.label2 = QtGui.QLabel("",self)
方法中):
Qlabel
仅在执行Selected
时更新def Selected(self):
self.label2.setText(selecteditem)
的文字:
QLabel.setParent(None)
关于使用未知数量的标签重新初始化所有标签并删除旧标签,您可能需要查看from PyQt4 import QtGui, QtCore
import sys
class test(QtGui.QWidget):
def __init__(self,parent=None):
self.widget=QtGui.QWidget.__init__(self, parent)
# Button to add labels
self.btnAdd = QtGui.QPushButton('Add')
self.btnAdd.connect(self.btnAdd, QtCore.SIGNAL('clicked()'),self.btnAddPressed)
# Button to remove labels
self.btnRemove = QtGui.QPushButton('Remove')
self.btnRemove.connect(self.btnRemove, QtCore.SIGNAL('clicked()'), self.btnRemovePressed)
# List to keep track of labels
self.labels=[]
# Layout
self.hbox = QtGui.QHBoxLayout()
self.hbox.addWidget(self.btnAdd)
self.hbox.addWidget(self.btnRemove)
self.setLayout(self.hbox)
self.show()
def btnAddPressed(self):
"""Adds a new label."""
self.labels.append(QtGui.QLabel("lbl"+str(len(self.labels)+1), self))
self.hbox.addWidget(self.labels[-1])
def btnRemovePressed(self):
"""Removes last label."""
self.labels[-1].setParent(None)
self.labels.pop(-1)
def main():
#Creating application
app = QtGui.QApplication(sys.argv)
main_win = test()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
。我给你写了一个小例子:
NetInfo