我有一些静态文本可能会在代码执行期间更改其内容。文本用作标题,有两部分 - 描述和相关数据(仍然是另一个文本),每个部分具有不同的文本颜色。
问题在于文本会保持程序首次启动时的位置,因此任何后续文本更改都将导致文本部分随机重叠或相互远离。
我需要的是一些刷新(或重置),以便程序忘记上次显示文本的位置的所有内容,然后像第一次启动程序一样显示文本。我怎样才能做到这一点?
这是测试代码;为简单起见,与问题相关的相关性仅适用于第一次点击:
#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
import wx
class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
self.SetSize((400, 300))
self.SetTitle("test frame")
self.panel_1 = wx.Panel(self, wx.ID_ANY)
sizer_1 = wx.BoxSizer(wx.VERTICAL)
sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
self.variable_length_label = wx.StaticText(self.panel_1, wx.ID_ANY, "label: ")
self.variable_length_label.SetForegroundColour(wx.Colour(0x00, 0x66, 0x66))
sizer_2.Add(self.variable_length_label, 0, 0, 0)
self.actual_data = wx.StaticText(self.panel_1, wx.ID_ANY, "ABC")
self.actual_data.SetForegroundColour(wx.Colour(0xff, 0x66, 0x00))
sizer_2.Add(self.actual_data, 0, 0, 0)
self.button = wx.Button(self.panel_1, wx.ID_ANY, "Click once for longer text label and new data")
self.button.SetToolTip("This exemple has relevance only on first click")
sizer_1.Add(self.button, 0, wx.EXPAND, 0)
self.panel_1.SetSizer(sizer_1)
self.Layout()
self.Bind(wx.EVT_BUTTON, self.on_click, self.button)
def on_click(self, event):
self.variable_length_label.SetLabel("muchlongertextlabel: ")
self.actual_data.SetLabel("DEF")
class MyApp(wx.App):
def OnInit(self):
self.frame = MyFrame(None, wx.ID_ANY, "")
self.SetTopWindow(self.frame)
self.frame.Show()
return True
if __name__ == "__main__":
app = MyApp(0)
app.MainLoop()
您需要执行
Layout()
来要求大小调整器围绕新的子数据重新排列。panel_1
,因此您应该要求重新布置它。def on_click(self, event):
t = self.actual_data.GetLabel()
if t == "ABC":
self.variable_length_label.SetLabel("muchlongertextlabel: ")
self.actual_data.SetLabel("DEF")
else:
self.variable_length_label.SetLabel("label: ")
self.actual_data.SetLabel("ABC")
self.panel_1.Layout()