Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
PyQt5

Стили виджета

23.06.2022, 16:29. Показов 468. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите почему не применяется стиль к виджету класса? Точнее границы не на всех рисуются. Если background во всех трех работает,то границы только в первых двух случаях. То есть походу виджет не поддерживает стили границ,но тогда почему в случае виджета без класса self.w1 отрисовалась?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from PyQt5 import QtCore, QtWidgets, QtGui
import sys, os
 
class CView(QtWidgets.QMainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setWindowTitle('главная')
        self.setStyleSheet("border: 1px solid black;")
        #self.setStyleSheet("background:white;")
        
        #Без self не откроются виджеты,точнее появятся на миг и исчезнут
        
        self.w1 = QtWidgets.QWidget()
        self.w1.setWindowTitle('1')
        self.w1.setStyleSheet("border: 1px solid black;")
        #self.w1.setStyleSheet("background:black;")
        self.w1.show()
 
        self.w2 = CenterWidget()
        self.w2.setWindowTitle('2')
        self.w2.setStyleSheet("border: 1px solid black;")
        #self.w2.setStyleSheet("background:red;")
        #self.w2.setStyleSheet("QWidget{border-width:1px;border-style:solid;border-color: black;}")
        self.w2.show()
 
class CenterWidget(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)        
 
        
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle('Fusion')
    mw = CView()
    mw.show()
    sys.exit( app.exec_() )
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.06.2022, 16:29
Ответы с готовыми решениями:

Изменение размера виджета
Привет всем Как заставить ресайзится виджет внутри основного окна? Но не меньше, минимального размера и так же виджет нельзя двигать с...

Фон виджета на pyqt5
Привет всем!Помогите ,пожалуйста, с установкой фона в виде изображения:) from PyQt5.QtWidgets import QApplication, QWidget from...

Использование стороннего виджета
Добрый день Возникла такая проблема. Для написания программы на Python с использованием PyQT мне нужно использовать сторонний виджет,...

4
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
24.06.2022, 10:23  [ТС]
Сам задал сам и отвечу. Походу в классе стили не все работают. И надо самим рисовать,то есть через функцию paintEvent. Добавил стиль только почему то отрисовалась слева и вверху. А где граница справа и внизу? И зачем такой гемор придумали не понятно,ладно там для более сложных то пусть и через paintEvent рисуют,но простые то.

Python
1
2
3
4
5
6
7
8
9
class CenterWidget(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        #self.setStyleSheet("border: 1px solid black;") #не работает
 
    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.setPen(QtGui.QPen(QtCore.Qt.black,1))
        painter.drawRect(self.rect())
0
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
29.06.2022, 15:12  [ТС]
Короче пока сделал так. То есть получается все что создается классом стили рисуем в функции paintEvent,чтобы не было вопросов.

Python
1
2
3
4
5
def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.setPen(QtGui.QPen(QtCore.Qt.black,1))
        #painter.drawRect(self.rect())
        painter.drawRect(0,0,self.size().width()-1,self.size().height()-1)
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
29.06.2022, 16:03
Все работает, учи css, потом qss.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from PySide2 import QtCore, QtWidgets, QtGui
import sys, os
 
 
styleSheet = """
    QWidget {
        border: 1px solid black;
    }
"""
 
class Example(QtWidgets.QMainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setWindowTitle('главная')
        
        w1 = QtWidgets.QWidget(self)
 
        w2 = QtWidgets.QWidget(self)
 
        cw = QtWidgets.QWidget(self)
        cwLayout = QtWidgets.QHBoxLayout(cw)
        cwLayout.addWidget(w1)
        cwLayout.addWidget(w2)
 
        self.setCentralWidget(cw)
 
 
 
        
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle('Fusion')
    app.setStyleSheet(styleSheet)
    mw = Example()
    mw.show()
    sys.exit(app.exec_())
0
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
29.06.2022, 16:14  [ТС]
Fudthhh, В смысле учи? Это все в одном окне рисует,а попробуйте мой вариант и тоже не сработает))) То есть при создании виджетов классами не все стили работают. Вроде даже в доке написано что не поддерживает некоторые стили виджет.

То есть вот приложил ваш вариант но с отдельными окнами,скопируйте и запустите:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.Qt import Qt
import sys, os
 
styleSheet = """
    QWidget {
        border: 1px solid black;
    }
"""
 
class CView(QtWidgets.QMainWindow):
    def __init__(self):
        QtWidgets.QMainWindow.__init__(self)
        self.setWindowTitle('главная')
        self.setStyleSheet("border: 1px solid black;")
        #self.setStyleSheet("background:white;")
        
        #Без self не откроются виджеты,точнее появятся на миг и исчезнут
        
        self.w1 = QtWidgets.QWidget()
        self.w1.setWindowTitle('1')
        #self.w1.setStyleSheet("border: 1px solid black;")
        #self.w1.setStyleSheet("background:black;")
        self.w1.show()
 
        #Не работает стиль границ. Почему?
        self.w2 = CenterWidget()
        self.w2.setWindowTitle('2')
        #self.w2.setStyleSheet("border: 1px solid black;")
        #self.w2.setStyleSheet("background:red;")        
        self.w2.show()
 
class CenterWidget(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        #self.setStyleSheet("border: 1px solid black;") #не работает
 
##    #рисуем границу
##    def paintEvent(self, event):
##        painter = QtGui.QPainter(self)
##        painter.setPen(QtGui.QPen(QtCore.Qt.black,1))
##        #painter.drawRect(self.rect())
##        painter.drawRect(0,0,self.size().width()-1,self.size().height()-1)
 
 
 
        
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    app.setStyle('Fusion')
    app.setStyleSheet(styleSheet)
    mw = CView()
    mw.show()
    sys.exit( app.exec_() )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.06.2022, 16:14
Помогаю со студенческими работами здесь

Не выводится текст у виджета в PyQt5
Хотел через цикл создать виджеты, но у них не выводится рядом текст. import sys from PyQt5.QtWidgets import QApplication, QWidget,...

Получение значения виджета QDateTimeEdit
Как я могу получить значение из виджета QDateTimeEdit в строку/переменную? В моей программе, пользователь вводит дату и время в виджет...

PyQt5 | Отображение виджета во фрейме
Доброго времени суток. Столкнулся со следующей проблемой: у меня есть виджет, который рисует текст, и фрейм, в котором нужно этот текст...

Как поменять фон виджета?
Доброго времени суток, есть задача изменить фоновый цвет виджета в kivy На данный момент есть такой кусок кода: class W(App): ...

Привязка метода к событию виджета
Как привязать к событию виджета метод с параметром from tkinter import* def func_print(event, str): print("text")...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru