在PyQT中更改QToolBox选中项的图标
Change the Icon of the Selected Item of the QToolBox in PyQT
PyQT代码如下,
from PyQt5.QtWidgets import *
import sys
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
layout = QGridLayout()
self.setLayout(layout)
# Add toolbar and items
toolbox = QToolBox()
layout.addWidget(toolbox, 0, 0)
label = QLabel()
toolbox.addItem(label, "Students")
label = QLabel()
toolbox.addItem(label, "Teachers")
label = QLabel()
toolbox.addItem(label, "Directors")
app = QApplication(sys.argv)
screen = Window()
screen.show()
sys.exit(app.exec_())
我想要的是,每当该工具箱中的一个项目被 select 编辑时,它的图标应该从“直箭头”变为“向下箭头”,以表示该项目当前已打开,而其他项目正在打开关闭。现在,如果单击另一个项目,则第一个项目的箭头应再次更改回 arrow-straight
,并且现在单击的项目的箭头也会更改。
如何在 PyQT 中完成此操作?无论是来自设计师还是代码逻辑。
编辑:例如,看看下面这个设计师,
由于“注册详细信息”已 selected,因此我希望将其箭头替换为另一个图标(说“向下箭头”图标)。一旦我 select 工具箱中的其他项目(如 View Clashes),注册详细信息的箭头应替换为旧箭头,View Clashes 箭头应更改为另一个图标。
Pyuic 文件中的代码是这样的,
icon = QIcon()
icon.addFile(u":/icons/icons/arrow-right.svg", QSize(), QIcon.Normal, QIcon.Off)
self.toolBox.addItem(self.page_2, icon, u"Registration Details")
您可以在添加项目时设置一个默认图标,然后连接currentChanged
信号以设置另一个。
如果你创建一个包含两个图标的基本列表,设置合适的图标就更简单了,因为你只需要循环遍历所有项目并根据索引匹配设置图标。
class Test(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.arrowIcons = []
for direction in ('right', 'down'):
self.arrowIcons.append(QtGui.QIcon(
':/icons/icons/arrow-{}.svg'.format(direction)))
layout = QtWidgets.QVBoxLayout(self)
self.toolBox = QtWidgets.QToolBox()
layout.addWidget(self.toolBox)
self.toolBox.currentChanged.connect(self.updateIcons)
for i in range(5):
self.toolBox.addItem(
QtWidgets.QLabel(),
self.arrowIcons[0],
'Item {}'.format(i + 1))
def updateIcons(self, index):
for i in range(self.toolBox.count()):
self.toolBox.setItemIcon(i, self.arrowIcons[index == i])
PyQT代码如下,
from PyQt5.QtWidgets import *
import sys
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
layout = QGridLayout()
self.setLayout(layout)
# Add toolbar and items
toolbox = QToolBox()
layout.addWidget(toolbox, 0, 0)
label = QLabel()
toolbox.addItem(label, "Students")
label = QLabel()
toolbox.addItem(label, "Teachers")
label = QLabel()
toolbox.addItem(label, "Directors")
app = QApplication(sys.argv)
screen = Window()
screen.show()
sys.exit(app.exec_())
我想要的是,每当该工具箱中的一个项目被 select 编辑时,它的图标应该从“直箭头”变为“向下箭头”,以表示该项目当前已打开,而其他项目正在打开关闭。现在,如果单击另一个项目,则第一个项目的箭头应再次更改回 arrow-straight
,并且现在单击的项目的箭头也会更改。
如何在 PyQT 中完成此操作?无论是来自设计师还是代码逻辑。
编辑:例如,看看下面这个设计师,
由于“注册详细信息”已 selected,因此我希望将其箭头替换为另一个图标(说“向下箭头”图标)。一旦我 select 工具箱中的其他项目(如 View Clashes),注册详细信息的箭头应替换为旧箭头,View Clashes 箭头应更改为另一个图标。
Pyuic 文件中的代码是这样的,
icon = QIcon()
icon.addFile(u":/icons/icons/arrow-right.svg", QSize(), QIcon.Normal, QIcon.Off)
self.toolBox.addItem(self.page_2, icon, u"Registration Details")
您可以在添加项目时设置一个默认图标,然后连接currentChanged
信号以设置另一个。
如果你创建一个包含两个图标的基本列表,设置合适的图标就更简单了,因为你只需要循环遍历所有项目并根据索引匹配设置图标。
class Test(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.arrowIcons = []
for direction in ('right', 'down'):
self.arrowIcons.append(QtGui.QIcon(
':/icons/icons/arrow-{}.svg'.format(direction)))
layout = QtWidgets.QVBoxLayout(self)
self.toolBox = QtWidgets.QToolBox()
layout.addWidget(self.toolBox)
self.toolBox.currentChanged.connect(self.updateIcons)
for i in range(5):
self.toolBox.addItem(
QtWidgets.QLabel(),
self.arrowIcons[0],
'Item {}'.format(i + 1))
def updateIcons(self, index):
for i in range(self.toolBox.count()):
self.toolBox.setItemIcon(i, self.arrowIcons[index == i])