【问题标题】:position of widget in a panel using wxpython使用 wxpython 的面板中小部件的位置
【发布时间】:2017-06-10 00:41:55
【问题描述】:

我试图将 radioBox 放在中心并在其下方放置一个按钮,但无论我尝试它,radioBox 都位于框架的左上角,并且按钮甚至不显示! . 我不明白为什么会这样

class Panelchoose(wx.Panel):
    """
     panel for calculating separately without saving
    """
    def __init__(self ,*args, **kw):
        super(Panelchoose, self).__init__(*args, **kw)
        self.SetBackgroundColour('#48C9B0')
        topsizer=wx.BoxSizer(wx.VERTICAL)
        radiosizer=wx.BoxSizer(wx.VERTICAL)
        btnsizer=wx.BoxSizer(wx.HORIZONTAL)

        lblist=['calculationGrid','calculations','xyz2comcat']
        self.rbox=wx.RadioBox(self,label="choose from the models below:   ",
                              choices=lblist,majorDimension=3,
                              style=wx.RA_SPECIFY_ROWS)


        btn_next=wx.Button(self ,label=" NEXT  ")
        #self.Bind(wx.EVT_BUTTON,self.next_, btn_next)

        topsizer.Add(self.rbox,0,wx.CENTER|wx.ALIGN_CENTER_VERTICAL,10)
        btnsizer.Add(btn_next,0,wx.ALIGN_CENTER_VERTICAL|wx.BOTTOM|wx.EXPAND,5)

        topsizer.Add(btnsizer,4,wx.CENTER|wx.BOTTOM,10)

【问题讨论】:

    标签: python python-2.7 wxpython boxsizer


    【解决方案1】:

    您忘记的部分是告诉您的面板它的 sizer 是什么。如果您将self.SetSizer(topsizer) 添加到班级__init__ 的末尾,它将按您的预期工作。

    这是一个完整的可运行版本:

    import wx
    
    
    class Panelchoose(wx.Panel):
        """
         panel for calculating separately without saving
        """
        def __init__(self ,*args, **kw):
            super(Panelchoose, self).__init__(*args, **kw)
            self.SetBackgroundColour('#48C9B0')
            topsizer=wx.BoxSizer(wx.VERTICAL)
            radiosizer=wx.BoxSizer(wx.VERTICAL)
            btnsizer=wx.BoxSizer(wx.HORIZONTAL)
    
            lblist=['calculationGrid','calculations','xyz2comcat']
            self.rbox=wx.RadioBox(self,label="choose from the models below:   ",
                                  choices=lblist,majorDimension=3,
                                  style=wx.RA_SPECIFY_ROWS)
    
    
            btn_next=wx.Button(self ,label=" NEXT  ")
            #self.Bind(wx.EVT_BUTTON,self.next_, btn_next)
    
            topsizer.Add(self.rbox,0,wx.CENTER|wx.ALIGN_CENTER_VERTICAL,10)
            btnsizer.Add(btn_next,0,wx.ALIGN_CENTER_VERTICAL|wx.BOTTOM|wx.EXPAND,5)
    
            topsizer.Add(btnsizer,0,wx.CENTER|wx.BOTTOM,10)
    
            self.SetSizer(topsizer)
    
    if __name__ == '__main__':
        app = wx.App(False)
        frame = wx.Frame(None, title='Test')
        Panelchoose(parent=frame)
        frame.Show()
        app.MainLoop()
    

    【讨论】:

    • topsizer.Add(btnsizer,0,wx.CENTER|wx.BOTTOM,10) 会更好看!
    • 确实如此,尽管我所做的只是向 OP 展示出了什么问题。
    • 谢谢它现在已经解决了,我明白了缺少的部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2011-12-02
    • 2010-11-12
    相关资源
    最近更新 更多