【问题标题】:Setting border for checkable QListWidgetItem为可检查的 QListWidgetItem 设置边框
【发布时间】:2020-10-09 11:26:07
【问题描述】:

我添加了一些可检查的 QListWidgetItem,并且我在为复选框设置边框颜色时遇到了挑战。 setForeground 函数只设置复选框文本的颜色。 请有任何建议。

这是我创建可检查 QListWidgetItems 的示例代码:

    watch_list = ["Protesters", "Local news staff", "Techfluencers"]
    for category in watch_list:
        self.checkBox = QtWidgets.QListWidgetItem(category)
        self.checkBox.setFlags(self.checkBox.flags() | QtCore.Qt.ItemIsUserCheckable)
        self.checkBox.setCheckState(QtCore.Qt.Unchecked)
        self.checkBox.setForeground(QtGui.QColor('#FFFFFF'))
        self.watchListslistWidget.addItem(self.checkBox)

我试过了

     self.watchListslistWidget.setStyleSheet("""
                                            QListWidget::item {              
                                                 border:1px #FFFFFF
                                            }
                                        """)

但是它将 QListWidget 的所有背景设置为白色。

【问题讨论】:

  • 您的问题令人困惑,因为当您指示复选框边框的颜色时,您的意思是什么?项目的边框还是复选框方块?
  • 复选框方块的边框。

标签: python pyqt pyqt5 qlistwidget


【解决方案1】:

您可以使用委托:

from PyQt5 import QtCore, QtGui, QtWidgets


class CheckBoxDelegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super().initStyleOption(option, index)
        option.palette.setBrush(QtGui.QPalette.Button, QtGui.QColor("red"))


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.watchListslistWidget = QtWidgets.QListWidget()
        self.setCentralWidget(self.watchListslistWidget)

        watch_list = ["Protesters", "Local news staff", "Techfluencers"]
        for category in watch_list:
            checkBox = QtWidgets.QListWidgetItem(category)
            checkBox.setFlags(checkBox.flags() | QtCore.Qt.ItemIsUserCheckable)
            checkBox.setCheckState(QtCore.Qt.Unchecked)
            self.watchListslistWidget.addItem(checkBox)

        delegate = CheckBoxDelegate(self.watchListslistWidget)
        self.watchListslistWidget.setItemDelegate(delegate)


def main():
    import sys

    app = QtWidgets.QApplication(sys.argv)

    w = MainWindow()
    w.show()

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

【讨论】:

  • 我已经测试了您的代码,但在复选框正方形的边框上看不到任何颜色设置
  • @B.Obilo 尝试添加app.setStyle("fusion")
【解决方案2】:

我通过使用指标使其工作如下:

self.watchListslistWidget.setStyleSheet("""
                                       QListWidget::indicator{
                                            border: 1px solid white;
                                       }
                                       """)

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 1970-01-01
    • 2014-02-10
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多