Работа со стилем в приложение
Есть 2 окна: 1-ое окно оно главное, 2-ое это выводится пользовательские настройки. Так вот как сделать чтобы стиль не применялся во втором окне, а только был на первом? Буду очень благодарен!
код: main.py
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5 import QtWidgets
from options import Themes
import sys
import os
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self);
# создание файла для сохранения натроек
self.CONFIG_FILE_NAME = 'settings\\config.ini'
self.centralWidget = QtWidgets.QWidget() # создаём центральный виджет
self.setCentralWidget(self.centralWidget)
self.mainLayout = QtWidgets.QVBoxLayout(self.centralWidget)
# settings
self.setFixedSize(620, 640)
self.setWindowTitle(" B U G ")
# делаем сборку
self.widget_main = self.createPage()
self.mainLayout.addWidget(self.widget_main)
self.createMenuBar()
# условия для тем (чтобы задать стиль обьектов)
if self.view_theme_1.isChecked() == True:
Themes.set_theme_number_1(self)
elif self.view_theme_2.isChecked() == True:
Themes.set_theme_number_2(self)
# вывод информации на строку состояния
self.label_1 = QtWidgets.QLabel("v 1.0")
self.label_1.setStyleSheet("font-size: 18px; color: black;")
self.status_1.addPermanentWidget(self.label_1)
self.status_1.showMessage("Добро пожаловать", msecs = 4000)
self.setStatusBar(self.status_1)
def createPage(self):
"""создание страницы в основном окне """
self.widget_page = QtWidgets.QWidget()
# создание обьектов
self.button_1 = QtWidgets.QPushButton("Перейти к поиску телефонных\
\nномеров и электронных почт")
self.formbox = QtWidgets.QGridLayout()
# добавление в box и в окно
self.formbox.addWidget(self.button_1)
self.formbox.setSpacing(20)
self.widget_page.setLayout(self.formbox)
# сделать главным комонентом
return self.widget_page
def createMenuBar(self):
# создание панели-меню и строки состоянии
self.menu = QtWidgets.QMenuBar()
self.status_1 = QtWidgets.QStatusBar()
# создание категорий меню и функционал в ней
self.menu_options = QtWidgets.QMenu("Опции")
self.menu_view = QtWidgets.QMenu('Вид')
self.menu_help = QtWidgets.QMenu("Справка")
# просто настройки
self.sub_menu_options = QtWidgets.QMenu("Настройки")
self.user_settings = QtWidgets.QAction("Пользовательские настройки")
self.sub_menu_options.addAction(self.user_settings)
self.menu_options.addMenu(self.sub_menu_options)
# настройка тем
self.sub_menu_view_themes = QtWidgets.QMenu("Цветовая схема")
self.view_theme_1 = QtWidgets.QAction("Тёмно-синяя тема")
self.view_theme_1.setCheckable(True)
self.view_theme_2 = QtWidgets.QAction("Светло-серая тема")
self.view_theme_2.setCheckable(True)
self.view_theme_2.setChecked(True)
self.group_action_5 = QtWidgets.QActionGroup(self.sub_menu_view_themes)
self.group_action_5.addAction(self.view_theme_1)
self.group_action_5.addAction(self.view_theme_2)
self.sub_menu_view_themes.addAction(self.view_theme_1)
self.sub_menu_view_themes.addAction(self.view_theme_2)
self.menu_view.addMenu(self.sub_menu_view_themes)
# добавляем отдельное меню в главное меню
self.menu.addMenu(self.menu_options)
self.menu.addMenu(self.menu_view)
self.menu.addMenu(self.menu_help)
# датчики
self.user_settings.triggered.connect(self.clickedActionUser)
self.view_theme_1.triggered.connect(self.clickedActionViewTheme)
self.view_theme_2.triggered.connect(self.clickedActionViewTheme)
# добавляем в окно
self.setMenuBar(self.menu)
# методы для датчиков
def clickedActionViewTheme(self):
if self.view_theme_1.isChecked() == True:
Themes.set_theme_number_1(self)
elif self.view_theme_2.isChecked() == True:
Themes.set_theme_number_2(self)
def clickedActionUser(self):
My_WindowSettings = WindowSettings(self)
My_WindowSettings.show()
class WindowSettings(QtWidgets.QWidget):
"""Класс реализующий пользовательские настройки
в виде выводящего окна """
def __init__(self, parent = None):
QtWidgets.QWidget.__init__(self, parent)
self.parent = parent
# settings
self.setFixedSize(500, 550)
self.setWindowTitle("Пользовательские настройки")
self.setWindowFlags(QtCore.Qt.Dialog)
self.setWindowModality(QtCore.Qt.WindowModal)
# делаем сборку
self.createPage()
def createPage(self):
self.gridBox = QtWidgets.QGridLayout()
self.tabWidget = QtWidgets.QTabWidget()
self.button_save = QtWidgets.QPushButton("Применить")
self.gridBox.addWidget(self.tabWidget, 0, 0)
self.gridBox.addWidget(self.button_save, 1, 0, alignment = QtCore.Qt.AlignRight)
self.setLayout(self.gridBox)
# сборка tab-виджетов
self.createTabWidget_Search()
def createTabWidget_Search(self):
self.tabWidget_1 = QtWidgets.QWidget()
self.tabWidget.addTab(self.tabWidget_1, "настройки поиска")
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = MainWindow()
MainWindow.show()
sys.exit(app.exec_())
стили: options.py
from PyQt5 import QtWidgets
from PyQt5 import QtGui
class Themes():
def set_theme_number_1(self):
self.setStyleSheet("QPushButton {background: #29293d; color: white; font-size: 18px;}\
QPushButton:hover {background: #3d3d5c;}\
QPushButton:pressed {background: #1f1f2e}\
\
QMenuBar {background: #a9a9c2;}\
\
QLabel {color: white; font-size: 20px;}\
QTextEdit {background: #b3b3cc; font-size: 20px; border: 0px solid black;}\
QLineEdit {background: #b3b3cc; font-size: 23px; border: 0px solid black;}\
QStatusBar {background: #a9a9c2; font-size: 17px; font-style: oblique;}\
QComboBox {background: #a9a9c2; font-size: 16px;}\
QToolBar {background: #a9a9c2;}\
\
QToolButton {font-style: italic;}\
QToolButton:hover {background: #7575a3;}\
QToolButton:pressed {background: #5c5c8a;}\
\
QTabWidget {background: #29293d;}\
"
)
self.palet = QtGui.QPalette()
self.palet.setColor(QtGui.QPalette.Window, QtGui.QColor("#34344c"))
self.setPalette(self.palet)
def set_theme_number_2(self):
self.setStyleSheet("QPushButton {background: #666666; color: white; font-size: 18px;}\
QPushButton:hover {background: #a6a6a6;}\
QPushButton:pressed {background: #333333;}\
\
QLabel {color: white; font-size: 20px;}\
QTextEdit {background: #d9d9d9; font-size: 20px; border: 0px solid black;}\
QLineEdit {background: #d9d9d9; font-size: 23px; border: 0px solid black;}\
QStatusBar {background: #bfbfbf; font-size: 17px; font-style: oblique;}\
QComboBox {background: #bfbfbf; font-size: 16px;}\
QToolBar {background: #bfbfbf;}\
\
QToolButton {font-style: italic;}\
QToolButton:hover {background: #a6a6a6;}\
QToolButton:pressed {background: #737373;}\
"
)
self.palet = QtGui.QPalette()
self.palet.setColor(QtGui.QPalette.Window, QtGui.QColor("#8c8c8c"))
self.setPalette(self.palet)
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
не надо передавать родителя:
def clickedActionUser(self):
# My_WindowSettings = WindowSettings(self) # - self
# My_WindowSettings.show()
self.My_WindowSettings = WindowSettings() # +++ <<<======<
self.My_WindowSettings.show()
import sys
import os
from PyQt5 import QtCore
from PyQt5 import QtGui
from PyQt5 import QtWidgets
#from options import Themes
class Themes():
def set_theme_number_1(self, parent): # + parent
# vvvvvv
parent.setStyleSheet("QPushButton {background: #29293d; color: white; font-size: 18px;}\
QPushButton:hover {background: #3d3d5c;}\
QPushButton:pressed {background: #1f1f2e}\
\
QMenuBar {background: #a9a9c2;}\
\
QLabel {color: white; font-size: 20px;}\
QTextEdit {background: #b3b3cc; font-size: 20px; border: 0px solid black;}\
QLineEdit {background: #b3b3cc; font-size: 23px; border: 0px solid black;}\
QStatusBar {background: #a9a9c2; font-size: 17px; font-style: oblique;}\
QComboBox {background: #a9a9c2; font-size: 16px;}\
QToolBar {background: #a9a9c2;}\
\
QToolButton {font-style: italic;}\
QToolButton:hover {background: #7575a3;}\
QToolButton:pressed {background: #5c5c8a;}\
\
QTabWidget {background: #29293d;}\
"
)
parent.palet = QtGui.QPalette()
parent.palet.setColor(QtGui.QPalette.Window, QtGui.QColor("#34344c"))
parent.setPalette(parent.palet)
def set_theme_number_2(self, parent): # + parent
# vvvvvv
parent.setStyleSheet("QPushButton {background: #666666; color: white; font-size: 18px;}\
QPushButton:hover {background: #a6a6a6;}\
QPushButton:pressed {background: #333333;}\
\
QLabel {color: white; font-size: 20px;}\
QTextEdit {background: #d9d9d9; font-size: 20px; border: 0px solid black;}\
QLineEdit {background: #d9d9d9; font-size: 23px; border: 0px solid black;}\
QStatusBar {background: #bfbfbf; font-size: 17px; font-style: oblique;}\
QComboBox {background: #bfbfbf; font-size: 16px;}\
QToolBar {background: #bfbfbf;}\
\
QToolButton {font-style: italic;}\
QToolButton:hover {background: #a6a6a6;}\
QToolButton:pressed {background: #737373;}\
"
)
parent.palet = QtGui.QPalette()
parent.palet.setColor(QtGui.QPalette.Window, QtGui.QColor("#8c8c8c"))
parent.setPalette(parent.palet)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self);
# создание файла для сохранения натроек
self.CONFIG_FILE_NAME = 'settings\\config.ini'
self.centralWidget = QtWidgets.QWidget() # создаём центральный виджет
self.setCentralWidget(self.centralWidget)
self.mainLayout = QtWidgets.QVBoxLayout(self.centralWidget)
# settings
self.setFixedSize(620, 640)
self.setWindowTitle(" B U G ")
# делаем сборку
self.widget_main = self.createPage()
self.mainLayout.addWidget(self.widget_main)
self.view_theme_1 = None # +
self.view_theme_2 = None # +
self.createMenuBar()
self.themes = Themes() # +++
# условия для тем (чтобы задать стиль обьектов)
if self.view_theme_1.isChecked() == True:
self.themes.set_theme_number_1(self) # + self.themes
elif self.view_theme_2.isChecked() == True:
self.themes.set_theme_number_2(self) # + self.themes
# вывод информации на строку состояния
self.label_1 = QtWidgets.QLabel("v 1.0")
self.label_1.setStyleSheet("font-size: 18px; color: black;")
self.status_1.addPermanentWidget(self.label_1)
self.status_1.showMessage("Добро пожаловать", msecs = 4000)
self.setStatusBar(self.status_1)
def createPage(self):
"""создание страницы в основном окне """
self.widget_page = QtWidgets.QWidget()
# создание обьектов
self.button_1 = QtWidgets.QPushButton("Перейти к поиску телефонных\
\nномеров и электронных почт")
self.formbox = QtWidgets.QGridLayout()
# добавление в box и в окно
self.formbox.addWidget(self.button_1)
self.formbox.setSpacing(20)
self.widget_page.setLayout(self.formbox)
# сделать главным комонентом
return self.widget_page
def createMenuBar(self):
# создание панели-меню и строки состоянии
self.menu = QtWidgets.QMenuBar()
self.status_1 = QtWidgets.QStatusBar()
# создание категорий меню и функционал в ней
self.menu_options = QtWidgets.QMenu("Опции")
self.menu_view = QtWidgets.QMenu('Вид')
self.menu_help = QtWidgets.QMenu("Справка")
# просто настройки
self.sub_menu_options = QtWidgets.QMenu("Настройки")
self.user_settings = QtWidgets.QAction("Пользовательские настройки")
self.sub_menu_options.addAction(self.user_settings)
self.menu_options.addMenu(self.sub_menu_options)
# настройка тем
self.sub_menu_view_themes = QtWidgets.QMenu("Цветовая схема")
self.view_theme_1 = QtWidgets.QAction("Тёмно-синяя тема")
self.view_theme_1.setCheckable(True)
self.view_theme_2 = QtWidgets.QAction("Светло-серая тема")
self.view_theme_2.setCheckable(True)
self.view_theme_2.setChecked(True)
self.group_action_5 = QtWidgets.QActionGroup(self.sub_menu_view_themes)
self.group_action_5.addAction(self.view_theme_1)
self.group_action_5.addAction(self.view_theme_2)
self.sub_menu_view_themes.addAction(self.view_theme_1)
self.sub_menu_view_themes.addAction(self.view_theme_2)
self.menu_view.addMenu(self.sub_menu_view_themes)
# добавляем отдельное меню в главное меню
self.menu.addMenu(self.menu_options)
self.menu.addMenu(self.menu_view)
self.menu.addMenu(self.menu_help)
# датчики
self.user_settings.triggered.connect(self.clickedActionUser)
self.view_theme_1.triggered.connect(self.clickedActionViewTheme)
self.view_theme_2.triggered.connect(self.clickedActionViewTheme)
# добавляем в окно
self.setMenuBar(self.menu)
# методы для датчиков
def clickedActionViewTheme(self):
if self.view_theme_1.isChecked() == True:
self.themes.set_theme_number_1(self) # + self.themes
elif self.view_theme_2.isChecked() == True:
self.themes.set_theme_number_2(self) # + self.themes
def clickedActionUser(self):
# My_WindowSettings = WindowSettings(self) # - self
# My_WindowSettings.show()
self.My_WindowSettings = WindowSettings() # +++ <<<======<
self.My_WindowSettings.show()
class WindowSettings(QtWidgets.QWidget):
"""Класс реализующий пользовательские настройки
в виде выводящего окна """
def __init__(self, parent = None):
QtWidgets.QWidget.__init__(self, parent)
self.parent = parent
# settings
self.setFixedSize(500, 550)
self.setWindowTitle("Пользовательские настройки")
self.setWindowFlags(QtCore.Qt.Dialog)
self.setWindowModality(QtCore.Qt.WindowModal)
# делаем сборку
self.createPage()
def createPage(self):
self.gridBox = QtWidgets.QGridLayout()
self.tabWidget = QtWidgets.QTabWidget()
self.button_save = QtWidgets.QPushButton("Применить")
self.gridBox.addWidget(self.tabWidget, 0, 0)
self.gridBox.addWidget(self.button_save, 1, 0, alignment = QtCore.Qt.AlignRight)
self.setLayout(self.gridBox)
# сборка tab-виджетов
self.createTabWidget_Search()
def createTabWidget_Search(self):
self.tabWidget_1 = QtWidgets.QWidget()
self.tabWidget.addTab(self.tabWidget_1, "настройки поиска")
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MainWindow = MainWindow()
MainWindow.show()
sys.exit(app.exec_())

