Python Matplotlib:如何在Windows上使背景透明

Python Matplotlib:如何在Windows上使背景透明,python,matplotlib,pyqt5,alpha-transparency,Python,Matplotlib,Pyqt5,Alpha Transparency,我需要整个绘图窗口是透明的,这样可以通过绘图看到桌面上的chrome窗口,这样我可以在看到后面的内容的同时向其添加点 我上面列出的答案正是我想要做的,只是我的交互系统不能与TK一起工作。我想用Qt5Agg。当我运行上面的代码时,系统不会接受它——它说QT5当前正在运行。如果我在没有加载QT的情况下运行它,它会创建一个空白的透明窗口(耶!),但是如果我移动它或单击图标,它会变成不透明的黑色,没有任何绘图。如果我把tk换成Qt5,它会在电梯上抱怨。如果我删除“赢”代码,它就没有透明度(显然)。我尝

我需要整个绘图窗口是透明的,这样可以通过绘图看到桌面上的chrome窗口,这样我可以在看到后面的内容的同时向其添加点

我上面列出的答案正是我想要做的,只是我的交互系统不能与TK一起工作。我想用Qt5Agg。当我运行上面的代码时,系统不会接受它——它说QT5当前正在运行。如果我在没有加载QT的情况下运行它,它会创建一个空白的透明窗口(耶!),但是如果我移动它或单击图标,它会变成不透明的黑色,没有任何绘图。如果我把tk换成Qt5,它会在电梯上抱怨。如果我删除“赢”代码,它就没有透明度(显然)。我尝试添加我能想到的所有东西,使画布透明,我可以改变颜色,但不能使其透明


import matplotlib
# make sure Tk backend is used
matplotlib.use("TkAgg")  
import matplotlib.pyplot as plt

# create a figure and some subplots
fig, ax = plt.subplots(figsize=(4,2))
ax.plot([2,3,5,1])
fig.tight_layout()

win = plt.gcf().canvas.manager.window

win.lift()
win.attributes("-topmost", True)
win.attributes("-transparentcolor", "white")

plt.show()

当我做出以下建议的更改时:

我在一个普通的Spyder 4.1.3 | Python 3.7.7 64位| Qt5.9.6 | PyQt5 5.9.2 | Windows 10中找到了它

为了导入
QtCore
,我必须首先

  • conda安装pyqt

  • 不够,因此
    conda安装pyqt5

  • 还有
    conda更新--all

当我这样做时,代码运行时没有错误。这是一个更好的第一个结果!,但我仍然只得到冻结的mpl.fig窗口。然而,这一次,它是白色的。控制台返回,但mpl窗口挂起。再次运行,一个新的冻结窗口。重新启动并再次运行:结果相同

我希望这是一个简单的错误;请教这个新手

@埃兰ESC
修订版:Python屏幕跟踪应用程序-需要一个几乎透明的绘图窗口。 我需要整个绘图窗口是透明的,这样可以通过绘图看到桌面上的chrome窗口,这样我可以在看到后面的内容的同时向其添加绘图(x,y)点

添加命令
win.setWindowFlags(QtCore.Qt.FramelessWindowHint)
确实使窗口透明,但它使工具栏透明,去掉了标题栏,并取消了移动或调整窗口大小的功能。它还使得图形区域对鼠标不敏感,除非我在直线上。我将facecolor属性添加到subplots命令中,以便查看发生了什么。只要我为fig alpha或ax alpha设置一个非零值,图形对鼠标在整个区域上的移动非常敏感

我需要能够移动和调整窗口大小,并希望工具栏不透明,或至少对整个工具栏上的鼠标敏感。你能帮忙吗?谢谢你过去的帮助

## Python Code Fragment by Helen for Windows 10
## to test sequence creating plot with transparent
## background (to be used to trace and record xy pairs)

from PyQt5 import QtCore
import matplotlib
matplotlib.use("Qt5Agg")  #define backend, must be before pyplot is imported
import matplotlib.pyplot as plt

# create a figure and a subplot
fig,ax = plt.subplots(figsize=(4, 2),facecolor=(1.,1.,0.,0.1)) #facecolor of figure

fig.patch.set_alpha(0.1) 
ax.patch.set_alpha(0.1)

# plot some fixed points
ax.plot([2, 3, 5, 1])
fig.tight_layout()

#make window transparent to the desktop
win = plt.gcf().canvas.manager.window
win.setAttribute(QtCore.Qt.WA_NoSystemBackground, True)
win.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
win.setStyleSheet("background:transparent")
win.setWindowFlags(QtCore.Qt.FramelessWindowHint) 
win.setWindowTitle("My App")

plt.show()

您必须使用在Linux上测试的Qt标志:

from PyQt5 import QtCore


import matplotlib

# make sure Tk backend is used
matplotlib.use("Qt5Agg")
import matplotlib.pyplot as plt

# create a figure and some subplots
fig, ax = plt.subplots(figsize=(4, 2))
fig.patch.set_alpha(0.0)
ax.patch.set_alpha(0.0)

ax.plot([2, 3, 5, 1])
fig.tight_layout()

win = plt.gcf().canvas.manager.window
win.setAttribute(QtCore.Qt.WA_NoSystemBackground, True)
win.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)
win.setStyleSheet("background:transparent")

plt.show()

+1用于快速响应,并经过测试和演示。如果我能做另一个+1,它将是你的翻译qt例子回购。()教鱼。做得好。我在Linux上试过,它在那里工作,正如你所展示的。我想知道为什么windows不这样做。任何人的想法?@ElderDelp Transparency取决于操作系统,在windows中,要使Qt窗口透明,则不应使用本机标题栏:添加
win.setWindowFlags(QtCore.Qt.FramelessWindowHint)
并告诉我它是否有效。我在win.setStyleSheet代码行之后添加了这一行。现在我得到一个透明窗口,标题为“figure 1”,左上角有一个图标,右上角有一个delete X。如果我点击窗口,它会变成黑色。我不能移动或伸展它。如果在运行前在控制台中键入%matplotlib qt,则bkgrnd是黑色的图形,顶部有左箭头和右箭头,不工作,我无法移动窗口,但我可以从右下角拉伸它。我可以从控制条上的图标中删除窗口。非常感谢您的快速响应!非常感谢。