我使用GridBagSizer和几个包含StaticTextCtrl的单元格。其中一些文本需要根据用户行为进行更改。所以我需要在更改时更新GUI。 GridBagSizer被定义在一个函数中,该函数被另一个类中的函数调用,该函数在GUI汇编期间又被调用。为了说明这一点,下面的代码片段:wxPython - 刷新/更新部分GUI
class SampleClass(wx.MiniFrame):
[...some other code...]
def makeGUI(self):
# make panels
panelFoo = self.makePanelFoo()
panelBar = self.makePanelBar()
panelFinal = self.makePanelFinal()
# pack elements
self.mainSizer = wx.BoxSizer(wx.VERTICAL)
self.mainSizer.Add(panelFoo, 1, wx.EXPAND, 0)
self.mainSizer.Add(panelBar, 1, wx.EXPAND, 0)
self.mainSizer.Add(panelFinal, 1, wx.EXPAND, 0)
# fit layout
self.mainSizer.Fit(self)
self.SetSizer(self.mainSizer)
# ----
[...some other code...]
def makePanelFinal(self):
panel = Canvas(self, -1)
# define canvas parts
self.partA = panel.makePartA()
self.partB = panel.makePartB()
self.partC = panel.makePartC()
# arrange canvas parts
mainSizer = wx.BoxSizer(wx.VERTICAL)
mainSizer.Add(self.partA, 1, wx.EXPAND|wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT, mwx.PANEL_SPACE_MAIN)
mainSizer.Add(self.partB, 0, wx.EXPAND|wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT, mwx.PANEL_SPACE_MAIN)
mainSizer.Add(self.partC, 0, wx.EXPAND|wx.ALIGN_CENTER|wx.LEFT|wx.RIGHT|wx.BOTTOM, mwx.PANEL_SPACE_MAIN)
# fit layout
mainSizer.Fit(panel)
panel.SetSizer(mainSizer)
return panel
# ----
class Canvas(panel):
[...some other code...]
def makePartC(self):
sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, ""), wx.VERTICAL)
grid = wx.GridBagSizer(mwx.GRIDBAG_VSPACE, mwx.GRIDBAG_HSPACE)
[...some code where the GridBagSizer is made...]
sizer.Add(grid, 1, wx.EXPAND|wx.ALIGN_CENTER|wx.ALL, 5)
return sizer
我现在需要在类Canvas
定义函数(或必须在此放置在SampleClass
类?)将被调用时,在GUI的变化需要:
def updateCanvas(self):
??? .Refresh() ???
# ----
有人请给我一个提示,我应该使用哪个命令?
感谢,Woodpicker
感谢pubsub上有趣的网页。在这个例子中,调用self.showFrame。对我而言,这需要什么功能?我可以以某种方式将StaticTextCtrl绑定到Publisher()。subscribe()? – Woodpicker
你可以随意调用函数,比如updateStaticText(self,fName)。然后,只需从pubsub处理程序传递所需的数据即可。 –
是的,我当然可以调用我喜欢的函数 - 但是接下来我的问题出现了:该函数应该做什么?在我的情况下,这个函数的第一步是重新定义我的'StsticTextCtrl'。接着?如何在GUI中显示此更改(BoxSizer中BoxSizer中的StaticBoxSizer中的GridBagSizer中的StaticTextCtrl)。我可以在这里给我什么命令?谢谢! – Woodpicker