Pyqt 5 изменение текущий элемент в QListWidget
Мне при каждом изменении выбранного в QListWidget нужно менять другие виджеты, как это сделать?
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Пример практического применения сигнала currentRowChanged , для понимания сути заданного вопроса:
import sys
from random import randint
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import (QApplication, QWidget, QListWidget, QStackedWidget,
QHBoxLayout, QListWidgetItem, QLabel)
class LeftTabWidget(QWidget):
def __init__(self, *args, **kwargs):
super(LeftTabWidget, self).__init__(*args, **kwargs)
self.resize(800, 600)
# Левый и правый макет (один QListWidget слева + QStackedWidget справа)
layout = QHBoxLayout(self, spacing=0)
layout.setContentsMargins(0, 0, 0, 0)
# QListWidget слева
self.listWidget = QListWidget(self)
layout.addWidget(self.listWidget)
# QStackedWidget справа
self.stackedWidget = QStackedWidget(self)
layout.addWidget(self.stackedWidget)
self.initUi()
def initUi(self):
# Интерфейс инициализации
# Переключить порядковый номер в QStackedWidget на текущее изменение элемента QListWidget
self.listWidget.currentRowChanged.connect(
self.stackedWidget.setCurrentIndex)
# Удалить border
self.listWidget.setFrameShape(QListWidget.NoFrame)
# Скрыть полосу прокрутки
self.listWidget.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.listWidget.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
# Здесь мы используем общий текст с режимом значков
# (вы также можете использовать режим значков, setViewMode напрямую)
for i in range(5):
item = QListWidgetItem(
QIcon('Ok.png'), str('Option %s' % i), self.listWidget)
# Установите ширину и высоту элемента по умолчанию (здесь полезна только высота)
item.setSizeHint(QSize(16777215, 60))
# Текст по центру
item.setTextAlignment(Qt.AlignCenter)
# Имитация 5 правых страниц
for i in range(5):
label = QLabel('Это страница %d' % i, self)
label.setAlignment(Qt.AlignCenter)
# Установить цвет фона метки (случайно)
# добавлено поле margin (чтобы легко различать цвета QStackedWidget и QLabel)
label.setStyleSheet('background: rgb(%d, %d, %d); margin: 50px;' % (
randint(0, 255), randint(0, 255), randint(0, 255)))
self.stackedWidget.addWidget(label)
# style sheet
Stylesheet = """
QListWidget, QListView, QTreeWidget, QTreeView {
outline: 0px;
}
QListWidget {
min-width: 120px;
max-width: 120px;
color: white;
background: black;
}
QListWidget::item:selected {
background: rgb(52, 52, 52);
border-left: 2px solid rgb(9, 187, 7);
}
HistoryPanel::item:hover {background: rgb(52, 52, 52);}
QStackedWidget {background: rgb(30, 30, 30);}
QLabel {color: white;}
"""
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setStyleSheet(Stylesheet)
w = LeftTabWidget()
w.show()
sys.exit(app.exec_())
