我正在尝试制作一个设置文件(colors.py) 最重要的是,当更改“THEME =”的值时,变量被分配了一个特定的值。在这种情况下,一切都很美好,但它说变量不是全局的,每次都引用这个函数不是一个选项。通过全局声明每个变量是另一项任务......告诉我如何正确和简单地注册所有变量?
THEME = "Light" # Light, Dark, WLight, WDark
ICONS = "Colors" # Colors, Monochrome
def Light():
# главные цвета программы
color_background = "#F2F2F2"
color_background_hover = "#E5E5E5"
color_border = "#666666"
# цвета иконки перемещения
color_label = "#333333"
color_label_hover = "#666666"
# цвета иконок главного меню
if ICONS == "Colors": color_icon = "#3497D8"; color_icon_select = "#ff6a00";
elif ICONS == "Monochrome": color_icon = "#333333"; color_icon_select = "#00000000";
# цвета подгрупп
color_group_background = "#F2F2F2"
color_group_border = "#D3D3D3"
color_group_border_hover = "#B6B6B6"
# цвета контекстного меню
color_context_background = "#FFFFFF"
color_context_background_hover = "#333333"
color_context_border = "#333333"
def Dark():
...
def WLight():
...
def WDark():
...
if THEME == "Light": Light()
elif THEME == "Dark": Dark()
elif THEME == "WLight": WLight()
elif THEME == "WDark": WDark()
这个问题被另一个人解决了,如果:
# Настройки цветов
THEME = "Light" # Light, Dark, WLight, WDark
ICONS = "Colors" # Colors, Monochrome
if THEME == "Light":
# главные цвета программы
color_background = "#F2F2F2"
color_background_hover = "#E5E5E5"
color_border = "#666666"
# цвета иконки перемещения
color_label = "#333333"
color_label_hover = "#666666"
# цвета иконок главного меню
if ICONS == "Colors": color_icon = "#3497D8"; color_icon_select = "#ff6a00";
elif ICONS == "Monochrome": color_icon = "#333333"; color_icon_select = "#00000000";
# цвета подгрупп
color_group_background = "#F2F2F2"
color_group_border = "#D3D3D3"
color_group_border_hover = "#B6B6B6"
# цвета контекстного меню
color_context_background = "#FFFFFF"
color_context_background_hover = "#333333"
color_context_border = "#333333"
print ("Light")
elif THEME == "Dark":
...
elif THEME == "WLight":
...
elif THEME == "WDark":
...
附加问题2:
单击按钮时无法嵌入动态主题更改,以及如何将其正确导入 icon.py?
main.py 文件
from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow, QFrame, QLabel, QMenu
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtCore import QPoint
from PyQt5 import QtWidgets as qtw
from PyQt5.QtGui import QPixmap
from PyQt5.QtSvg import QSvgWidget, QSvgRenderer
class Ui_MainWindow(QMainWindow):
# --- Основное Окно Программы ---
def __init__(self):
super().__init__()
self.mwidget = QMainWindow(self)
self.setWindowFlags(QtCore.Qt.Tool | QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
self.setGeometry(QtCore.QRect(100, 100, 200, 200))
self.pbx1 = QPushButton(self)
self.pbx1.setObjectName("pbx1")
self.pbx1.setGeometry(QtCore.QRect(1, 15, 45, 45))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("G4.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.pbx1.setIcon(icon)
self.pbx1.setIconSize(QtCore.QSize(30, 30))
self.pbx1.clicked.connect(lambda: self.setTheme(themes.ThemeDark))
# --- Показать Окно ---
self.show()
def setTheme(Theme):
theme=Theme
# --- Запуск Окна Программы ---
if __name__ == "__main__":
import themes
theme=themes.ThemeLight
button=themes.ButtonColors
import sys
app = QApplication(sys.argv)
ex = Ui_MainWindow()
sys.exit(app.exec_())
主题.py 文件
class ThemeLight:
# главные цвета программы
color_background = "#F2F2F2"
color_background_hover = "#E5E5E5"
color_border = "#666666"
# цвета иконки перемещения
color_label = "#333333"
color_label_hover = "#666666"
# цвета подгрупп
color_group_background = "#F2F2F2"
color_group_border = "#D3D3D3"
color_group_border_hover = "#B6B6B6"
# цвета контекстного меню
color_context_background = "#FFFFFF"
color_context_background_hover = "#333333"
color_context_border = "#333333"
class ThemeDark:
color_background = "#000000"
# ...
class ThemeWLight:
color_background = ""
# ...
class ThemeWDark:
color_background = ""
# ...
class ButtonColors:
color_icon = "#3497D8"
color_icon_select = "#ff6a00"
class ButtonMonochrome:
color_icon = "#333333"
color_icon_select = "#00000000"
图标.py 文件
import themes
theme=themes.ThemeLight
CL = theme.color_label
# Иконка Label вертикальная
icon_label_vertical = """
<svg>
<path fill="%s" opacity="1.00" d=" M 154.00 14.00 C 158.66 14.00 163.33 14.00 168.00 14.00 C 167.99 18.67 168.00 23.33 168.00 28.00 C 163.33 28.00 158.67 28.00 154.00 28.00 C 153.99 23.33 154.00 18.67 154.00 14.00 Z" />
</svg>""" % CL
点击按钮:
Process finished with exit code -1073740791 (0xC0000409)
附加问题3:
为什么 setStyleSheet 不改变颜色?
主题.py:
class ThemeLight:
test = "#FF0000"
class ThemeDark:
test = "#00FF00"
主要.py:
from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow, QFrame, QLabel, QMenu
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtCore import QPoint
from PyQt5 import QtWidgets as qtw
from PyQt5.QtGui import QPixmap
from PyQt5.QtSvg import QSvgWidget, QSvgRenderer
import icons, themes
class Ui_MainWindow(QMainWindow):
# --- Основное Окно Программы ---
def __init__(self):
super().__init__()
self.mwidget = QMainWindow(self)
self.setWindowFlags(QtCore.Qt.Tool | QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint)
self.setGeometry(QtCore.QRect(100, 100, 200, 200))
self.setStyleSheet("""
QFrame#frame {
background-color: %s;
}
""" % theme.test)
self.frame = QFrame(self)
self.frame.setObjectName("frame")
self.frame.setGeometry(QtCore.QRect(0, 0, 200, 200))
print (theme.test)
self.pbx1 = QPushButton(self)
self.pbx1.setObjectName("pbx1")
self.pbx1.setGeometry(QtCore.QRect(1, 15, 45, 45))
self.pbx1.clicked.connect(lambda: setTheme(themes.ThemeDark))
# --- Показать Окно ---
self.show()
def setTheme(Theme):
theme=Theme
print (theme.test)
# --- Запуск Окна Программы ---
if __name__ == "__main__":
theme=themes.ThemeLight
import sys
app = QApplication(sys.argv)
ex = Ui_MainWindow()
sys.exit(app.exec_())
1)在函数外声明全局变量:
2)在函数内部,你将改变全局变量的值,在第一行写
global <переменная>
:3) 现在,所有对全局变量的赋值都会改变它们
通过类实现的示例。
该类
Theme
是包含所有字段的基类,其余所有字段都继承自Theme
或从其后代继承,重写字段以适应其主题:用法:
回答附加问题 #3
因为您
setStyleSheet
只锻炼一次 - 对于一种风格,并且每次更改主题时都需要调用它: