覆盖PyQT中的QLabel小部件

时间:2017-01-24 09:13:57

标签: excel qt pyqt4 qlabel

我是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
    }
};

1 个答案:

答案 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