LIshy2 Asked:2020-03-02 03:41:36 +0000 UTC2020-03-02 03:41:36 +0000 UTC 2020-03-02 03:41:36 +0000 UTC Pyqt 5更改QListWidget中的当前项目[关闭] 772 每次更改选定的小部件时,我都QListWidget需要更改其他小部件。 怎么做? python 2 个回答 Voted Best Answer S. Nick 2020-03-02T04:41:55Z2020-03-02T04:41:55Z 一个信号的实际应用例子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_()) LIshy2 2020-03-02T04:05:19Z2020-03-02T04:05:19Z 需要使用currentRowChanged
一个信号的实际应用例子
currentRowChanged,明白问的问题的本质:需要使用
currentRowChanged