gpt4 book ai didi

python - 如何使嵌套面板和 Sizer 在 wxpython 中工作

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:38 25 4
gpt4 key购买 nike

我正在学习 wxpython 并试图让嵌套面板工作。这是为更复杂的屏幕做准备的练习,因此它可能看起来有点复杂,但这是有目的的;)。我想要做的是:创建顶部框架给它添加一个面板向其中添加一些文本和一个输入字段使用垂直 boxsizer 进行面板布局以下是我的实现方式:

import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent)

#add position panel
posPnl = wx.Panel(self)
lbl1 = wx.StaticText(posPnl, label="Position")
lbl2 = wx.StaticText(posPnl, label="Size")
sizeCtrl = wx.TextCtrl(posPnl)

posPnlSzr = wx.BoxSizer(wx.HORIZONTAL)
posPnlSzr.Add(lbl1, 1, wx.GROW)
posPnlSzr.Add(sizeCtrl, 1, wx.GROW)
posPnlSzr.Add(lbl2, 1, wx.GROW)

#create a top leverl sizer to add to the frame itself
mainSzr = wx.BoxSizer(wx.VERTICAL)
mainSzr.Add(posPnlSzr)

self.SetSizerAndFit(mainSzr)
self.Show()


app = wx.App(False)
frame = MainWindow(None, "Trading Client")
app.MainLoop()

我得到的只是一个空白的小屏幕,上面有“Pos”字样。我在这里做错了什么?

最佳答案

这里的逻辑是创建一个 Panel 来在里面添加控件,然后是一个 BoxSizer ,你在其中声明你如何在 Panel 中添加每个控件> 调整大小,并最终在 Panel 上设置应用在其上的 BoxSizer 是什么。

您有 2 个问题。

  • 首先,您遗漏了上述针对 posPnl 对象的语句的最后一部分。添加这个:

    posPnl.SetSizer(posPnlSzr)

    一旦您将控件添加到 posPnlSzr

  • 第二个问题是您在 mainSzr 中添加了 posSnlSzr。这样做是错误的。同样,逻辑是向 sizer 添加控件,您可以将 Panel 视为复合控件。因此,正确的代码是将 posPnl 添加到 mainSzr 中:

    mainSzr.Add(posPnl)

    据我所知,您正在尝试让 posPnl 随主窗口自动调整大小。如果要添加面板以便 mainSzr 实际调整它的大小:

    mainSzr.Add(posPnl, 1, wx.GROW)

这给出了最终的源代码:

#!/usr/bin/env python

import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent)

#add position panel
posPnl = wx.Panel(self)
lbl1 = wx.StaticText(posPnl, label="Position")
lbl2 = wx.StaticText(posPnl, label="Size")
sizeCtrl = wx.TextCtrl(posPnl)

posPnlSzr = wx.BoxSizer(wx.HORIZONTAL)
posPnlSzr.Add(lbl1, 1, wx.GROW)
posPnlSzr.Add(sizeCtrl, 1, wx.GROW)
posPnlSzr.Add(lbl2, 1, wx.GROW)

posPnl.SetSizer(posPnlSzr)

#create a top leverl sizer to add to the frame itself
mainSzr = wx.BoxSizer(wx.VERTICAL)
mainSzr.Add(posPnl, 1, wx.GROW)

self.SetSizerAndFit(mainSzr)
self.Show()


app = wx.App(False)
frame = MainWindow(None, "Trading Client")
app.MainLoop()

关于python - 如何使嵌套面板和 Sizer 在 wxpython 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10786353/

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