【PyQt5】QComboBox文字居中

你永远也无法预料到,Qt到底埋了多少坑(我的是PyQt5),
一个破文本居中都要搞那么麻烦
一堆样式这里不生效那里不生效的真的是离谱



代码+运行结果:

import sys
from PyQt5.QtWidgets import QApplication,QComboBox
from PyQt5.QtWidgets import QStyle,QStylePainter,QStyleOptionComboBox,QStyleOptionButton
from PyQt5.QtGui import QPalette,QPainter
from PyQt5.QtCore import Qt__all__=['XJQ_ComboBox']
class XJQ_ComboBox(QComboBox):cbStyle='''QComboBox{font-size:20px;background:rgba(96,192,255,192);border-radius:10px;min-width:50px;text-align:center;}QComboBox::drop-down{width:0;image:none;}QComboBox QAbstractItemView {font-size:25px;min-width: 50px;font-weight:0;font-family:serif;background-color: rgba(224, 224, 128, 255);}QComboBox QAbstractItemView::item {height: 30px;background-color: rgba(237, 0, 0,128);}QComboBox QScrollBar{background: rgba(255,255,255,5%);width: 5px;}QComboBox QScrollBar::add-line {width:0;height:0;}QComboBox QScrollBar::sub-line {width:0;height:0;}QComboBox QScrollBar::handle {background: rgba(64,64,64,75%);}QComboBox QScrollBar::sub-page {background: rgba(0,0,0,30%);}QComboBox QScrollBar::add-page {background: rgba(0,0,0,30%);}'''def __init__(self,*args):super().__init__(*args)self.setCursor(Qt.PointingHandCursor)#样式QComboBox QAbstractItemView{...}要调用QComboBox.setView后生效:https://blog.csdn.net/Larry_Yanan/article/details/123556429self.setView(QListView())self.setStyleSheet(self.cbStyle)self.setFocusPolicy(Qt.NoFocus)def paintEvent(self,event):#组合框文字居中:https://blog.csdn.net/eiilpux17/article/details/109501871painter=QStylePainter(self)painter.setPen(self.palette().color(QPalette.Text));opt=QStyleOptionComboBox();self.initStyleOption(opt);painter.drawComplexControl(QStyle.CC_ComboBox, opt);if (self.currentIndex() < 0):opt.palette.setBrush(QPalette.ButtonText, opt.palette.brush(QPalette.ButtonText).color().lighter());painter.end();painter2 =QPainter(self);buttonOpt=QStyleOptionButton();buttonOpt.initFrom(self)editRect = self.style().subControlRect(QStyle.CC_ComboBox, opt, QStyle.SC_ComboBoxEditField, self);buttonOpt.rect = editRect;buttonOpt.text = opt.currentText;self.style().drawControl(QStyle.CE_PushButtonLabel, buttonOpt, painter2, self);def addItem(self,tx):#列表项居中:https://blog.csdn.net/chenxipu123/article/details/87804513super().addItem(tx)self.model().item(cb.count()-1).setTextAlignment(Qt.AlignCenter)if __name__ == '__main__':from PyQt5.QtWidgets import QWidget,QHBoxLayout,QListViewapp = QApplication(sys.argv)cb=XJQ_ComboBox()for i in range(200):cb.addItem(str(i))cb.currentTextChanged.connect(lambda val:print(val))cb.setCurrentText('105')wid=QWidget()hbox=QHBoxLayout(wid)hbox.addStretch(1)hbox.addWidget(cb)hbox.addStretch(1)wid.show()sys.exit(app.exec_())

运行结果



碎碎念

坑多到让人发麻,真的是让人两眼一黑。
频繁出现“样式表无法生效”造成不少样式出现了交错的情况,也就是部分样式是通过setStyleSheet修改的但又有部分样式是通过setFontsetTextAlignmentsetBackground之类的函数进行设置,
而且有些样式还必须设置某些东西才会生效(例如QComboBox QAbstractItemView{...}的样式要生效就必须调用QComboBox.setView(QListView())),想想都头皮发麻,

几度有过走别的路子的想法,例如自己从头实现组合框(QLineEdit+QListView),要不就是新增绘制代理QItemDelegate,但,算了,写都写完了,不管那么多。


参考:

  • 自定义QComboBox下拉框,右对齐显示,下拉列表滑动操作:https://blog.csdn.net/chenxipu123/article/details/87804513
  • QT有关QCobobox控件的样式设置(圆角、下拉框,向上展开、可编辑、内部布局等):https://blog.csdn.net/Larry_Yanan/article/details/123556429
  • QComboBox文字居中的一种解决办法:https://blog.csdn.net/eiilpux17/article/details/109501871
  • QComboBox设置文字居中:https://www.cnblogs.com/hades-zhang/articles/16717490.html
  • QComboBox设置复杂下拉列表:https://blog.csdn.net/wzz953200463/article/details/113926045
  • Qt样式表手册Qt Style Sheets Reference:https://doc.qt.io/qt-6/stylesheet-reference.html#placeholder-text-color-prop

未经本人同意不得私自转载,本文发布于CSDN:https://blog.csdn.net/weixin_44733774/article/details/135272673

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2662125.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Threejs 标签添加(单标签/多标签)

前言&#xff1a;网上写这个太少了&#xff0c;还写的乱&#xff0c;我就简单的整理下大家看下就会&#xff0c;有问题可以关注公众号: 技术链 1、创建工程vue 这个可以直接用命令创建 2、引入安装Threejs 依赖 3、编写标签引入依赖&#xff0c;可以使用 CSS2DRenderer,CSS3D…

堪比Postman!这款IDEA插件真好用!

Postman是大家最常用的API调试工具&#xff0c;那么有没有一种方法可以不用手动写入接口到Postman&#xff0c;即可进行接口调试操作&#xff1f;今天给大家推荐一款IDEA插件&#xff1a;Apipost Helper&#xff0c;写完代码就可以调试接口并一键生成接口文档&#xff01;而且还…

【计算机毕业设计】SSM游戏点评网站

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,管理员管理,网站用户管理,游戏资讯管理,游戏类型管理,城市信息管理,竞技场管理,游戏信息管理,游戏评价信息管理等功能。…

【Spark精讲】一文讲透SparkSQL物理执行计划

SparkSQL整体计划生成流程 大体分三步&#xff1a; (1)由 SparkSqlParser 中的 AstBuilder执行节点访问&#xff0c;将语法树的各种Context节点转换成对应的 LogicalPlan 节点&#xff0c;从而成为一棵未解析的逻辑算子树(Unresolved LogicalPlan)&#xff0c;此时的逻辑算子树…

基于CNN和双向gru的心跳分类系统

CNN and Bidirectional GRU-Based Heartbeat Sound Classification Architecture for Elderly People是发布在2023 MDPI Mathematics上的论文&#xff0c;提出了基于卷积神经网络和双向门控循环单元(CNN BiGRU)注意力的心跳声分类&#xff0c;论文不仅显示了模型还构建了完整的…

c语言-位操作符练习题

文章目录 前言一、n&(n-1)的运用场景(n为整数)二、&1 和 >>的应用场景总结 前言 本篇文章介绍利用c语言的位操作符解决一些练习题&#xff0c;目的是掌握各个位操作符的使用和应用场景。 表1.1为c语言中的位操作符 操作符含义&按位与|按位或^按位异或~按位…

电脑报错缺失vcomp140.dll无法执行代码怎么解决?快速的修复vcomp140.dll方案

vcomp140.dll无法执行代码怎么解决&#xff1f;vcomp140.dll是常见的系统文件&#xff0c;许多用户遇到它缺失导致程序无法运行的问题。本文旨在提供彻底解决此问题的方法&#xff0c;并对vcomp140.dll文件本身进行了简要说明。 以下是几种修复缺失的vcomp140.dll文件的方法 第…

【HBuilder + IDEA + XFtp + XShell】打包部署上线

简述 前后端分离&#xff1a;需要将前后端的程序包打包发送至应用Linux服务器上Linux服务器 &#xff08;1&#xff09;需要启用SSHD服务&#xff0c;该服务会监听22号端口&#xff08;一般是开启的&#xff09; &#xff08;2&#xff09;搭建&#xff1a;MYSQL、Nginx、jdk、…

函数式编程的妙用

前言 我们平常项目中维护的比较多的就是实体类中的数量问题&#xff0c;我们最常见的做法就是通过get方法读取旧数据&#xff0c;然后进行新数据的set 。这套方法相对来说是比较统一固定的&#xff0c;如果有多处地方使用&#xff0c;我们可以想着通过Function和BiConsumer的函…

证明:切线垂直于半径

证明&#xff1a; 切线垂直于过切点的半径。 下面是网上最简单的证明方法。 证明&#xff1a; 利用反证法。如下图所示&#xff0c;直线AB和圆O切于点A&#xff0c;假设OA 不垂直于 AB&#xff0c;并且 O B ⊥ A B OB \perp AB OB⊥AB&#xff0c;则 ∠ O B A 90 \angle O…

实习知识整理14:确认从购物车中下单的订单信息并实现相关的逻辑处理

1. 确认订单信息 分析&#xff1a;这个和之前的直接购买的确认订单的信息是一致的&#xff0c;就是需要前端向后端传递数据表中需要的信息&#xff0c;唯一的区别就是在购物车中购买&#xff0c;可能会购买多种商品&#xff0c;用户订单表还是需要插入一条数据&#xff0c;而订…

风电机叶片表面损坏检测数据集(1万多张+txt标签)

用于深度学习模型训练。有需要的朋友可以和我私聊 数据集信息部分截图 &#xff1a;

写给工程师的 MacBook 商用级大模型知识库部署方案

本文介绍了如何在自己的 MacBook 上部署一套知识库方案辅助自己的知识管理工作&#xff0c;希望能给每位计划自己搭建大模型知识库应用的工程师一点参考。 背景 历史的车轮滚滚向前&#xff0c;大模型技术发展日新月异&#xff0c;每天都有新鲜的技术出炉&#xff0c;让人目不暇…

活动快讯 | 万博智云受邀参加上海经信委,港澳办,香港贸发局主办的沪港主题活动

12月28日下午&#xff0c;上海市经信委、上海市人民政府港澳事务办公室、香港贸发局联合于上海城市数字化转型体验馆三楼会客厅举办沪港主题活动。万博智云CEO Michael受邀参加此次活动&#xff0c;探讨数字经济未来发展局势。 本次主题活动聚焦数据领域&#xff0c;邀请两地政…

J1 - ResNet-50实战

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 环境步骤环境设置数据准备图像信息查看 模型设计模型训练模型效果展示 总结与心得体会 环境 系统: Linux语言: Python3.8.10深度学习…

UniApp小程序使用vant引入vant weapp

HBuilder X里新建项目指路 HBuilderX新建项目 安装node.js指路 安装node.js 1.通过npm安装 查看npm环境 //打开终端输入命令查看版本 npm -version 1.1.右键打开外部终端窗口 1.2.输入npm init -y命令 1.3.通过命令安装 npm i vant/weapp1.3.3 -S --production 1.4.打开工具…

蓝桥杯单片机进阶教程1——代码书写格式,继电器和蜂鸣器

一、比赛过程中的参考资料 SCH_硬件原理图V30 二、分析考题 通用的考题是正式程序前加上关闭无关外设 还有就是考继电器的吸合&#xff0c;关键点是不要影响到蜂鸣器 三、实验 关闭无关外设&#xff0c;继电器每隔500ms吸合&#xff0c;断开 参考代码&#xff1a; https…

macos Jetbrains IDEA用户自定义vm配置信息存储路径, IDEA点击无反应 无法打开问题解决

Jetbrains Clion, IDEA 用户在应用里面修改了自定义的VM配置后的存储路径为 ~/Library/Application Support/JetBrains/xxx2023.3/xxx.vmoptions xxx为你安装的APP名称, 如 Clion .IntelliJIdea 这里的自定义配置如果配置有误就会直接导致JetBrains软件无法打开, 即 点击打开…

[电磁学]大学物理陈秉乾老师课程笔记

主页有博主其他上万字的精品笔记,都在不断完善ing~ 第一讲 绪论,库仑定律 主要讲解了电磁学中的库伦定律和电场的相关概念&#xff0c;介绍了电荷和电磁相互作用的规律&#xff0c;并讲解了电场强度和电势的概念。 03:14 &#x1f393; 库伦定律&#xff1a;电势能与电荷的关…