Невозможно отобразить панель в нужной позиции - PullRequest
0 голосов
/ 18 апреля 2019

Я создал Panel в wxFrame, а затем создал FigureCanvas. Я хотел бы полностью вписать FigureCanvas в панель, но каким-то образом FigureCanvas не входит в панель 2_2, а как раз с противоположной стороны.

Ниже приведен мой код.

import wx
from numpy import arange, sin, pi
import matplotlib
matplotlib.use('WXAgg')

from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure


class Frame1(wx.Frame):

    def __init__(self, prnt):

        wx.Frame.__init__(self, parent=prnt,
                          pos=wx.Point(0, 0), size=wx.Size(1340, 720),
                          style=wx.DEFAULT_FRAME_STYLE)

        self.panel2_2 = wx.Panel(parent=self,
                                 pos=wx.Point(940, 30), size=wx.Size(400, 690),
                                 style=wx.TAB_TRAVERSAL)

        self.figure = Figure()
        self.axes = self.figure.add_subplot(111)
        self.canvas = FigureCanvas(self.panel2_2, -1, self.figure)

        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(self.canvas, 0, wx.EXPAND)
        self.panel2_2.SetSizer(sizer)
        self.panel2_2.Fit()

        t = arange(0.0, 3.0, 0.01)
        s = sin(2 * pi * t)
        self.axes.plot(t, s)


#Every wxWidgets application must have a class derived from wxApp
class MyApp(wx.App):
# wxWidgets calls this method to initialize the application
    def OnInit(self):

        # Create an instance of our customized Frame class
        self.frame = Frame1(None)
        self.SetTopWindow(self.frame)
        self.frame.Show()
        return True


if __name__ == '__main__':
    application = MyApp(0)
    application.MainLoop()

и результат

enter image description here

Мне бы хотелось, чтобы изображение было на панели2_2 (то есть справа), а не слева

1 Ответ

1 голос
/ 19 апреля 2019

Я думаю, что холст действительно собирается в panel2_2. Проблема в вашем MWE состоит в том, что вы не определяете размер для panel2_2. Следовательно, панель 2_2 отображается из верхнего левого угла кадра. В результате панель 2_2 плюс холст, отображаемый слева от рамки. Справа от холста вы видите не панель2_2, а остальную часть рамки, поскольку размер рамки больше размера панели2_2. Если вы добавите синюю панель1_1 и назначите другую рамку wx.BoxSizer, вы увидите холст справа.

import wx
from numpy import arange, sin, pi
import matplotlib
matplotlib.use('WXAgg')

from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure


class Frame1(wx.Frame):

    def __init__(self, prnt):

        wx.Frame.__init__(self, parent=prnt,
                          pos=wx.Point(0, 0), size=wx.Size(1340, 720),
                          style=wx.DEFAULT_FRAME_STYLE)

        self.panel1_1 = wx.Panel(parent=self, size=(400, 690))
        self.panel1_1.SetBackgroundColour('blue')

        self.panel2_2 = wx.Panel(parent=self,
                                 pos=wx.Point(940, 30), size=wx.Size(400, 690),
                                 style=wx.TAB_TRAVERSAL)

        self.figure = Figure()
        self.axes = self.figure.add_subplot(111)
        self.canvas = FigureCanvas(self.panel2_2, -1, self.figure)

        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(self.canvas, 0, wx.EXPAND)
        self.panel2_2.SetSizer(sizer)
        self.panel2_2.Fit()

        sizerPanels = wx.BoxSizer(wx.HORIZONTAL)
        sizerPanels.Add(self.panel1_1)
        sizerPanels.Add(self.panel2_2)
        sizerPanels.Fit(self)
        self.SetSizer(sizerPanels)

        t = arange(0.0, 3.0, 0.01)
        s = sin(2 * pi * t)
        self.axes.plot(t, s)

        self.Center()


#Every wxWidgets application must have a class derived from wxApp
class MyApp(wx.App):
# wxWidgets calls this method to initialize the application
    def OnInit(self):

        # Create an instance of our customized Frame class
        self.frame = Frame1(None)
        self.SetTopWindow(self.frame)
        self.frame.Show()
        return True


if __name__ == '__main__':
    application = MyApp(0)
    application.MainLoop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...