matplotlib和透明图形
我正在使用matplotlib和透明图形,matplotlib,background,pyqt,transparent,Matplotlib,Background,Pyqt,Transparent,我正在使用matplotlib库和PyQt5使用python3.6。我在我创建的窗口中添加了一个人物,我希望将这个人物的背景设置为透明,因为我在窗口的背景中添加了一个图像。但是,图形不是真正透明的,它复制了窗口的背景图像。 例如,两年前有人处理过同样的问题: 下面是一个工作示例(背景为黑色,但图形不是黑色): 我花了很长时间寻找答案,但还没有找到解决办法。谢谢你能带来的任何帮助 操作系统:Windows7Pro Matplotlib版本:2.0.2(通过Anaconda安装,conda安装M
matplotlib
库和PyQt5
使用python3.6
。我在我创建的窗口中添加了一个人物,我希望将这个人物的背景设置为透明,因为我在窗口的背景中添加了一个图像。但是,图形不是真正透明的,它复制了窗口的背景图像。
例如,两年前有人处理过同样的问题:
下面是一个工作示例(背景为黑色,但图形不是黑色):
我花了很长时间寻找答案,但还没有找到解决办法。谢谢你能带来的任何帮助
- 操作系统:Windows7Pro
- Matplotlib版本:2.0.2(通过Anaconda安装,conda安装Matplotlib--通道conda forge)
- Python版本:Python 3.6
- 水蟒3
self.canvas.setStyleSheet("background-color:transparent;")
请注意,这与将面片的facecolor设置为none不同。图形有一个背景,该背景在matplotlib中控制,但作为PyQt对象的画布也有一个背景
完整示例:
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_())
然后看起来像
我认为对这个问题进行深入研究会有所帮助,这样想在这个问题上进行试验的人就可以轻松开始。完成。很抱歉,今天早上我没有时间这么做。这个示例既不可运行,也不可最小化。由于这个问题已经被问了两年,而且一直没有得到回答,因此,从本质上说,唯一能让你的问题不至于落得如此下场的办法就是提供问题的答案。也就是说,忘记你的代码。编写可运行的新代码(可以从问题中复制和粘贴)并显示问题。现在是;)我不知道如何找到一个经典的图像都在他的电脑上。谢谢它的工作!我总是发现Qt和matplotlib,所以我没有想过尝试一下。
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_())