我使用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