PyQt5组合框 按压时的不同边框颜色

  • Post category:Python

当用户在PyQt5应用程序中按下组合框(QComboBox)时,可以通过设置样式表(StyleSheet)来更改按下时的边框颜色。以下是完整的使用攻略:

步骤1:导入必需的库

首先,我们需要导入PyQt5库、QtWidgets库以及完整的Qt模块。

from PyQt5 import QtWidgets, QtGui, QtCore

步骤2:创建一个QComboBox对象

接下来,我们需要创建一个QComboBox对象并获取其下拉列表。

combobox = QtWidgets.QComboBox()
listview = combobox.view()

步骤3:设置StyleSheet

然后,我们可以使用setStyleSheet()方法来设置QComboBox对象的样式表。在这个例子中,我们将设置边框的颜色为红色,并且按压时将在边框周围显示一个2像素的红色阴影。

combobox.setStyleSheet('''
    QComboBox {
        border: 2px solid red;
        border-radius: 5px;
        padding: 1px 25px 1px 3px;
        min-width: 6em;
    }
    QComboBox::drop-down {
          subcontrol-origin: padding;
          subcontrol-position: center right;
          width: 25px;
    }
    QComboBox::down-arrow {
          image: url(./down_arrow.png);
    }
    QComboBox::down-arrow:on {
          top: 1px;
          left: 1px;
    }
    QListView {
        background-color: white;
        border: 1px solid red;
        color: black;
        margin-top: 2px;
        border-top: none;
        width: %dpx;
        height: %dpx;
    }
    QListView:item:selected {
          background: pink;
    }
''' % (combobox.width(), listview.height()+2))

示例1:更改边框颜色并添加阴影

import sys
from PyQt5 import QtWidgets, QtGui, QtCore

class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.initUi()

    def initUi(self):
        combobox = QtWidgets.QComboBox()
        combobox.setObjectName("combobox")
        layout = QtWidgets.QVBoxLayout()

        listview = combobox.view()
        combobox.insertItem(0, "Monday")
        combobox.insertItem(1, "Tuesday")
        combobox.insertItem(2, "Wednesday")
        combobox.insertItem(3, "Thursday")
        combobox.insertItem(4, "Friday")

        clockicon = QtGui.QPixmap("./down_arrow.png")
        combobox.setIconSize(QtCore.QSize(clockicon.width(), clockicon.height()))
        combobox.show()

        layout.addWidget(combobox)
        self.setLayout(layout)

        combobox.setStyleSheet('''
            QComboBox {
                border: 2px solid red;
                border-radius: 5px;
                padding: 1px 25px 1px 3px;
            }
            QComboBox::drop-down {
                  subcontrol-origin: padding;
                  subcontrol-position: center right;
                  width: 25px;
            }
            QComboBox::down-arrow {
                  image: url(./down_arrow.png);
            }
            QComboBox::down-arrow:on {
                  top: 1px;
                  left: 1px;
            }
            QListView {
                background-color: white;
                border: 1px solid red;
                color: black;
                margin-top: 2px;
                border-top: none;
                width: %dpx;
                height: %dpx;
                border-radius: 5px;
            }
            QListView:item:selected {
                  background: pink;
            }
            ''' % (combobox.width(), listview.height()+2))
        self.show()

app = QtWidgets.QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())

运行程序后,按压QComboBox时,将会显示带有红色边框和2像素红色阴影的组合框。

示例2:使用样式表设置组合框的背景色和前景色

import sys
from PyQt5 import QtWidgets, QtGui, QtCore

class Window(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.initUi()


    def initUi(self):
        combobox = QtWidgets.QComboBox()
        combobox.setObjectName("combobox")

        layout = QtWidgets.QVBoxLayout()
        listview = combobox.view()
        combobox.insertItem(0, "Monday")
        combobox.insertItem(1, "Tuesday")
        combobox.insertItem(2, "Wednesday")
        combobox.insertItem(3, "Thursday")
        combobox.insertItem(4, "Friday")
        combobox.show()

        clockicon = QtGui.QPixmap("./down_arrow.png")
        combobox.setIconSize(QtCore.QSize(clockicon.width(), clockicon.height()))

        combobox.setStyleSheet('''
            QComboBox {
                background-color: white;
                color: red;
                border: 2px solid red;
                border-radius: 5px;
                padding: 1px 25px 1px 3px;
            }
            QComboBox::drop-down {
                  subcontrol-origin: padding;
                  subcontrol-position: center right;
                  width: 25px;
            }
            QComboBox::down-arrow {
                  image: url(./down_arrow.png);
            }
            QComboBox::down-arrow:on {
                  top: 1px;
                  left: 1px;
            }
            QListView {
                background-color: white;
                border: none;
                color: black;
                margin-top: 2px;
                border-top: none;
                width: %dpx;
                height: %dpx;
                border-radius: 5px;
            }
            QListView:item:selected {
                  background: pink;
            }
            ''' % (combobox.width(), listview.height()+2))

        layout.addWidget(combobox)
        self.setLayout(layout)
        self.show()

app = QtWidgets.QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())

运行程序后,组合框的背景色将会为白色,前景色将会为红色,并带有红色边框。