在 wxpython 中对齐
Aligning in wxpython
我正在尝试在 wx 框架中对齐复选框和 matplotlib canvas。
- 我需要这些复选框在左侧对齐,canvas 在右侧对齐
- 下面的代码没有正确对齐它们
有人可以建议需要对代码进行更改吗?
如果我想在同一帧中再添加一个canvas,我该如何添加?
import wx
import matplotlib.pyplot as plt
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
class canvasFrame(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,"MyCanvas",size =(1200,400))
self.fig = plt.Figure(figsize=(15,5))
self.ax1 = self.fig.add_subplot(1,1,1)
self.canvas = FigureCanvas(self, -1, self.fig)
b1 = wx.CheckBox(self,-1,"Apples",(10,20),(160,-1))
b2 = wx.CheckBox(self,-1,"Mango",(10,40),(160,-1))
b1sizer = wx.BoxSizer(wx.VERTICAL)
b2sizer = wx.BoxSizer(wx.VERTICAL)
canvSizer = wx.BoxSizer(wx.HORIZONTAL)
b1sizer.Add(b1,0,wx.ALL,5)
b2sizer.Add(b2,0,wx.ALL,5)
canvSizer.Add(self.canvas,wx.TOP | wx.EXPAND,5)
if __name__ == "__main__":
app = wx.App()
frame = canvasFrame(parent=None,id = -1)
frame.Show()
app.MainLoop()
您遗漏了很多关于 sizer 工作原理的部分......我真的建议重新访问文档并在谷歌上搜索教程
class canvasFrame(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,"MyCanvas",size =(1200,400))
self.fig = plt.Figure(figsize=(15,5))
self.ax1 = self.fig.add_subplot(1,1,1)
self.canvas = FigureCanvas(self, -1, self.fig)
b1 = wx.CheckBox(self,-1,"Apples",(10,20),(160,-1))
b2 = wx.CheckBox(self,-1,"Mango",(10,40),(160,-1))
# first create your sizer for your checkboxes
checkbox_sizer = wx.BoxSizer(wx.VERTICAL)
checkbox_sizer.AddMany([b1,b2]) # add both buttons to the sizer
#next create the main sizer
main_sizer = wx.BoxSizer(wx.HORIZONTAL)
#add the checkbox sizer to the main_sizer
main_sizer.Add(checkbox_sizer)
# add the canvas to the main sizer
main_sizer.Add(self.canvas)
#Set the sizer as the sizer for the frame
self.SetSizer(main_sizer)
#call layout for the sizers to layout their elements
self.Layout()
#call fit to make the frame fit its contents
self.Fit()
您使用的 sizer 不正确,请尝试以下操作:
import wx
import matplotlib.pyplot as plt
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
class canvasFrame(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,"MyCanvas",size =(1200,400))
self.fig = plt.Figure(figsize=(15,5))
self.ax1 = self.fig.add_subplot(1,1,1)
self.canvas = FigureCanvas(self, -1, self.fig)
b1 = wx.CheckBox(self,-1,"Apples", size=(160,-1))
b2 = wx.CheckBox(self,-1,"Mango", size=(160,-1))
mainsizer = wx.BoxSizer(wx.HORIZONTAL) # Main sizer
cbsizer = wx.BoxSizer(wx.VERTICAL) # Checkbox sizer
canvassizer = wx.BoxSizer(wx.VERTICAL) # Canvas sizer
# Add checkbox
cbsizer.Add(b1, 0, wx.ALIGN_LEFT|wx.ALL, 5)
cbsizer.Add(b2, 0, wx.ALIGN_LEFT|wx.ALL, 5)
# Add canvas
canvassizer.Add(self.canvas, 1, wx.EXPAND|wx.ALL, 1)
# Add "secondary" sizers to main sizer
mainsizer.Add(cbsizer, 1, wx.EXPAND|wx.ALL, 2)
mainsizer.Add(canvassizer, 3, wx.EXPAND|wx.ALL, 2)
self.SetSizer(mainsizer)
if __name__ == "__main__":
app = wx.App()
frame = canvasFrame(parent=None,id = -1)
frame.Show()
app.MainLoop()
现在,关于最后一个问题,我认为你会添加一个子图(轴)而不是其他 canvas,即
self.fig = plt.Figure(figsize=(15,5))
self.ax1 = self.fig.add_subplot(1,2,1)
self.ax2 = self.fig.add_subplot(1,2,2)
self.canvas = FigureCanvas(self, -1, self.fig)
我正在尝试在 wx 框架中对齐复选框和 matplotlib canvas。
- 我需要这些复选框在左侧对齐,canvas 在右侧对齐
- 下面的代码没有正确对齐它们
有人可以建议需要对代码进行更改吗?
如果我想在同一帧中再添加一个canvas,我该如何添加?
import wx import matplotlib.pyplot as plt from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas class canvasFrame(wx.Frame): def __init__(self,parent,id): wx.Frame.__init__(self,parent,id,"MyCanvas",size =(1200,400)) self.fig = plt.Figure(figsize=(15,5)) self.ax1 = self.fig.add_subplot(1,1,1) self.canvas = FigureCanvas(self, -1, self.fig) b1 = wx.CheckBox(self,-1,"Apples",(10,20),(160,-1)) b2 = wx.CheckBox(self,-1,"Mango",(10,40),(160,-1)) b1sizer = wx.BoxSizer(wx.VERTICAL) b2sizer = wx.BoxSizer(wx.VERTICAL) canvSizer = wx.BoxSizer(wx.HORIZONTAL) b1sizer.Add(b1,0,wx.ALL,5) b2sizer.Add(b2,0,wx.ALL,5) canvSizer.Add(self.canvas,wx.TOP | wx.EXPAND,5) if __name__ == "__main__": app = wx.App() frame = canvasFrame(parent=None,id = -1) frame.Show() app.MainLoop()
您遗漏了很多关于 sizer 工作原理的部分......我真的建议重新访问文档并在谷歌上搜索教程
class canvasFrame(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,"MyCanvas",size =(1200,400))
self.fig = plt.Figure(figsize=(15,5))
self.ax1 = self.fig.add_subplot(1,1,1)
self.canvas = FigureCanvas(self, -1, self.fig)
b1 = wx.CheckBox(self,-1,"Apples",(10,20),(160,-1))
b2 = wx.CheckBox(self,-1,"Mango",(10,40),(160,-1))
# first create your sizer for your checkboxes
checkbox_sizer = wx.BoxSizer(wx.VERTICAL)
checkbox_sizer.AddMany([b1,b2]) # add both buttons to the sizer
#next create the main sizer
main_sizer = wx.BoxSizer(wx.HORIZONTAL)
#add the checkbox sizer to the main_sizer
main_sizer.Add(checkbox_sizer)
# add the canvas to the main sizer
main_sizer.Add(self.canvas)
#Set the sizer as the sizer for the frame
self.SetSizer(main_sizer)
#call layout for the sizers to layout their elements
self.Layout()
#call fit to make the frame fit its contents
self.Fit()
您使用的 sizer 不正确,请尝试以下操作:
import wx
import matplotlib.pyplot as plt
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
class canvasFrame(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,"MyCanvas",size =(1200,400))
self.fig = plt.Figure(figsize=(15,5))
self.ax1 = self.fig.add_subplot(1,1,1)
self.canvas = FigureCanvas(self, -1, self.fig)
b1 = wx.CheckBox(self,-1,"Apples", size=(160,-1))
b2 = wx.CheckBox(self,-1,"Mango", size=(160,-1))
mainsizer = wx.BoxSizer(wx.HORIZONTAL) # Main sizer
cbsizer = wx.BoxSizer(wx.VERTICAL) # Checkbox sizer
canvassizer = wx.BoxSizer(wx.VERTICAL) # Canvas sizer
# Add checkbox
cbsizer.Add(b1, 0, wx.ALIGN_LEFT|wx.ALL, 5)
cbsizer.Add(b2, 0, wx.ALIGN_LEFT|wx.ALL, 5)
# Add canvas
canvassizer.Add(self.canvas, 1, wx.EXPAND|wx.ALL, 1)
# Add "secondary" sizers to main sizer
mainsizer.Add(cbsizer, 1, wx.EXPAND|wx.ALL, 2)
mainsizer.Add(canvassizer, 3, wx.EXPAND|wx.ALL, 2)
self.SetSizer(mainsizer)
if __name__ == "__main__":
app = wx.App()
frame = canvasFrame(parent=None,id = -1)
frame.Show()
app.MainLoop()
现在,关于最后一个问题,我认为你会添加一个子图(轴)而不是其他 canvas,即
self.fig = plt.Figure(figsize=(15,5))
self.ax1 = self.fig.add_subplot(1,2,1)
self.ax2 = self.fig.add_subplot(1,2,2)
self.canvas = FigureCanvas(self, -1, self.fig)