Переопределение виджета QLabel в PyQT
Я новичок в PyQt
возможно, именно поэтому сталкиваюсь с этой проблемой. Я пытаюсь сделать компонент вставки для листов Excel. Для этого я использую QT для интерфейса и использую Qlabels
в родительском классе QMainWindow
, На основании позиции, выбранной из Qlist
Виджет, мало Qlabels
должен измениться на mainwindow
динамически компонент вставки
Как видно на картинке выше, этикетки WCAP-;
Номер детали и все, что ниже, должно динамически меняться при изменении выбранных элементов (при нажатии кнопки выбора). Но что происходит, если я выбираю другой элемент из списка, предыдущий ярлык остается, а новый ярлык перекрывает его, как видно из рисунка ниже, показывающего перекрытие ярлыков
Код ниже показывает, что всякий раз, когда нажимается кнопка "Выбрать", label2 (Qlabel2
), как я могу удалить предыдущую метку при каждом нажатии кнопки выбора, чтобы новая метка динамически заменяла старую метку.
Заранее большое спасибо.
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)
1 ответ
Вы видите новый QLabel
потому что вы создаете новый каждый раз, когда вы звоните Selected
, Я бы инициировал пользовательский интерфейс при создании виджета (в __init__
метод):
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()