首页 > 编程问答 >QComboBox列表设计

QComboBox列表设计

时间:2024-07-27 12:57:44浏览次数:11  
标签:python list qcombobox

我想自定义QComboBox列表背景。当我悬停时,我需要一个圆角框。我已附上当前图片和我需要的内容。

enter image description here

这是我的样式表代码

QComboBox {
    border: 1px solid black;
    background-color: white;
    font-size: 15pt;
    padding: 1px 18px 1px 3px; 
}

QComboBox::drop-down {
    subcontrol-origin: padding;
    subcontrol-position: top right;
    width: 18px;
    border-left-width: 1px;
    border-left-color: black;
    border-left-style: solid; 
    border-top-right-radius: 3px; 
    border-bottom-right-radius: 3px; 
    background-color: white;
}

QComboBox::down-arrow {
    image: url(:/Black/icons/feather/Black/chevron-down.svg);
    width: 15px; 
    height: 10px;
}

QComboBox:focus {
    border: 2px solid blue; 
}



为了实现 QComboBox 下拉列表悬停时的圆角框效果,你需要使用 QProxyStyle 来自定义样式。

以下是实现步骤以及代码示例:

1. 创建自定义样式类

创建一个继承自 QProxyStyle 的新类,并重写 drawPrimitive() 方法。在这个方法中,我们将处理 PE_PanelItemViewItem 元素,该元素代表下拉列表中的每一项。

from PyQt5.QtCore import QRect, QStyleOptionViewItem
from PyQt5.QtGui import QPainter, QColor, QPen
from PyQt5.QtWidgets import QStyle, QProxyStyle

class CustomComboBoxStyle(QProxyStyle):
    def drawPrimitive(self, element, option, painter, widget=None):
        if element == QStyle.PE_PanelItemViewItem:
            # 获取选项的矩形区域
            rect = option.rect

            # 如果选项处于悬停状态
            if option.state & QStyle.State_Selected:
                # 设置圆角矩形的半径
                radius = 5

                # 设置背景颜色
                painter.setBrush(QColor(200, 200, 255))

                # 创建圆角矩形路径
                path = QPainterPath()
                path.addRoundedRect(rect, radius, radius)

                # 绘制圆角矩形
                painter.setPen(QPen(Qt.NoPen))
                painter.drawPath(path)
            else:
                # 使用默认样式绘制其他状态
                super().drawPrimitive(element, option, painter, widget)
        else:
            # 使用默认样式绘制其他元素
            super().drawPrimitive(element, option, painter, widget)

2. 将自定义样式应用于 QComboBox

创建 QComboBox 对象后,将自定义样式应用于它。

from PyQt5.QtWidgets import QApplication, QComboBox, QVBoxLayout, QWidget

# ... (创建 CustomComboBoxStyle 类)

app = QApplication([])

# 创建 QComboBox 并添加选项
combo_box = QComboBox()
combo_box.addItems(["选项 1", "选项 2", "选项 3"])

# 创建自定义样式对象
style = CustomComboBoxStyle()

# 将自定义样式应用于 QComboBox
combo_box.setStyle(style)

# ... (将 QComboBox 添加到布局中)

app.exec_()

完整代码示例:

from PyQt5.QtCore import Qt, QRect
from PyQt5.QtGui import QPainter, QColor, QPen, QPainterPath
from PyQt5.QtWidgets import QApplication, QComboBox, QVBoxLayout, QWidget, QStyle, QProxyStyle

class CustomComboBoxStyle(QProxyStyle):
    def drawPrimitive(self, element, option, painter, widget=None):
        if element == QStyle.PE_PanelItemViewItem:
            rect = option.rect

            if option.state & QStyle.State_Selected:
                radius = 5
                painter.setBrush(QColor(200, 200, 255))
                path = QPainterPath()
                path.addRoundedRect(rect, radius, radius)
                painter.setPen(QPen(Qt.NoPen))
                painter.drawPath(path)
            else:
                super().drawPrimitive(element, option, painter, widget)
        else:
            super().drawPrimitive(element, option, painter, widget)

app = QApplication([])

combo_box = QComboBox()
combo_box.addItems(["选项 1", "选项 2", "选项 3"])

style = CustomComboBoxStyle()
combo_box.setStyle(style)

layout = QVBoxLayout()
layout.addWidget(combo_box)

window = QWidget()
window.setLayout(layout)
window.show()

app.exec_()

这段代码创建了一个带有圆角框的 QComboBox 下拉列表,当鼠标悬停在选项上时,会显示蓝色背景。你可以根据需要修改颜色、圆角半径和其他样式属性。

标签:python,list,qcombobox
From: 78800521

相关文章

  • 我没有 python 但我有 python3
    我最近格式化了我的笔记本电脑并安装了Ubuntu操作系统。我没有明确安装Python。为了检查它是否已预安装,我在终端中运行python--version并得到了这个:$python--versionCommand'python'notfound,butcanbeinstalledwith:sudoaptinstallpython3......
  • 基于YOLOv9的停车场空闲车位检测【python源码+UI界面+数据集+模型+语音报警+安装说明
    往期精品导航基于YOLOv9的脑肿瘤区域检测智慧课堂基于YOLOv8的学生上课行为检测基于YOLOv9+pyside的安检仪x光危险物物品检测(有ui)基于YOLOv9的PCB板缺陷检测基于YOLOv9的线路绝缘子缺陷检测【python源码+UI界面+数据集+模型+语音报警+安装说明】基于YOLOv9的道路状况检测【......
  • 1-python的数据类型与变量
    一、交互模式与脚本模式交互模式:就相当于一种问答模式,关闭即消失无法保存重用比如python自带的编译器脚本模式:可以将代码长期保存以及重复使用如何创建脚本模式:idle——file——newfile[快捷方式:idle——ctrl+n]保存:ctrl+s运行:F5二、变量(Variable)变量:会变化......
  • 2-Python数据类型——序列
    Python数据类型——序列一、序列序列是一个可以存放多个值的容器。有序序列:在序列中每个值都有对应的下标下标:就相当于酒店的房间号,方便客人的查找与酒店的管理在编程中下标的起始值与日常生活中的计数有所不同:下标的计数从0开始计数,从左往右计数:下标从0开始往右递......
  • crontab 运行 .sh 文件调用 python 脚本
    我有一个pythonselenium脚本,可以打开chrome并为我运行一些自动化任务。在crontab中直接调用python可以使用下面的行。:10.0是我运行echo$DISPLAY时得到的值。我使用的是Ubuntu22.04.4LTS5823**2DISPLAY=:10.0/usr/bin/python3/home/user/Script......
  • Pythonanywhere - ping:套接字:不允许操作
    请帮忙。我有一个Telegram机器人,当我从Bash控制台启动他时,它每60秒ping一次静态IP-它工作正常,但每天停止工作一次。我尝试使用“始终开启任务”,但在日志文件中收到“ping:套接字:不允许操作”。我有5美元帐户,我能做什么?从Bash控制台运行时我看到的内容:---17......
  • python+flask计算机毕业设计社区疫情防控物资调配平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景近年来,全球公共卫生事件的频发,尤其是新冠疫情的爆发,对社区治理与应急响应能力提出了前所未有的挑战。社区作为疫情防控的第一线,其物资调配......
  • python+flask计算机毕业设计四川工商学院疫情防控系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在全球新冠疫情持续蔓延的背景下,高校作为人员密集、流动性大的特殊场所,其疫情防控工作显得尤为重要。四川工商学院作为一所集教学、科研、......
  • python+flask计算机毕业设计企业人事管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着企业规模的不断扩大与业务复杂度的提升,传统的人事管理方式已难以满足现代企业对高效、精准、自动化管理的需求。企业人事管理涉及员工......
  • python+flask计算机毕业设计外卖食品安全监管微信小程序(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,外卖行业作为“互联网+餐饮”的典范,近年来呈现出井喷式增长态势,极大地便利了人们的日常生活。然而,外卖食品......