wxPython如何在状态栏中设置小部件位置

时间:2018-12-12 07:00:07

标签: python user-interface wxpython

我想在状态栏中添加两个按钮,它们的实现如下:

Column   result
2        2*3*4*5*8*6
3        3*4*5*8*6
4        4*5*8*6 
5        5*8*6
8        8*6
6        6

问题是:我不知道如何正确设置按钮的位置。 对于上面的示例,我已经有两个插槽,但是不能将它们放在插槽中。取而代之的是,我必须使用“ SetPosition”功能来设置按钮的固定位置,但是一旦窗口大小调整后,按钮将停留在该位置并且不会显示。

我想知道是否有一种简单的方法来设置状态栏中按钮的位置,就像我们使用“ self.status_bar.SetStatusText(self.button1,1)”和“ self.status_bar.SetStatusText( self.button2,2)“

非常感谢!

================================================ ==========================

非常感谢Mike Driscoll的回答,我已经找到了解决方法。 如果有人需要,我将按以下方式发布解决方案。

import wx

class MainFrame(wx.Frame):
    """Constructor"""

    def __init__(self, parent, id):
        wx.Frame.__init__(self, None)


        # self.status_bar = self.CreateStatusBar(3)
        self.status_bar = self.CreateStatusBar(3)

        self.status_bar.SetStatusText("some text", 0)

        self.button1 = wx.Button(self.status_bar, -1, "button 1")
        self.button2 = wx.Button(self.status_bar, -1, "button 2")
        self.status_bar.SetStatusWidths([-1, 200, 200])
        self.button1.SetPosition((self.status_bar.Size[0]-100, 0))
        self.button2.SetPosition((self.status_bar.Size[0]-200, 0))

        self.Refresh()
        self.Show()


if __name__ == "__main__":
    app = wx.App()
    MainFrame(None, -1)
    app.MainLoop()

1 个答案:

答案 0 :(得分:0)

最简单的方法是继承wx.StatusBar本身,添加按钮,然后捕获tab。这样,您可以捕获调整大小的事件,并可以根据需要重新定位小部件。

wxPython演示有一个示例,其中有一个使用以下方法的复选框小部件:

wx.EVT_SIZE

# reposition the checkbox def Reposition(self): rect = self.GetFieldRect(1) rect.x += 1 rect.y += 1 self.cb.SetRect(rect) self.sizeChanged = False 是指复选框小部件。您可以使用类似这样的东西,除了您需要跟踪两个小部件的位置并相应地进行更新。