@kgresov

Как задать бэкграунд виджета с помощью QPixmap?

Есть вот такой код
import sys

import sys
from datetime import datetime

from PyQt5 import QtWidgets, QtCore
from PyQt5.QtGui import QColor, QPalette, QBrush, QPixmap, \
    QPolygon, QPainter
from PyQt5.QtCore import QPoint, QTimer, Qt
from PyQt5.QtWidgets import QWidget, QApplication, QAction, QMainWindow


class Clock(QWidget):
    def __init__(self):
        super().__init__()
        pixmap = QPixmap("clock.png").scaled(291, 291,
                                             Qt.KeepAspectRatio, Qt.FastTransformation)
        pal = self.palette()
        pal.setBrush(QPalette.Normal, QPalette.Window, QBrush(pixmap))
        # pal.setBrush(QPalette.Inactive, QPalette.Window, QBrush(pixmap))
        self.setPalette(pal)
        self.setMask(pixmap.mask())

        self.checktime()

        self.hourColor = QColor(127, 0, 127)
        self.minuteColor = QColor(0, 127, 127, 191)
        self.secondColor = QColor(127, 127, 0, 120)

        self.initUI()

        # quitAction = QAction("Exit", self, shortcut="Ctrl+Q", triggered=self.close)
        # self.addAction(quitAction)
        self.setContextMenuPolicy(Qt.ActionsContextMenu)

        self.timer = QTimer()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.update)
        self.timer.start()

    def handChange(self):
        self.side = min(self.width(), self.height())
        self.hand = (max(self.side / 200, 4), max(self.side / 100, 8), max(self.side / 40, 30))
        self.hourHand = QPolygon([
            QPoint(self.hand[0], self.hand[1]),
            QPoint(-self.hand[0], self.hand[1]),
            QPoint(0, -self.hand[2])
        ])
        self.minuteHand = QPolygon([
            QPoint(self.hand[0], self.hand[1]),
            QPoint(-self.hand[0], self.hand[1]),
            QPoint(0, int(-self.hand[2] * 1.6))
        ])
        self.secondHand = QPolygon([
            QPoint(self.hand[0], self.hand[1]),
            QPoint(-self.hand[0], self.hand[1]),
            QPoint(0, int(-self.hand[2] * 1.6 * 1.6))
        ])

    def initUI(self):
        self.setFixedSize(291, 291)
        self.handChange()

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        self.draw(event, painter)
        painter.end()

    def draw(self, event, painter):
        self.checktime()
        painter.translate(self.width() / 2, self.height() / 2)
        painter.scale(self.side / 200.0, self.side / 200.0)

        painter.setPen(Qt.NoPen)
        painter.setBrush(self.hourColor)
        painter.save()
        painter.rotate(30.0 * ((self.time.hour + self.time.minute / 60.0)))
        painter.drawConvexPolygon(self.hourHand)
        painter.restore()

        painter.setPen(Qt.NoPen)
        painter.setBrush(self.minuteColor)
        painter.save()

        painter.rotate(6.0 * ((self.time.minute + (self.time.second) / 60.0)))
        painter.drawConvexPolygon(self.minuteHand)
        painter.restore()

        painter.setPen(Qt.NoPen)
        painter.setBrush(self.secondColor)
        painter.save()
        painter.rotate(6.0 * (self.time.second))
        painter.drawConvexPolygon(self.secondHand)
        painter.restore()

    def checktime(self):
        self.time = datetime.now()
        self.hour = self.time.hour
        self.minute = self.time.minute
        self.second = self.time.second


class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.init_gui()

    def init_gui(self):
        self.window = QtWidgets.QWidget()
        self.layout = QtWidgets.QGridLayout()
        self.setCentralWidget(self.window)
        self.window.setLayout(self.layout)
        self.clock_widget = Clock()
        self.layout.addWidget(self.clock_widget)

        self.setObjectName("Form")
        self.resize(825, 552)
        self.listWidget = QtWidgets.QListWidget(self.window)
        self.listWidget.setGeometry(QtCore.QRect(0, 340, 371, 211))
        self.listWidget.setObjectName("listWidget")
        self.moscow = Clock()
        # self.moscow.
        self.widget = QtWidgets.QWidget(self.window)
        self.widget.setGeometry(QtCore.QRect(0, 10, 811, 21))
        self.widget.setObjectName("widget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.horizontalLayout.addWidget(self.label)
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
        self.label_2.setObjectName("label_2")
        self.horizontalLayout.addWidget(self.label_2)
        self.widget1 = QtWidgets.QWidget(self.window)
        self.widget1.setGeometry(QtCore.QRect(370, 340, 441, 30))
        self.widget1.setObjectName("widget1")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget1)
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_3 = QtWidgets.QLabel(self.widget1)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_2.addWidget(self.label_3)
        self.timeEdit = QtWidgets.QTimeEdit(self.widget1)
        self.timeEdit.setObjectName("timeEdit")
        self.horizontalLayout_2.addWidget(self.timeEdit)
        self.widget2 = QtWidgets.QWidget(self.window)
        self.widget2.setGeometry(QtCore.QRect(370, 370, 441, 91))
        self.widget2.setObjectName("widget2")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget2)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.comboBox = QtWidgets.QComboBox(self.widget2)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.verticalLayout.addWidget(self.comboBox)
        self.pushButton = QtWidgets.QPushButton(self.widget2)
        self.pushButton.setStyleSheet("background: rgb(0, 255, 0);")
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.pushButton_2 = QtWidgets.QPushButton(self.widget2)
        self.pushButton_2.setStyleSheet("background: rgb(255, 0, 0)")
        self.pushButton_2.setObjectName("pushButton_2")
        self.verticalLayout.addWidget(self.pushButton_2)
        self.widget3 = QtWidgets.QWidget(self.window)
        self.widget3.setGeometry(QtCore.QRect(370, 460, 441, 91))
        self.widget3.setObjectName("widget3")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget3)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.label_4 = QtWidgets.QLabel(self.widget3)
        self.label_4.setAlignment(QtCore.Qt.AlignCenter)
        self.label_4.setObjectName("label_4")
        self.verticalLayout_2.addWidget(self.label_4)
        self.timeEdit_2 = QtWidgets.QTimeEdit(self.widget3)
        self.timeEdit_2.setAlignment(QtCore.Qt.AlignCenter)
        self.timeEdit_2.setObjectName("timeEdit_2")
        self.verticalLayout_2.addWidget(self.timeEdit_2)
        self.pushButton_3 = QtWidgets.QPushButton(self.widget3)
        self.pushButton_3.setObjectName("pushButton_3")
        self.verticalLayout_2.addWidget(self.pushButton_3)

        self.retranslateUi(self.window)
        QtCore.QMetaObject.connectSlotsByName(self.window)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "Москва"))
        self.label_2.setText(_translate("Form", "Гринвич"))
        self.label_3.setText(_translate("Form", "Время по МСК"))
        self.comboBox.setItemText(0, _translate("Form", "Мелодия 1"))
        self.comboBox.setItemText(1, _translate("Form", "Мелодия 2"))
        self.comboBox.setItemText(2, _translate("Form", "Мелодия 3"))
        self.pushButton.setText(_translate("Form", "Добавить будильник"))
        self.pushButton_2.setText(_translate("Form", "Удалить будильник"))
        self.label_4.setText(_translate("Form", "Таймер"))
        self.pushButton_3.setText(_translate("Form", "Установить таймер"))


if __name__ == '__main__':
    app = QtWidgets.QApplication([])

    win = MainWindow()
    win.show()

    sys.exit(app.exec_())

Проблема в том, что QPixmap не отображается, и соответственно видны только стрелки, а не весь циферблат. Подскажите пожалуйста, как решить проблему, очень хочется чтобы всё было красиво)))
  • Вопрос задан
  • 27 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы