#python-2.7 #user-interface #matplotlib #wxpython
#python-2.7 #пользовательский интерфейс #matplotlib #wxpython
Вопрос:
Я взял код, чтобы нарисовать прямоугольник над формой изображения здесь, и немного изменил его, чтобы соответствовать моим целям. Единственная проблема, с которой я сталкиваюсь, заключается в том, что она не отображается на весь экран, даже несмотря на то, что я делаю fr.ShowFullScreen(True)
. Вокруг изображения есть серая область. Отредактированный код приведен ниже (прямоугольная часть не имеет значения).:
# Use the wxPython backend of matplotlib
import matplotlib
matplotlib.use('WXAgg')
# Matplotlib elements used to draw the bounding rectangle
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure
# wxPython stuff for the demo
import wx
class RectangleSelectImagePanel(wx.Panel):
def __init__(self, parent, pathToImage=None):
# Initialise the parent
wx.Panel.__init__(self, parent)
# Intitialise the matplotlib figure
self.figure = Figure(figsize=(20,15), dpi=80)
# Create an axes, turn off the labels and add them to the figure
self.axes = self.figure.add_subplot(1, 1, 1)
self.axes.set_axis_off()
# Add the figure to the wxFigureCanvas
self.canvas = FigureCanvas(self, -1, self.figure)
# Sizer to contain the canvas
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.canvas, 0, wx.ALL)
self.SetSizer(self.sizer)
self.Fit()
def setImage(self, pathToImage):
'''Sets the background image of the canvas'''
import matplotlib.image as mpimg
# Load the image into matplotlib
image = matplotlib.image.imread(pathToImage)
# left in as anchor for image size
self.imageSize = image.shape[0:2]
print self.imageSize
#
# Add the image to the figure and redraw the canvas. Also ensure the aspect ratio of the image is retained.
self.axes.imshow(image, interpolation="quadric", aspect='auto')
self.canvas.draw()
if __name__ == "__main__":
# Create an demo application
app = wx.App()
# Create a frame and a RectangleSelectorPanel
fr = wx.Frame(None, title='test')
panel = RectangleSelectImagePanel(fr)
# Set the image in the panel
from matplotlib.cbook import get_sample_data
imgpath = get_sample_data('logo2.png', asfileobj=False)
panel.setImage(imgpath)
# Start the demo app
fr.ShowFullScreen(True)
app.MainLoop()
Комментарии:
1. Этот вопрос мертв / решен для вас? Если нет, опубликуйте свое решение или попросите его (я думал, что ответ должен быть очевиден сейчас).
Ответ №1:
вероятно, вам нужен subplots_adjust .
from pylab import *
from matplotlib.cbook import get_sample_data
imgpath = get_sample_data('logo2.png', asfileobj=False)
image = matplotlib.image.imread(imgpath)
imshow(image, aspect='auto')
subplots_adjust(left=0, right=1, top=1, bottom=0, wspace=0, hspace=0)
Это приведет к созданию графика без полей вокруг изображения.
Итак, если вы поместите
self.figure.subplots_adjust(left=0, right=1, top=1, bottom=0, wspace=0, hspace=0)
после строки imshow вы получите что-то ближе к тому, что вам нужно.
Тогда вам, вероятно, придется также настроить параметр figsize. для моего дисплея 1920 x 1080 мне понадобится 1920,0 / 80 дюймов на 1080,0 / 80 дюймов, так что (24,13.5)