首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >wxPython -刷新/更新部分图形用户界面

wxPython -刷新/更新部分图形用户界面
EN

Stack Overflow用户
提问于 2011-07-15 18:07:05
回答 2查看 2.3K关注 0票数 0

我使用包含多个包含StaticTextCtrl的单元格的GridBagSizer。其中一些文本需要根据用户行为进行更改。因此,我需要在发生更改时更新GUI。GridBagSizer是在一个函数中定义的,该函数由另一个类中的函数调用,而该函数又在图形用户界面组装期间被调用。为了说明这一点,这里有一个代码片段:

代码语言:javascript
运行
复制
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中进行更改时,将调用:

代码语言:javascript
运行
复制
    def updateCanvas(self):
        ??? .Refresh() ???   
    # ----

谁能给我一个提示,我应该使用哪些命令?

谢谢,伍德皮克

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-15 21:02:59

您所需要做的就是调用StaticText的SetLabel方法来更新它。不过,我通常不推荐使用整个parent.widget.SetLabel()方法,因为这很快就会变得非常丑陋。它确实可以工作,但我更喜欢自己使用pubsub。你可以在这里阅读到:http://www.blog.pythonlibrary.org/2010/06/27/wxpython-and-pubsub-a-simple-tutorial/

编辑:例如,您可以像这样设置接收器:

代码语言:javascript
运行
复制
Publisher().subscribe(self.updateDisplay, ("update.display"))

然后在函数中,你可以这样做:

代码语言:javascript
运行
复制
def updateDisplay(self, msg):
    self.myStaticTxtCtrl.SetLabel(msg.data)
票数 0
EN

Stack Overflow用户

发布于 2011-07-15 19:43:18

您需要在GridBagSizer中保存对wxStaticText的引用,然后使用新文本更新控件。

下面是一个包含FlexGridSizer的示例

代码语言:javascript
运行
复制
self.fNameC = wx.StaticText(self, -1, fn)
fgs = wx.FlexGridSizer(5, 2, 5, 5)
fgs.Add(self.fNameC, 0, wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL)

稍后,我会这样做:

代码语言:javascript
运行
复制
self.panel.fNameC.SetLabel(fName)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6705464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档