Как изменить цвет кнопки qt c
Перейти к содержимому

Как изменить цвет кнопки qt c

  • автор:

Как изменить цвет кнопки qt c

На этом шаге мы рассмотрим инструменты для решения указанной задачи .

  • Active и Normal — компонент активен (окно находится в фокусе ввода);
  • Disabled (значение 1) — компонент недоступен;
  • Inactive (значение 2) — компонент неактивен (окно находится вне фокуса ввода).

Получить текущую палитру компонента позволяет его метод palette() . Чтобы изменить цвет для какой-либо роли и состояния, следует воспользоваться методом setColor() класса QPalette . Формат метода:

setColor ([Состояние>, ]Роль>, Цвет>)

В параметре < Роль >указывается, для какого элемента изменяется цвет. Например, атрибут Window (или Background ) изменяет цвет фона, a WindowText (или Foreground ) — цвет текста. Полный список атрибутов имеется в документации по классу QPalette (см. https://doc.qt.io/qt-5/qpalette.html ).

В параметре < Цвет >указывается цвет элемента. В качестве значения можно указать атрибут из класса QtCore.Qt (например, black , white и т. д.) или экземпляр класса QColor (например, QColor(«red») , QColor(«#ff0000») , QColor(255, 0, 0) и др.).

После настройки палитры необходимо вызвать метод setPalette() компонента и передать этому методу измененный объект палитры. Следует помнить, что компоненты-потомки по умолчанию имеют прозрачный фон и не перерисовываются автоматически. Чтобы включить перерисовку, необходимо передать значение True методу setAutoFillBackground() окна.

Изменить цвет фона можно также с помощью CSS -атрибута background-соlor . Для этого следует передать таблицу стилей в метод setStyleSheet() компонента. Таблицы стилей могут быть внешними (подключение через командную строку), установленными на уровне приложения (с помощью метода setStyleSheet() класса QApplication ) или установленными на уровне компонента (с помощью метода setStyleSheet() класса QWidget ). Атрибуты, установленные последними, обычно перекрывают значения аналогичных атрибутов, указанных ранее. Если вы занимались Web -программированием, то CSS вам уже знаком, а если нет, то придется дополнительно изучить HTML и CSS .

Создадим окно с надписью. Для активного окна установим зеленый цвет, а для неактивного — красный. Цвет фона надписи сделаем белым. Для изменения фона окна используем палитру, а для изменения цвета фона надписи — CSS -атрибут background-соlor .

# -*- coding: utf-8 -*- from PyQt5 import QtCore, QtGui, QtWidgets import sys app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget() window.setWindowTitle("Изменение цвета фона окна") window.resize(300, 100) pal = window.palette() pal.setColor(QtGui.QPalette.Normal, QtGui.QPalette.Window, QtGui.QColor("#008800")) pal.setColor(QtGui.QPalette.Inactive, QtGui.QPalette.Window, QtGui.QColor("#ff0000")) window.setPalette(pal) label = QtWidgets.QLabel("Текст надписи") label.setAlignment(QtCore.Qt.AlignHCenter) label.setStyleSheet("background-color: #ffffff;") label.setAutoFillBackground(True) vbox = QtWidgets.QVBoxLayout() vbox.addWidget(label) window.setLayout(vbox) window.show() sys.exit(app.exec_())

Архив с файлом можно взять здесь.

Результат работы приложения изображен на рисунке 1.

Рис.1. Внешний вид активного (вверху) и неактивного (внизу) окна

На следующем шаге мы рассмотрим вывод изображения в качестве фона .

Как изменить цвет кнопки qt c

Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0

Код
QPalette pal=ui->name_vidget->palette();
pal.setColor(QPalette::param1, QPalette::param2, Qt::green);
ui->name_vidget ->setPalette(pal);

почему цвет виджета не меняется, если:
1. name_vidget=pushButton param1=Active param2=Button
2. name_vidget=label param1= Active param2= Text

3. name_vidget=lineEdit/comboBox param1= Active param2= Base/Text — все работает верно, а чем тогда label хуже (в вар.2 цвет текста у лейбла не меняется)?

Мне надо поменять цвет кнопки…думал, что вар-т 1, а не получается….в чем ошибка и как будет правильно?

Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0

и все-таки — как поменять цвет кнопки? что у меня в коде (см. выше) неверно/не хватает?

Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135

Код
pushBtn->setStyleSheet( » background-color: green; » );

вообще сами qt-шники советуют использовать styleSheet
Женщины отличаются от программистов тем, что у них чары состоят из стрингов

Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0

borisbn: спасибо за ответ, но почему в Вашем примере зеленый такой темный? Qt::green гораздо светлее (см. мой вар-т №3 выше). мне светлый нужен (вроде наз-ся Qt::green, а на самом деле салатовый).
и почему все-таки с палитрой (как я хотел выше) не получается?

Это сообщение отредактировал(а) gordmiand — 28.2.2010, 12:16

Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91

Открой дизайнер, выдели label на виджете и в свойствах объекта найди Palette, экспериментируй там.
Национальная группа Russian Federation на QtCentre.

  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt — не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой «Код».
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, «кряков», взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »

[ Время генерации скрипта: 0.1300 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Как изменить цвет кнопки qt c

Рейтинг (т): 22
Сабж.
Зарание спасибо.
Сообщ. #2 , 02.12.09, 09:19

Рейтинг (т): 44
QWidget::setStylesheet
Сообщ. #3 , 02.12.09, 09:51

Рейтинг (т): 22
В 3 тьем QT такого нету. мне просто нужно изменить цвет нажатой кнопки.
Сообщ. #4 , 02.12.09, 14:52

Рейтинг (т): 22

Нужно переопределить QPushButton::paintEvent, что там у него в нутрях вертиться а?

Добавлено 02.12.09, 15:27
Суть в том что QPushButton::paintEvent Перерисовывает кнопку + задает ей серый цвет. а мне нужен другой.

Сообщ. #5 , 02.12.09, 17:24

Рейтинг (т): 64
Цитата Painkiller @ 02.12.09, 09:51
В 3 тьем QT такого нету

а в чем смысл использовать такую древность? кстати, вчера вышла Qt 4.6
Сообщ. #6 , 02.12.09, 17:31
Unregistered

для не нажатой кнопки background-color:

pushButton->setStyleSheet(QString::fromUtf8(«background-color: rgb(244, 115, 255);»));

для нажатой ничего нет.

Как навсегда изменить цвет кнопки при нажатии в Qt Designer (CSS)?

Суть вопроса в том, что при нажатии она становиться темнее, а после как убираешь курсор цвет возвращается в исходный. Мне нужно сделать чтобы при каждом нажатии на кнопку ее цвет менялся навсегда. Допустим кнопка красная, когда по ней щелкну она станет желтой, если кликну 2 раз, то зеленой. Есть ли такая возможность на CSS?
Заранее благодарен.

  • Вопрос задан 03 янв.
  • 544 просмотра

Комментировать

Решения вопроса 1

Логику окрашивания кнопки в зависимости от количества кликов вам надо делать в коде.

Ответ написан 03 янв.

Vismutof @Vismutof Автор вопроса

Спасибо, просто думал что можно это сразу же проделать и после в коде не заморачиваться, видимо не вышло.

Ответы на вопрос 0

Ваш ответ на вопрос

Войдите, чтобы написать ответ

qt

  • Qt

По завершении программы происходит sigsegv?

  • 1 подписчик
  • вчера
  • 19 просмотров

qt

  • Qt
  • +1 ещё

Почему не очищается QGridLayout?

  • 1 подписчик
  • 05 дек.
  • 23 просмотра

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *