如何解决wxPython / Python3:使用 wx.ScreenDC().GetPPI() 设置面板大小 - 抛出错误
我有一个又长又复杂的程序(很抱歉,我无法将其精简为一个独立的最小可重现脚本,但我会尽可能包含片段)并且经过一些数据分析后,得到了一个相当复杂的“结果” " 框架出现。该框架包含一个笔记本,每个笔记本的页面都包含另一个笔记本,其页面只是带有 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 举报,一经查实,本站将立刻删除。