Python 在没有任何控件可见的情况下,如何显示matplotlib交互式窗口?

Python 在没有任何控件可见的情况下,如何显示matplotlib交互式窗口?,python,matplotlib,xfce,Python,Matplotlib,Xfce,我需要在用户Xfce4桌面上显示PNG。到目前为止,我正在使用一个python脚本,该脚本在交互式matplotlib窗口中显示PNG: import matplotlib.pyplot as plt import matplotlib.image as mpimg img = mpimg.imread("My.png") plt.imshow(img) plt.show() 但这很不吸引人。有没有办法删除所有交互式控件、图像周围的所有边框空间(轴?),并在启动时将窗口调整为特定的宽度/高度

我需要在用户Xfce4桌面上显示PNG。到目前为止,我正在使用一个python脚本,该脚本在交互式matplotlib窗口中显示PNG:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread("My.png")
plt.imshow(img)
plt.show()
但这很不吸引人。有没有办法删除所有交互式控件、图像周围的所有边框空间(轴?),并在启动时将窗口调整为特定的宽度/高度

或者,是否有更好的选项在桌面上提供图像的轻量级静态显示?当然不必是python/matplotlib。

试试这个:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

w = 10
h = 20
fig, ax = plt.subplots(figsize=(10, 20))
ax.axis('off')
img = mpimg.imread("c:\mario.png")
plt.imshow(img)
plt.show()

当然,但是在这一点上,你可以考虑使用一个“裸”的GUI工具包。p> 无论如何,matplotlib的方法如下:

import matplotlib.pyplot as plt

# Note that the size is in inches at 80dpi. 
# To set a size in pixels, divide by 80.
fig = plt.figure(figsize=(4, 5))

# Now we'll add an Axes that takes up the full figure
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off') # Hide all ticks, labels, outlines, etc.

# Display the image so that it will stretch to fit the size
# of the figure (pixels won't be square)
ax.imshow(plt.imread('test.png'), aspect='auto')

plt.show()
除了隐藏工具栏之外,它完成了所有操作。要隐藏工具栏,您需要特定于后端。您有两个选项:1)手动处理创建窗口并将matplotlib画布嵌入其中;2)使用特定于后端的方法隐藏工具栏

作为隐藏工具栏的一个示例,使用基于qt的后端,您可以执行以下操作:

import matplotlib
matplotlib.use('qt4agg')
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4, 5))
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')

ax.imshow(plt.imread('test.png'), aspect='auto')

# qt specific!
fig.canvas.toolbar.setVisible(False)

plt.show()
import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4, 5))
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')

ax.imshow(plt.imread('test.png'), aspect='auto')

# Tk specific!
fig.canvas.toolbar.pack_forget()

plt.show()
对于Tk后端,您可以执行以下操作:

import matplotlib
matplotlib.use('qt4agg')
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4, 5))
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')

ax.imshow(plt.imread('test.png'), aspect='auto')

# qt specific!
fig.canvas.toolbar.setVisible(False)

plt.show()
import matplotlib
matplotlib.use('tkagg')
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(4, 5))
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')

ax.imshow(plt.imread('test.png'), aspect='auto')

# Tk specific!
fig.canvas.toolbar.pack_forget()

plt.show()
相比之下,如果您想一起跳过matplotlib并只使用Tkinter,您可以执行以下操作:

import Tkinter as tk
from PIL import ImageTk

root = tk.Tk()

im = ImageTk.PhotoImage(file='test.png')
panel = tk.Label(root, image=im)
panel.pack(fill=tk.BOTH, expand=True)

root.mainloop()

这会在屏幕上以一个像素对一个像素的比例显示图像,不允许调整大小。但是,它是尽可能最小的。

您只想打开一个图像吗?这有用吗?有没有办法使用nbagg后端来实现这一点?