2016-03-25 8 views
2

Ich muss ein PNG auf einem Benutzer Xfce4 Desktop anzeigen. Bisher verwende ich einen Python-Skript, das das PNG in einem interaktiven matplotlib Fenster zeigt:Wie kann ich ein interaktives matplotlib-Fenster anzeigen, ohne dass die Steuerelemente sichtbar sind?

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

img = mpimg.imread("My.png") 
plt.imshow(img) 
plt.show() 

dass, obwohl sehr unattraktiv ist. Gibt es eine Möglichkeit, alle interaktiven Steuerelemente zu entfernen, den gesamten Grenzraum (Achse?), Der um das Bild gelegt wird, und die Größe des Fensters beim Start auf eine bestimmte Breite/Höhe zu ändern?

Oder gibt es eine bessere Option, um eine leichte und statische Anzeige eines Bildes auf einem Desktop bereitzustellen? Muss natürlich nicht python/matplotlib sein.

+1

Sie möchten nur ein Bild öffnen? Hilft das? http://StackOverflow.com/a/16387154/2308683 –

Antwort

3

Sicher, aber an diesem Punkt, sollten Sie überlegen, stattdessen einen "nackten" GUI-Toolkit verwenden.

Jedenfalls ist hier der matplotlib Weg:

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() 

Dies tut alles, außer die Symbolleiste für das Verstecken. Um die Symbolleiste auszublenden, müssen Sie Backend-spezifisch sein. Sie haben zwei Möglichkeiten: 1) Erstellen Sie das Fenster manuell und betten Sie das Matplotlib-Canvas darin ein. 2) Verstecken Sie die Werkzeugleiste mit Backend-spezifischen Methoden.

Als Beispiel für die Werkzeugleiste versteckt, mit dem qt-basierten Backends, dann würden Sie tun:

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() 

Und für den Tk-Backend, dann würden Sie tun:

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() 

Im Gegensatz dazu, wenn Sie matplotlib zusammen und benutzen Sie einfach Tkinter überspringen wollte, würde man so etwas tun:

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() 

Dies zeigt th Das Bild mit einem Pixel zu einem Pixel auf dem Bildschirm und ermöglicht keine Größenänderung. Es ist jedoch so minimal wie möglich.

+0

Gibt es eine Möglichkeit, dies mit dem nbagg-Backend zu tun? – Taylor

0

versuchen Sie dies:

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() 
Verwandte Themen