使用 Qt 样式表的 class 实例样式
style for a class instance using Qt Style Sheets
我正在尝试为玩具 PyQt5 应用程序编写 CSS 样式 sheet。我已经成功定义了 classes MainWindow(QMainWindow)
和 DefaultWidget(QWidget)
,后者包含两个按钮,我正在尝试对其进行样式化。
使用 C++ 文档,我一直在尝试利用 QPushButton#evilButton
示例,提供于:Link
但是,在我的 python 应用程序中,实例名称的 #
符号似乎没有转换为外部 CSS 文件的类似 self.setStyleSheet()
方法.
Python 文件(如有拼写错误,请见谅 - 从另一台计算机转录):
import sys
from PyQt5.Widgets import QApplication, QMainWindow, QWidget, QPushButton, QHBoxLayout
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setStyleSheet(open('./style.css').read())
try:
self.setCentralWidget(DefaultWidget())
else:
some_error_stuff_for_troubleshooting
self.show()
class DefaultWidget(QWidget):
def __init__(self):
super().__init__()
okButton = QPushButton('OK')
cancelButton = QPushButton('Cancel')
hbox = QHBoxLayout()
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)
self.setLayout(hbox)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())
在CSS文件中...
QWidget.MainWindow {
background: blue
}
QPushButton {
background-color: beige
}
QPushButton???okButton {
background-color: green
}
我把 ???
放在哪里我已经尝试了很多事情(试图遍历 classes QPushButton.okButton
、QPushButton.DefaultWidget.okButton
、DefaultWidget.okButton
,用 .
、#
、::
和 :
符号等),但在这一点上它比有根据的猜测更随机。
我想让 CSS 在 class 名称之外处理一些命名约定样式,以帮助从 python 文件中提取尽可能多的样式。即使符号恰好是正确的,我是否没有看到由于继承的样式而导致的预期颜色变化?
编辑: 如果有人偶然发现了这一点,请使用 .setObjectName() 方法或在实例化小部件时声明对象名称选项。此外,如果您有兴趣,这里有一个类似的问题,说明为什么不使用某种默认名称。
试一试:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QHBoxLayout
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# open('./style.css').read())
self.setStyleSheet("""
QWidget {
background: blue;
}
QPushButton {
background-color: beige;
}
QPushButton#okButton { /* <--- #okButton */
background-color: green;
}
""")
defaultWidget = DefaultWidget()
self.setCentralWidget(defaultWidget)
self.show()
class DefaultWidget(QWidget):
def __init__(self):
super().__init__()
okButton = QPushButton('OK', objectName="okButton") # + objectName="okButton"
cancelButton = QPushButton('Cancel')
hbox = QHBoxLayout()
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)
self.setLayout(hbox)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())
我正在尝试为玩具 PyQt5 应用程序编写 CSS 样式 sheet。我已经成功定义了 classes MainWindow(QMainWindow)
和 DefaultWidget(QWidget)
,后者包含两个按钮,我正在尝试对其进行样式化。
使用 C++ 文档,我一直在尝试利用 QPushButton#evilButton
示例,提供于:Link
但是,在我的 python 应用程序中,实例名称的 #
符号似乎没有转换为外部 CSS 文件的类似 self.setStyleSheet()
方法.
Python 文件(如有拼写错误,请见谅 - 从另一台计算机转录):
import sys
from PyQt5.Widgets import QApplication, QMainWindow, QWidget, QPushButton, QHBoxLayout
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setStyleSheet(open('./style.css').read())
try:
self.setCentralWidget(DefaultWidget())
else:
some_error_stuff_for_troubleshooting
self.show()
class DefaultWidget(QWidget):
def __init__(self):
super().__init__()
okButton = QPushButton('OK')
cancelButton = QPushButton('Cancel')
hbox = QHBoxLayout()
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)
self.setLayout(hbox)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())
在CSS文件中...
QWidget.MainWindow {
background: blue
}
QPushButton {
background-color: beige
}
QPushButton???okButton {
background-color: green
}
我把 ???
放在哪里我已经尝试了很多事情(试图遍历 classes QPushButton.okButton
、QPushButton.DefaultWidget.okButton
、DefaultWidget.okButton
,用 .
、#
、::
和 :
符号等),但在这一点上它比有根据的猜测更随机。
我想让 CSS 在 class 名称之外处理一些命名约定样式,以帮助从 python 文件中提取尽可能多的样式。即使符号恰好是正确的,我是否没有看到由于继承的样式而导致的预期颜色变化?
编辑: 如果有人偶然发现了这一点,请使用 .setObjectName() 方法或在实例化小部件时声明对象名称选项。此外,如果您有兴趣,这里有一个类似的问题,说明为什么不使用某种默认名称。
试一试:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QHBoxLayout
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# open('./style.css').read())
self.setStyleSheet("""
QWidget {
background: blue;
}
QPushButton {
background-color: beige;
}
QPushButton#okButton { /* <--- #okButton */
background-color: green;
}
""")
defaultWidget = DefaultWidget()
self.setCentralWidget(defaultWidget)
self.show()
class DefaultWidget(QWidget):
def __init__(self):
super().__init__()
okButton = QPushButton('OK', objectName="okButton") # + objectName="okButton"
cancelButton = QPushButton('Cancel')
hbox = QHBoxLayout()
hbox.addWidget(okButton)
hbox.addWidget(cancelButton)
self.setLayout(hbox)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(app.exec_())