python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
作者:basisworker 发布时间:2023-04-03 04:19:06
标签:python3,PyQt5,窗口,部件,样式表
本文借用HTML的css语法,将样式表应用到窗口部件。这里只是个简单的例子,实际上样式表的语法很丰富。
以下类似于css:
StyleSheet = """
QComboBox { color: darkblue; }
QLineEdit { color: darkgreen; }
QLineEdit[mandatory="true"] { #mandatory="true"时,QLineEdit的样式会变化
background-color: rgb(255, 255, 127);
color: darkblue;
}
如果在选择器的前面加上一个句点,比如.QLineEdit,则选择器就会只应用于指定的类,而不会应用于这个类的子类。如果要求选择器仅用于某一特定窗口部件,则可以对该窗口部件调用setObjectName(),然后用该名字作为选择器的一部分。比如,如果有一个按钮,其对象名字是“findButton”,则应用于这个按钮的选择器就应该是QpushButton#findButton。有些窗口部件会有一些子控件。例如QComboBox会有一个箭头子控件,用户通过点击这个箭头来看到下拉列表。子控件可以指定为选择器的一部分–例如,QComboBox::drop-down。伪状态可以用一个冒号指定–例如,QCheckBox::checked.
#!/usr/bin/env python3
import sys
from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog,
QDialogButtonBox, QGridLayout, QLabel, QLineEdit, QVBoxLayout)
class ContactDlg(QDialog):
StyleSheet = """
QComboBox { color: darkblue; }
QLineEdit { color: darkgreen; }
QLineEdit[mandatory="true"] {
background-color: rgb(255, 255, 127);
color: darkblue;
}
"""
def __init__(self, parent=None):
super(ContactDlg, self).__init__(parent)
forenameLabel = QLabel("&Forename:")
self.forenameEdit = QLineEdit()
forenameLabel.setBuddy(self.forenameEdit)
surnameLabel = QLabel("&Surname:")
self.surnameEdit = QLineEdit()
surnameLabel.setBuddy(self.surnameEdit)
categoryLabel = QLabel("&Category:")
self.categoryComboBox = QComboBox()
categoryLabel.setBuddy(self.categoryComboBox)
self.categoryComboBox.addItems(["Business", "Domestic",
"Personal"])
companyLabel = QLabel("C&ompany:")
self.companyEdit = QLineEdit()
companyLabel.setBuddy(self.companyEdit)
addressLabel = QLabel("A&ddress:")
self.addressEdit = QLineEdit()
addressLabel.setBuddy(self.addressEdit)
phoneLabel = QLabel("&Phone:")
self.phoneEdit = QLineEdit()
phoneLabel.setBuddy(self.phoneEdit)
mobileLabel = QLabel("&Mobile:")
self.mobileEdit = QLineEdit()
mobileLabel.setBuddy(self.mobileEdit)
faxLabel = QLabel("Fa&x:")
self.faxEdit = QLineEdit()
faxLabel.setBuddy(self.faxEdit)
emailLabel = QLabel("&Email:")
self.emailEdit = QLineEdit()
emailLabel.setBuddy(self.emailEdit)
self.buttonBox = QDialogButtonBox(QDialogButtonBox.Ok|
QDialogButtonBox.Cancel)
addButton = self.buttonBox.button(QDialogButtonBox.Ok)
addButton.setText("&Add")
addButton.setEnabled(False)
grid = QGridLayout()
grid.addWidget(forenameLabel, 0, 0)
grid.addWidget(self.forenameEdit, 0, 1)
grid.addWidget(surnameLabel, 0, 2)
grid.addWidget(self.surnameEdit, 0, 3)
grid.addWidget(categoryLabel, 1, 0)
grid.addWidget(self.categoryComboBox, 1, 1)
grid.addWidget(companyLabel, 1, 2)
grid.addWidget(self.companyEdit, 1, 3)
grid.addWidget(addressLabel, 2, 0)
grid.addWidget(self.addressEdit, 2, 1, 1, 3)
grid.addWidget(phoneLabel, 3, 0)
grid.addWidget(self.phoneEdit, 3, 1)
grid.addWidget(mobileLabel, 3, 2)
grid.addWidget(self.mobileEdit, 3, 3)
grid.addWidget(faxLabel, 4, 0)
grid.addWidget(self.faxEdit, 4, 1)
grid.addWidget(emailLabel, 4, 2)
grid.addWidget(self.emailEdit, 4, 3)
layout = QVBoxLayout()
layout.addLayout(grid)
layout.addWidget(self.buttonBox)
self.setLayout(layout)
self.lineedits = (self.forenameEdit, self.surnameEdit,
self.companyEdit, self.phoneEdit, self.emailEdit)
for lineEdit in self.lineedits:
lineEdit.setProperty("mandatory", True)
lineEdit.textEdited.connect(self.updateUi)
self.categoryComboBox.activated.connect(self.updateUi)
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
self.setStyleSheet(ContactDlg.StyleSheet)
self.setWindowTitle("Add Contact")
def updateUi(self):
mandatory = bool(self.companyEdit.property("mandatory"))
if self.categoryComboBox.currentText() == "Business":
if not mandatory:
self.companyEdit.setProperty("mandatory", True)
elif mandatory:
self.companyEdit.setProperty("mandatory", False)
if (mandatory !=
bool(self.companyEdit.property("mandatory"))):
self.setStyleSheet(ContactDlg.StyleSheet)
enable = True
for lineEdit in self.lineedits:
if (bool(lineEdit.property("mandatory")) and
not lineEdit.text()):
enable = False
break
self.buttonBox.button(QDialogButtonBox.Ok).setEnabled(enable)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = ContactDlg()
form.show()
app.exec_()
运行结果:
来源:https://blog.csdn.net/xiaoyangyang20/article/details/55224242
0
投稿
猜你喜欢
- 摘要:大家提到Mysql的性能优化都是注重于优化sql以及索引来提升查询性能,大多数产品或者网站面临的更多的高并发数据读取问题。然而在大量写
- 应用场景:状态不是200的URL重试多次代码比较简单还有部分注释python2.7实现:# -*-coding:utf-8-*-"
- views.py 视图文件 message = None all_message = UserMessage.obj
- 前言前段时间,因为项目需求,需要根据关键词搜索聊天记录,这不就是一个搜索引擎的功能吗?于是我第一时间想到的就是 ElasticSearch
- 阅读上一篇:微软建议的ASP性能优化28条守则(4)技巧 13:避免重新确定数组的维数 应尽量避免 Redim 数组。就性能而言,如果计算机
- Python数据类型分为值类型和引用类型, 下面我们看下它们的区别:值类型:对象本身不允许修改,数值的修改实际上是让变量指向了一个新的对象包
- 1.IP代理某些网站会检测一段时间内某IP的访问次数,若访问次数过多会禁止访问,这时需要设置一些代理服务器,每隔一段时间换一个代理。IP代理
- 问:如何让内联框架里面的网页背景透明?(用iframe嵌套一网页,怎么能够设置其背景为透明以便能显示父框架中网页的背景图?)答:这是需要 I
- 引言微信群的用户添加逻辑是 —— 当群人数达到100人后,用户无法再通过扫描群二维码加入,只能让用户先添加群内联系人微信,再由联系人把用户拉
- web2.0教程4:如何调用css样式表 这些技巧主要讲meta标签设置的,其实与符合web标准关系不大,只要注意在最后加"/&q
- 本文介绍的是关于Python利用字典的默认行为的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:典型代码1:from collect
- 今天下午在练习python时用了“if...if...else...”的分支结构,结果运行出来吓我一跳。原来我想当然的认为“if...if.
- 什么是正则表达式?1、正则表达式是检擦、匹配字符串的表达式2、正则表达式是描述规则,主流语言都有良好支持3、字符串校验、查找与替换是正则表达
- 本文实例讲述了Python图像处理之简单画板实现方法。分享给大家供大家参考,具体如下:Python图像处理也是依赖opencv的Python
- 在 Java 中打印当前线程的方法栈,可以用 kill -3 命令向 JVM 发送一个 OS 信号,JVM 捕捉以后会自动 dump 出来;
- 装饰器通用模型def wrapper(fn): def inner(*args, **kwargs):  
- 最近做网站期间遇到个问题,就是用到比较流行的lightbox效果,就是点击链接后会弹出个固定大小窗口,弹出后窗口下面的内容是被遮罩掉的,最近
- 本文实例讲述了让thinkphp支持大小写url地址访问的方法。分享给大家供大家参考。具体实现方法如下:通常ThinkPHP默认是区别大小写
- 目录项目地址:1) 启动方法2) web查看方法3) 功能说明:4) 展示:代码项目地址:https://github.com/guodon
- 本文研究的主要是PyQt5打开文件对话框QFileDialog的代码示例,具体如下。单个文件打开 QFileDialog.getOpenFi