QListWidget no muestra la fila seleccionada.
Hice una lista en mi programa y una función para reordenar (hacia arriba/abajo) las filas. Utilizo setCurrentRow()
para cambiar la fila seleccionada después de moverla, funciona bien pero la selección no se muestra en la lista.
¿Cómo puedo hacer eso?
PS: Intenté setSelectionRectVisible(True)
pero no sucede nada.
import sys
from PyQt5.QtWidgets import *
class MainWindow(QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__()
self.my_list = QListWidget(self)
self.my_list.setGeometry(5, 5, 90, 100)
QListWidgetItem("1", self.my_list)
QListWidgetItem("2", self.my_list)
QListWidgetItem("3", self.my_list)
QListWidgetItem("4", self.my_list)
self.upButton = QPushButton("Arriba", self)
self.upButton.move(100, 10)
self.upButton.clicked.connect(self.up)
self.downButton = QPushButton("Abajo", self)
self.downButton.move(100, 30)
self.downButton.clicked.connect(self.down)
def up(self, event):
w = self.my_list.currentRow()
if w > 0:
self.my_list.insertItem(w-1, self.my_list.currentItem().text())
self.my_list.takeItem(w+1)
self.my_list.setCurrentRow(w-1)
# self.my_list.setSelectionRectVisible(True)
def down(self, event):
w = self.my_list.currentRow()
if w < self.my_list.count()-1:
self.my_list.insertItem(w+2, self.my_list.currentItem().text())
self.my_list.takeItem(w)
self.my_list.setCurrentRow(w+1)
if __name__ == "__main__":
app = QApplication(sys.argv)
root = MainWindow()
root.show()
sys.exit(app.exec_())
Estaba creando este ejemplo simple para mostrarlo y funciona bien con el fondo predeterminado (gris).
Entonces mi problema es encontrar el nombre de la propiedad resaltada para establecerla.
davy.ai
Para mostrar la selección en la lista, puedes utilizar el método
setItemSelected()
de la claseQListWidget
para seleccionar y resaltar la fila después de reordenar. Así es como puedes modificar tu código para mostrar la selección:Ten en cuenta que también he modificado el código para tomar el elemento actual de la lista e insertarlo en la nueva posición, en lugar de simplemente insertar un nuevo elemento con el mismo texto. Esto garantiza que se conserven cualquier propiedad adicional del elemento (como icono o color de fondo) después de reordenar.