gpt4 book ai didi

python - FigureCanvasWxAgg 在 linux 的面板(或笔记本)中无法正确调整大小

转载 作者:可可西里 更新时间:2023-11-01 09:38:15 25 4
gpt4 key购买 nike

我用 wxpython 编写了一个程序,它在 Windows 中运行良好,但在 lunix 中测试时,我遇到了一些在 linux 中都会出现的显示问题。

这是一个测试应用程序,它演示了在面板中调整 FigureCanvasWxAgg 的大小时出现的问题,如面板所示,它自己遵循调整大小事件,但 FigureCanvasWxAgg 不遵循,但这在 Windows 中不是问题。

import wx
import matplotlib.figure as plt
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
import wx.lib.inspection

class Test(wx.Frame):

def __init__(self):
super(Test, self).__init__(parent=None, id=-1)
self.figure = plt.Figure()
self.panel = wx.Panel(self, 1)
self.figurepanel = FigureCanvas(self.panel, -1, self.figure)
self.axes1 = self.figure.add_subplot(111)
frame_box = wx.BoxSizer(wx.VERTICAL)
frame_box.AddStretchSpacer(prop=1)
frame_box.Add(self.panel, flag=wx.EXPAND, proportion=2)
frame_box.AddStretchSpacer(prop=1)
main_box = wx.BoxSizer(wx.HORIZONTAL)
main_box.AddStretchSpacer(prop=1)
main_box.Add(frame_box, flag=wx.EXPAND, proportion=1)
main_box.AddStretchSpacer(prop=1)
self.SetSizer(main_box)
self.Show()
self.Layout()

def main():
app = wx.App()
Test()
wx.lib.inspection.InspectionTool().Show()
app.MainLoop()

if __name__ == '__main__':
main()

如果我能回答以下问题,我将不胜感激:

  • 如何解决在 Linux 中调整 FigureCanvasWxAgg 的问题
  • 在 Windows 和 Linux 上使用 wxPython 进行 GUI 编程的一般方式有什么不同吗

最佳答案

您发布的代码存在几个问题:

  1. 你有水平和垂直间隔,可以根据需要扩展,这会导致中心区域保持相同的形状
  2. self.figurepanel 不是任何 sizer 的一部分,这意味着它不会调整大小,即使它的容器 self.panel 会调整大小。

下面的代码生成一个窗口,该窗口由随窗口调整大小的绘图填充:

import wx
import matplotlib.figure as plt
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
import wx.lib.inspection

class Test(wx.Frame):

def __init__(self):
super(Test, self).__init__(parent=None, id=-1)
self.panel = wx.Panel(self, 1)
self.panel.SetBackgroundColour('RED')

self.figure = plt.Figure()
self.axes1 = self.figure.add_subplot(111)
self.figurepanel = FigureCanvas(self.panel, -1, self.figure)

main_box = wx.BoxSizer(wx.HORIZONTAL)
main_box.Add(self.figurepanel, flag=wx.EXPAND, proportion=1)
self.panel.SetSizer(main_box)

frame_box = wx.BoxSizer(wx.VERTICAL)
frame_box.Add(self.panel, flag=wx.EXPAND, proportion=1)

self.SetSizer(frame_box)
self.Show()
self.Layout()

def main():
app = wx.App()
Test()
wx.lib.inspection.InspectionTool().Show()
app.MainLoop()

if __name__ == '__main__':
main()

您无需手动调整大小,我认为调整大小事件传播也没有问题。如果有,破损会比您看到的多得多。

关于python - FigureCanvasWxAgg 在 linux 的面板(或笔记本)中无法正确调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16087641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com