matplotlib - ماتبلوتليب والشفافية الرقم



background pyqt (1)

تحدث المشكلة بسبب تعيين صورة الخلفية كملونة إلى القطعة. هذا يسبب قماش لورث لوحة، وبالتالي فإن قماش أيضا صورة كخلفية، تراكب بطريقة أو بأخرى خلفية القطعة.

والحل سيكون لضبط خلفية قماش شفافة. طريقة سهلة للقيام بذلك هي ورقة الأنماط.

self.canvas.setStyleSheet("background-color:transparent;")

لاحظ أن هذا ليس نفس تعيين "الوجه الوجهي" بقع لا شيء. هذا الرقم لديه خلفية، والتي تسيطر داخل ماتلوتليب، ولكن قماش، ويجري كائن بيكت أيضا خلفية.

مثال كامل:

import sys, os
from PyQt4.QtCore import Qt
from PyQt4.QtGui import *

import matplotlib
matplotlib.use('Qt4Agg') 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
plt.rcParams['xtick.color'] ="w"
plt.rcParams['ytick.color'] ="w"
plt.rcParams['font.size'] = 14


class SecondWindow(QWidget):
    def __init__(self, parent=None):
        super(SecondWindow, self).__init__(parent)

        # CREATE FIGURE AND SETTINGS
        self.figure = plt.figure()
        self.figure.patch.set_facecolor("None")
        self.canvas = FigureCanvas(self.figure)
        self.axes = self.figure.add_subplot(111)
        self.axes.patch.set_alpha(0.5)

        ###### Make the background of the canvas transparent
        self.canvas.setStyleSheet("background-color:transparent;")

        self.p = QPalette()
        self.p.setBrush(QPalette.Background, QBrush(QPixmap("house.png")))
        self.setPalette(self.p)

        self.setLayout(QVBoxLayout())
        self.layout().addWidget(self.canvas,1)
        self.layout().setContentsMargins(50, 50, 50, 50)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = SecondWindow()
    form.show()
    sys.exit(app.exec_())

والتي قد تبدو بعد ذلك

أنا أعمل مع مكتبة PyQt5 و PyQt5 مع Python 3.6 . إضافة شخصية في نافذة أنا إنشاء، وأود أن وضع شفافة خلفية هذا الرقم لأنني إضافة صورة إلى خلفية النافذة. ولكن، هذا الرقم ليس حقا شفافة، فإنه يكرر صورة خلفية النافذة. على سبيل المثال، شخص يتعامل مع نفس المشكلة قبل عامين: ماتبلوتليب و pyqt4 خلفية شفافة

هنا مثال عملي (مع خلفية سوداء ولكن الرقم ليس أسود):

import sys, os
from PyQt5.QtCore import Qt
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

import matplotlib
matplotlib.use('Qt5Agg') # Make sure that we are using QT5
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import matplotlib.pyplot as plt

class SecondWindow(QWidget):
    def __init__(self, parent=None):
        super(SecondWindow, self).__init__(parent)
        self.setupUi(self)

    def setupUi(self, Form):
        # WINDOW SETTINGS
        Form.setWindowTitle('Hello')
        self.p = QPalette()
        self.pixmap = QPixmap(os.getcwd() + "/logo.png").scaled(self.size(), Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
        self.p.setBrush(QPalette.Background, QBrush(self.pixmap))
        self.setPalette(self.p)

        # CREATE FIGURE AND SETTINGS
        self.figure = plt.figure()
        self.figure.patch.set_facecolor('None')
        self.figure.patch.set_alpha(0)
        self.canvas = FigureCanvas(self.figure)
        self.axes = self.figure.add_subplot(111)

        # WINDOW LAYOUT (with H1 and H2)
        self.setLayout(QVBoxLayout())
        self.layout().addWidget(self.canvas,1)
        self.layout().setContentsMargins(50, 50, 50, 50)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = SecondWindow()
    form.show()
    sys.exit(app.exec_())

أبحث عن الجواب خلال ساعات طويلة ولكن لم تجد حلا بعد. شكرا لأي مساعدة يمكنك إحضار!

  • نظام التشغيل: ويندوز 7 برو
  • ماتلوتليب الإصدار: 2.0.2 (تثبيت عن طريق أناكوندا، كوندا تثبيت ماتبلوتليب - قناة كوندا-فورج)
  • بيثون الإصدار: بيثون 3.6
  • اناكوندا 3




transparent