PyQt5アプリケーションを構築していますが、暗いテーマを作りたいと思っています。以前は、Android開発で作業しましたが、アプリケーション全体に設定できる暗いテーマがありました
Qtに組み込まれているダークテーマはありますか(アプリケーション内のすべてのウィジェットに適用され、クロスプラットフォームです)?
いいえ、しかし、あなたは私のかなり包括的な stylesheets を使うことができます。これはほとんどのプラットフォームで見栄えがするはずです(KDEのBreezeテーマは、非常にエレガントな暗いテーマです)。これは優れた QDarkStylesheet から(ハード)分岐したもので、多くの分野でテーマの問題があると感じたため、自分のニーズに合わせて大幅に変更し、軽いテーマを追加しました。
テーマのサンプルはこちらです。 PyQt5で使用するには、プロジェクトに次の行を追加するだけです:
import sys
from PyQt5.QtCore import QFile, QTextStream
from PyQt5.QtWidgets import QApplication
import breeze_resources
app = QApplication(sys.argv)
file = QFile(":/dark.qss")
file.open(QFile.ReadOnly | QFile.Text)
stream = QTextStream(file)
app.setStyleSheet(stream.readAll())
コメントへの応答として、ライトまたはダークスタイルシートを動的に使用するようにスタイルシートを調整する最も簡単な方法は、関数にラップすることです。次に、この関数をQtシグナルへのスロットとして使用できます(警告:私は主にC++を使用して開発しているため、シグナル/スロットメカニズムのコードに小さなエラーがある場合があります)。
def toggle_stylesheet(path):
'''
Toggle the stylesheet to use the desired path in the Qt resource
system (prefixed by `:/`) or generically (a path to a file on
system).
:path: A full path to a resource or file on system
'''
# get the QApplication instance, or crash if not set
app = QApplication.instance()
if app is None:
raise RuntimeError("No Qt Application found.")
file = QFile(path)
file.open(QFile.ReadOnly | QFile.Text)
stream = QTextStream(file)
app.setStyleSheet(stream.readAll())
シグナル/スロットメカニズムでこの関数を使用できる汎用アプリケーションロジックを追加できます(必要に応じて、便利なラッパーとしてラムダを使用して、スタイルシートトグルへのパスを提供します)。
# add logic for setting up application
app = QApplication(sys.argv)
# more logic for creating top-level widgets, application logic ...
parent = ...
light_btn = QPushButton("Toggle light.", parent)
light_btn.clicked.connect(lambda: toggle_stylesheet(":/light.qss"))
dark_btn = QPushButton("Toggle dark.", parent)
dark_btn.clicked.connect(lambda: toggle_stylesheet(":/dark.qss"))
# add to the layout, do other stuff
# ...
# end the Qt application
sys.exit(app.exec_())
これにより、ユーザーはPyQt5(またはC++、Qt5の類似ロジックを使用)で開発されたアプリケーションのテーマを明るいテーマまたは暗いテーマに動的に変更できます。
免責事項:明らかに私はメンテナーです。
Qtにはダークテーマは組み込まれていません。ただし、次のコードを使用すると、自分で簡単に作成できます。
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QPalette
app = QApplication([])
# Force the style to be the same on all OSs:
app.setStyle("Fusion")
# Now use a palette to switch to dark colors:
palette = QPalette()
palette.setColor(QPalette.Window, QColor(53, 53, 53))
palette.setColor(QPalette.WindowText, Qt.white)
palette.setColor(QPalette.Base, QColor(25, 25, 25))
palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
palette.setColor(QPalette.ToolTipBase, Qt.white)
palette.setColor(QPalette.ToolTipText, Qt.white)
palette.setColor(QPalette.Text, Qt.white)
palette.setColor(QPalette.Button, QColor(53, 53, 53))
palette.setColor(QPalette.ButtonText, Qt.white)
palette.setColor(QPalette.BrightText, Qt.red)
palette.setColor(QPalette.Link, QColor(42, 130, 218))
palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
palette.setColor(QPalette.HighlightedText, Qt.black)
app.setPalette(palette)
これの良いところは、外部の依存関係を導入しないことです。上記の変更がどのように見えるかに興味がある場合、サンプルを作成しました ダークテーマのPyQt5アプリ 。これがスクリーンショットです:
私のブックマークに設立されました。元のソースを覚えていません。
QApplication::setStyle(QStyleFactory::create("Fusion"));
QPalette p;
p = qApp->palette();
p.setColor(QPalette::Window, QColor(53,53,53));
p.setColor(QPalette::Button, QColor(53,53,53));
p.setColor(QPalette::Highlight, QColor(142,45,197));
p.setColor(QPalette::ButtonText, QColor(255,255,255));
qApp->setPalette(p);
追伸必要に応じて、QSSで調整できます。