Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么wxPython会切割我的布局/窗口的某些部分?_Python_User Interface_Wxpython - Fatal编程技术网

为什么wxPython会切割我的布局/窗口的某些部分?

为什么wxPython会切割我的布局/窗口的某些部分?,python,user-interface,wxpython,Python,User Interface,Wxpython,我有一个wyPython应用程序,它呈现从wx.Frame派生的GUI。该GUI窗口包括一个用于渲染图像的滚动窗格(wx.StaticBitmap),下面的一个面板用于某些输入行,另一个面板用于某些信息或文本行。一切正常,下面是窗口的屏幕截图(根据我的最小工作示例,见下文): 请特别注意窗口的底部,在那里您可以找到四行文本-一切如预期。但是,当我现在设置位图面板的最小高度时,下面文本面板的下部会被剪切或剪裁,如下所示: 当我将变量MIN\u IMAGE\u SCROLL\u AREA\u H

我有一个wyPython应用程序,它呈现从
wx.Frame
派生的GUI。该GUI窗口包括一个用于渲染图像的滚动窗格(
wx.StaticBitmap
),下面的一个面板用于某些输入行,另一个面板用于某些信息或文本行。一切正常,下面是窗口的屏幕截图(根据我的最小工作示例,见下文):

请特别注意窗口的底部,在那里您可以找到四行文本-一切如预期。但是,当我现在设置位图面板的最小高度时,下面文本面板的下部会被剪切或剪裁,如下所示:

当我将变量
MIN\u IMAGE\u SCROLL\u AREA\u HEIGHT
设置为
600
时,它工作正常,但当设置为
700
时,我会遇到这种问题行为。但是我看不出我的代码有什么问题,你能帮我吗

下面是一个完全有效的示例:

导入wx
导入wx.grid
导入wx.lib.intctrl
导入wx.lib.inspection
导入wx.lib.scrolled面板
类TestApp(wx.Frame):
DEF_图像_大小=800
最小图像\滚动\区域\高度=700#如果为600,则工作正常
定义初始化(自):
super(TestApp,self)。\uuuuu init\uuuuuuuu(无,title=“wxPython Test”,style=wx.DEFAULT\u FRAME\u style^wx.RESIZE\u BORDER)
self.init_面板()
self.Center()
self.Show()
def初始面板(自身):
self.main_panel=wx.panel(self)
self.bitmaps_panel=wx.lib.scrolled panel.scrolled panel(self.main_panel)
self.bitmaps\u panel.SetMinSize((-1,self.MIN\u IMAGE\u SCROLL\u AREA\u HEIGHT))
self.bitmaps\u面板挫折背景颜色(“黑色”)
self.main_sizer=wx.BoxSizer(wx.VERTICAL)
self.main_面板设置器(self.main_施胶器)
self.bitmaps\u sizer=wx.BoxSizer(wx.VERTICAL)
self.bitmaps\u panel.SetSizer(self.bitmaps\u sizer)
位图=wx.bitmap(wx.Image(self.DEF_Image_SIZE,self.DEF_Image_SIZE))
self.bitmaps\u sizer.Add(wx.StaticBitmap(self.bitmaps\u面板,wx.ID\u ANY,位图))
self.bitmaps\u sizer.Fit(self)
self.main\u sizer.Add(self.bitmaps\u面板,0,flag=wx.EXPAND)
自主施胶器添加垫片(5)
self.main_sizer.Add(wx.StaticLine(self.main_面板,wx.ID_ANY,size=(self.DEF_IMAGE_size+30,1)))
自主施胶器添加垫片(10)
self.input_panel=wx.panel(self)
self.input_sizer=wx.BoxSizer(wx.VERTICAL)
self.input_panel.setizer(self.input_sizer)
self.input\u sizer.Add(wx.StaticText(self.input\u面板,wx.ID\u ANY,label=“input Line”),0,wx.EXPAND)
self.main\u sizer.Add(self.input\u面板,0,flag=wx.EXPAND)
自主施胶器添加垫片(10)
self.main_sizer.Add(wx.StaticLine(self.main_面板,wx.ID_ANY,size=(self.DEF_IMAGE_size+30,1)))
自主施胶器添加垫片(10)
self.stats_panel=wx.panel(self)
self.stats\u sizer=wx.BoxSizer(wx.VERTICAL)
self.stats\u panel.SetSizer(self.stats\u sizer)
self.stats\u sizer.Add(wx.StaticText(self.stats\u面板,wx.ID\u ANY,label=“testline 1”),0,wx.EXPAND)
self.stats\u sizer.Add(wx.StaticText(self.stats\u面板,wx.ID\u ANY,label=“testline 2”),0,wx.EXPAND)
self.stats\u sizer.Add(wx.StaticText(self.stats\u面板,wx.ID\u ANY,label=“testline 3”),0,wx.EXPAND)
self.stats\u sizer.Add(wx.StaticText(self.stats\u面板,wx.ID\u ANY,label=“testline 4”),0,wx.EXPAND)
self.main\u sizer.Add(self.stats\u面板,0,flag=wx.EXPAND)
自主施胶器添加垫片(10)
self.main_sizer.Add(wx.StaticLine(self.main_面板,wx.ID_ANY,size=(self.DEF_IMAGE_size+30,1)))
自主施胶器添加垫片(1)
self.main_sizer.Fit(self)
self.main_panel.Layout()
如果名称=“\uuuuu main\uuuuuuuu”:
wxapp=wx.App()
app=TestApp()
wxapp.MainLoop()

在使用wxPython 4.1.0的Linux下,扭转布局和调整似乎可以解决这个问题
替换

self.main_sizer.Fit(self)
self.main_panel.Layout()
与:

似乎能胜任这项工作


注意:您在面板级别使用尺寸测量仪,而不是在框架级别使用尺寸测量仪,即
self
,这本身会导致一个问题,当涉及到
在窗口(框架)内安装

谢谢,在升级到
wxPython 4.1.0
并按照您的建议更改我的代码后,它现在对我有效。对于记录(我没有首先看到):您正在调用
main_面板上的
Fit()
函数,而不是像我的代码中那样调用
main_sizer
。我现在两者都在做,效果很好。还有一个问题:你也写了我可能会考虑使用siz来为框架本身(<代码>自我/代码>),你能这么友好地详细阐述一下吗?也许这是我自己的一个怪癖,但是即使在像这样的多面板环境中,我倾向于把它全部绑定到一个<代码>大师>代码> SIZER,分配给
self
。以同样的方式,您已经将其全部汇总到一个
main_sizer
,在本例中,它被分配到主面板。这一点是主面板仍然必须位于框架内,与子面板位于主面板内的方式相同。
self.main_panel.Layout()
self.main_panel.Fit()