问题描述
我有一个又长又复杂的程序(很抱歉,我无法将其精简为一个独立的最小可重现脚本,但我会尽可能包含片段)并且经过一些数据分析后,得到了一个相当复杂的“结果” " 框架出现。该框架包含一个笔记本,每个笔记本的页面都包含另一个笔记本,其页面只是带有 sizer 的面板,其中包含一个 matplotlib 画布,在该画布上绘制了图形/绘图。
无论如何,在调整此结果框的大小时,子笔记本中的“绘图”面板会展开,从而弄乱绘图的纵横比(画布设置为展开;在用于情节笔记本的页面,我添加了画布
PlotPanel(wx.Panel)
我试图解决这个问题,当将包含 self.mainsizer.Add(self.canvas,wx.SizerFlags().Expand())`
self.SetSizerAndFit(self.mainsizer)
页的笔记本添加到包含它的 PlotPanel
时,添加标志 ResultPanel
:
wx.SHAPED
但我读到要使其正常工作,您需要在 self.plotsizer.Add(self.plotnotebook,1,wx.EXPAND|wx.SHAPED)
方法中为笔记本用作页面的 Panel 类指定大小。
所以我尝试将类声明为
__init__()
然后将我的 class PlotPanel(wx.Panel):
def __init__(self,parent,df,lod):
wx.Panel.__init__(self,parent=parent,id=wx.ID_ANY,size=npnlsz)
.........
函数写为
main()
试图能够在 def main():
app = wx.App()
w,h = wx.ScreenDC().GetPPI()
global pnlsz
pnlsz = wx.Size(w*5,h*5)
frm = StartFrame(None)
frm.Show()
app.MainLoop()
类的 PlotPanel
中访问此大小。但是,无论我在哪里粘贴 __init__
变量,我都会收到错误
global pnlsz
即使(如上所示)wx.App 对象是在其他任何事情之前创建的!
注意:我使用 Traceback (most recent call last):
File "<stdin>",line 1,in <module>
File "<string>",line 476,line 477,in PlotPanel
wx._core.PyNoAppError: The wx.App object must be created first!
是因为该程序将在许多具有不同显示器和 DPI 设置的不同机器上运行,并且我希望对象显示为 4" x 4",而不管显示器如何。
不过,主要问题是保持画布的纵横比——如果必须的话,我可以只对尺寸进行硬编码,但我仍然需要一种方法来保持图形的纵横比 (1:1)调整框架大小时的画布。因此,欢迎使用任何其他方法!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)