PySide uygulamasında bir düzenden Qt widget'ını kaldırmaya çalışıyorum.PySide: Bir widget öğesinin düzeninden kaldırılması
İşte en az bir örnek. İçinde 5 düğmeleri olan bir widget ve tıklandığında Orta şerit kendisini kaldırmak gerekiyordu:
düğmesi açıkça tıklanamayan ve geçerli:
import sys
from PySide import QtGui
app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
layout = QtGui.QVBoxLayout()
buttons = [QtGui.QPushButton(str(x)) for x in xrange(5)]
def deleteButton():
b = layout.takeAt(2)
buttons.pop(2)
del b
buttons[2].clicked.connect(deleteButton)
map(layout.addWidget, buttons)
widget.setLayout(layout)
widget.show()
app.exec_()
gerçekte neler oluyor şudur Düzen hesaplamaları için dikkate alınmaz, ancak görüntüsü yerinde kalır. İşte
while ((child = layout->takeAt(0)) != 0) {
delete child;
}
Sadece üçüncü düğmeye silmek istiyorum, bu yüzden sadece aramak için daha sonra del b
takeAt(2)
arama ve:
Qt documentation göre, bir düzenden tüm nesneleri silme doğru yoldur Bu öğe üzerinde yıkıcı. Nesne için artık referans olmadığından emin olmak için, düğme nesnesi buttons
listesinden .pop
'd'dir. Kodum, Qt belgelerinde bu tür davranışlara neden olandan nasıl farklıdır?
Sadece gerçekten iyi oluşturulmuş bir sorudan dolayı sizi tebrik etmek istiyorum. Son zamanlarda o kadar çok şey görüyorum ki, sadece bağlamı olmayan birkaç cümle ya da okumamız beklenen büyük miktarda kod. Bu son derece özlü ve uygulanabilir kod örneği ile birlikte, belirtilen çok net bir soruna sahiptir. Resimleriniz ayrıca konuyu daha da netleştiriyor. Ve ne denediğini gösterirsin. Bravo! – jdi