Я хотел бы добавить две кнопки в строке состояния, и я реализовал их следующим образом:
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()
Проблема заключается в следующем: я не знаю, как правильно установить положения кнопок,Для приведенного выше примера у меня уже есть два слота для них, но я не могу поместить их в слоты.Вместо этого я должен использовать функцию «SetPosition», чтобы установить фиксированные положения кнопок, но как только размер окна будет изменен, кнопка останется там и не будет видна.
Мне было интересно, есть липростой способ установить положение кнопок внутри строки состояния, как мы устанавливаем текст, используя «self.status_bar.SetStatusText (self.button1, 1)» и «self.status_bar.SetStatusText (self.button2, 2)»
Большое спасибо!
================================================================================
Большое спасибо МайкуОтвет Дрисколла, я выяснил, как это сделать.Я опубликую свое решение следующим образом на тот случай, если оно понадобится.
import wx
class MyStatusBar(wx.StatusBar):
def __init__(self, parent):
wx.StatusBar.__init__(self, parent)
self.SetFieldsCount(3)
self.SetStatusWidths([-1, 200, 200])
self.sizeChanged = False
self.Bind(wx.EVT_SIZE, self.OnSize)
self.Bind(wx.EVT_IDLE, self.OnIdle)
# Field 0 ... just text
self.SetStatusText("some text", 0)
# Field for buttons
self.button1 = wx.Button(self, 1001, "button 1")
self.button2 = wx.Button(self, 1002, "button 2")
# set the initial position of the checkbox
self.Reposition()
def OnSize(self, evt):
evt.Skip()
self.Reposition() # for normal size events
# Set a flag so the idle time handler will also do the repositioning.
# It is done this way to get around a buglet where GetFieldRect is not
# accurate during the EVT_SIZE resulting from a frame maximize.
self.sizeChanged = True
def OnIdle(self, evt):
if self.sizeChanged:
self.Reposition()
# reposition the buttons
def Reposition(self):
rect1 = self.GetFieldRect(1)
rect1.x += 1
rect1.y += 1
self.button1.SetRect(rect1)
rect2 = self.GetFieldRect(2)
rect2.x += 1
rect2.y += 1
self.button2.SetRect(rect2)
self.sizeChanged = False
class MainFrame(wx.Frame):
"""Constructor"""
def __init__(self, parent, id):
wx.Frame.__init__(self, None)
self.status_bar = MyStatusBar(self)
self.SetStatusBar(self.status_bar)
self.Refresh()
self.Show()
if __name__ == "__main__":
app = wx.App()
MainFrame(None, -1)
app.MainLoop()