QPixmap / QPainter показывает черный фон окна - PullRequest
1 голос
/ 05 августа 2020

Я следую примеру из книги Мартина Фитцпатрика о PyQt5. Когда я запускаю следующий код, фон черный, а линия не рисуется:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtCore import Qt

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.label = QtWidgets.QLabel()

        canvas = QtGui.QPixmap(400, 300)

        self.label.setPixmap(canvas)
        self.setCentralWidget(self.label)
        self.draw_something()

    def draw_something(self):
        painter = QtGui.QPainter(self.label.pixmap())
        painter.drawLine(10, 10, 300, 200)
        painter.end()


app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

Ожидаемый результат слева: Сравнение

1 Ответ

2 голосов
/ 05 августа 2020

По умолчанию память, которую использует QPixmap, не очищается по эффективности, поэтому байты не изменяются, как указано в документах :

QPixmap :: QPixmap (int width, int height)

Создает растровое изображение с заданной шириной и высотой. Если ширина или высота равны нулю, создается пустое растровое изображение.


Предупреждение: Это создаст QPixmap с неинициализированными данными. Вызов fill () чтобы заполнить растровое изображение соответствующим цветом перед рисованием на нем с помощью QPainter.

(выделено мной)

Решение состоит в том, чтобы использовать заливку для установки фона цвет:

canvas = QtGui.QPixmap(400, 300)
canvas.fill(QtGui.QColor("white"))
...