0

这可能很明显,但我错过了。我在 wxpython 工作。

我有一个带有多个字段的 wxStatusBar(这些字段具有文本以及其他小部件)。我需要能够在整个应用会话中添加和删除这些字段。有没有办法从状态栏中删除字段,或者我只需要重绘它?我认为要执行后者,我可以使用 SetFields() 函数,但我不太确定要给 SetFields() 提供什么类型的列表...我见过的唯一示例给它一个字符串列表,但我有多个字符串可以传递它。

提前致谢!

4

1 回答 1

1

您可以通过调用来减少字段数mystatusbar.SetFieldsCount(numfields)。如果需要,使用 重新缩放它们.SetStatusWidths([list])。使用 更改各个位置的文本.SetStatusText('string', position)。如果您在状态栏部分隐藏了一些控件(例如复选框),则可以将其移动到.GetFieldRect(position). 在 wx.EVT_SIZE 或删除/消除东西时调用它。

如果您从结尾(最高索引)以外的地方删除字段,则必须先手动移动数据。您提到您正在使用.SetFields(),只需将您之前传递的列表.pop()取出您不想要的列表即可。

wxPython 演示中的一些重新定位代码:

# reposition the checkbox
def Reposition(self):
    rect = self.GetFieldRect(1) # the checkbox lives in the 2nd (index 1) slot
    self.cb.SetPosition((rect.x+2, rect.y+2))
    self.cb.SetSize((rect.width-4, rect.height-4))
    self.sizeChanged = False

wxPython Demo 应用程序中查看一些示例代码,您可以在其中快速编写和运行。

于 2009-11-05T13:59:20.807 回答