将 wxpython 面板类添加到 sizers

发布于 2024-11-06 04:22:26 字数 1391 浏览 2 评论 0原文

我想将面板类添加到框架类中的 sizer,我将在代码的主行中调用该框架类。

我得到的错误是TypeError: wx.Window, wx.Sizer, wx.Size, or (w,h) Expected for item。我认为这与它是面板类而不是面板类的实例有关。

无论哪种方式,我将如何做这样的事情?

代码如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx

class step_1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, id=wx.ID_ANY)

        sizer = wx.BoxSizer(wx.VERTICAL)
        txtOne = wx.TextCtrl(self, wx.ID_ANY, "")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(txtOne, 0, wx.ALL, 5)

        self.SetSizer(sizer)

class step_2(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, id=wx.ID_ANY)

        sizer = wx.BoxSizer(wx.VERTICAL)
        txtOne = wx.TextCtrl(self, wx.ID_ANY, "")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(txtOne, 0, wx.ALL, 5)

        self.SetSizer(sizer)

class main_frame(wx.Frame):
    """Main Frame holding the main panel."""
    def __init__(self,*args,**kwargs):
        wx.Frame.__init__(self,*args,**kwargs)
        p = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(step_1,0,border = 5)
        sizer.Add(step_2,0,border = 5)
        p.SetSizerAndFit(sizer)
        self.Show()

if __name__ == "__main__":
    app = wx.App(False)
    frame = main_frame(None,-1,size = (400,300))
    app.MainLoop()

I want to add panel classes to a sizer in a frame class that I will call in the main line of the code.

The error I get is TypeError: wx.Window, wx.Sizer, wx.Size, or (w,h) expected for item. I assume this has to do with the fact that it is a panel class and not the instance of the panel class..

Either way, how would I do such a thing?

Code is below:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx

class step_1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, id=wx.ID_ANY)

        sizer = wx.BoxSizer(wx.VERTICAL)
        txtOne = wx.TextCtrl(self, wx.ID_ANY, "")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(txtOne, 0, wx.ALL, 5)

        self.SetSizer(sizer)

class step_2(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, id=wx.ID_ANY)

        sizer = wx.BoxSizer(wx.VERTICAL)
        txtOne = wx.TextCtrl(self, wx.ID_ANY, "")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(txtOne, 0, wx.ALL, 5)

        self.SetSizer(sizer)

class main_frame(wx.Frame):
    """Main Frame holding the main panel."""
    def __init__(self,*args,**kwargs):
        wx.Frame.__init__(self,*args,**kwargs)
        p = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(step_1,0,border = 5)
        sizer.Add(step_2,0,border = 5)
        p.SetSizerAndFit(sizer)
        self.Show()

if __name__ == "__main__":
    app = wx.App(False)
    frame = main_frame(None,-1,size = (400,300))
    app.MainLoop()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

平安喜乐 2024-11-13 04:22:26

就像您自己所说:您没有将 step_1step_2 类的实例传递给 sizer,当然您应该这样做。只需创建它们的实例:

class main_frame(wx.Frame):
    """Main Frame holding the main panel."""
    def __init__(self,*args,**kwargs):
        wx.Frame.__init__(self,*args,**kwargs)
        p = wx.Panel(self)

        stp1 = step_1(p) 
        stp2 = step_2(p) 

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(stp1, 0, border = 5)
        sizer.Add(stp2, 0, border = 5)
        p.SetSizerAndFit(sizer)
        self.Show()

Like you said yourself: You're not passing instances of the step_1 and step_2 classes to the sizer, which of course you should be. Simply create instances of them:

class main_frame(wx.Frame):
    """Main Frame holding the main panel."""
    def __init__(self,*args,**kwargs):
        wx.Frame.__init__(self,*args,**kwargs)
        p = wx.Panel(self)

        stp1 = step_1(p) 
        stp2 = step_2(p) 

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(stp1, 0, border = 5)
        sizer.Add(stp2, 0, border = 5)
        p.SetSizerAndFit(sizer)
        self.Show()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文