PYQT6 QSS SHILE с встроенным SVGCSS

Разбираемся в CSS
Ответить
Anonymous
 PYQT6 QSS SHILE с встроенным SVG

Сообщение Anonymous »

Я работаю над созданием шаблона таблицы стилей QSS, который я могу использовать для всех моих приложений PYQT6. Когда я использую таблицу стилей, чтобы изменить стиль Qcombobox, я теряю стрелку вниз. Насколько я понимаю, если я стиляю одну часть сочетания, я должен стилизовать всю коробку для сочетания, что не является проблемой. Затем у меня есть отдельные файлы для каждой цветовой темы (то есть Light & Dark) с соответствующей записью @Widget-background = #777777 для светло-серого цвета. Во время выполнения я просто читаю в шаблоне как укус и выполняю замену для каждой из цветных тегов. Это работает потрясающе и позволяет легко добавлять цветные темы, не воссоздавая всю таблицу стилей. Я знаю, что могу поставить изображение PNG или SVG в таблице стиля, которое работает достаточно хорошо. Но это не так элегантно, как хотелось бы. Прежде всего, я должен создать отдельный файл изображения для каждой цветовой темы. Во -вторых, я должен открыть файл SVG в виде текстового файла и вручную изменить цвета (да, я знаю, что могу это автоматизировать). Итак, что я хотел бы сделать, это встроить контент SVG в таблицу стилей. Насколько я понимаю, это возможно, и я нашел пример на StackOverflow (встроенный SVG в CSS). < /P>
На основе этого решения я собрал следующее базовое приложение с одним Qcombobox с применением таблицы стилей.import sys
from PyQt6.QtWidgets import QApplication, QComboBox, QVBoxLayout, QWidget

class ComboBoxTest(QWidget):
def __init__(self):
super().__init__()
self.init_ui()

def init_ui(self):
# Create a QComboBox
combo_box = QComboBox(self)
combo_box.addItems(["Option 1", "Option 2", "Option 3"])

# Minimal stylesheet with embedded SVG for down arrow
combo_box.setStyleSheet("""
QComboBox {
background-color: #f0f0f0;
color: #000000;
border: 1px solid #0078d4;
border-radius: 4px;
padding: 2px;
}
QComboBox::drop-down {
background-color: #dcdcdc;
border: none;
width: 20px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
QComboBox::down-arrow {
image: url("data:image/svg+xml;charset=utf-8,");
}
""")

# Layout to hold the combo box
layout = QVBoxLayout(self)
layout.addWidget(combo_box)

self.setLayout(layout)
self.setWindowTitle('QComboBox SVG Test')
self.resize(300, 100)

def main():
app = QApplication(sys.argv)
window = ComboBoxTest()
window.show()
sys.exit(app.exec())

if __name__ == "__main__":
main()
< /code>
Когда я запускаю это с помощью Python 3.11 и Pyqt6, стрелка не отображается. Вы видите что -нибудь не так? Этот код работает правильно для вас? У вас есть другие идеи о том, как я могу сделать это, желательно полностью в моей таблице стилей?>

Подробнее здесь: https://stackoverflow.com/questions/789 ... bedded-svg
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «CSS»