首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何更新wxStaticBitamp?

如何更新wxStaticBitamp?
EN

Stack Overflow用户
提问于 2015-11-24 12:05:33
回答 2查看 869关注 0票数 1

问题

如果用户单击来自wxStaticBitamp的某个项目,我希望更新wx.TreeCtrl图像。

代码语言:javascript
运行
复制
import wx
app = wx.App(redirect=False)
top = wx.Frame(None)
sizer = wx.GridBagSizer()

def createHelpWindow(event):
    import wx  
    locale = wx.Locale(wx.LANGUAGE_ENGLISH)
    frame = wx.Frame(None, wx.ID_ANY, " Help contents", style=wx.MINIMIZE_BOX | wx.CAPTION | wx.CLOSE_BOX) # A Frame is a top-level window.
    frame.Center()
    frame.SetBackgroundColour('LIGHTGREY')
    frame.SetSize(800,600)
    sizer = wx.GridBagSizer()

    # Add control tree
    treeHelp = wx.TreeCtrl(frame, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TR_DEFAULT_STYLE )
    sizer.Add(treeHelp,(1,1),(19,23),wx.EXPAND)

    # Add description box
    helpDisplay = wx.StaticText( frame, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0, )
    sizer.Add(helpDisplay,(1,26),(1,1),wx.EXPAND)

    # Create image object
    chooseMessageImage = wx.StaticBitmap( frame, wx.ID_ANY, wx.Bitmap(wx.NullBitmap), wx.Point( 300,110 ),wx.DefaultSize, 0)
    def OnSelChanged(event):
        locale = wx.Locale(wx.LANGUAGE_ENGLISH)
        chooseMessageImage = wx.StaticBitmap( frame, wx.ID_ANY, wx.Bitmap(wx.NullBitmap), wx.Point( 300,110 ),wx.DefaultSize, 0)
        item =  event.GetItem()

        # Display the selected item text in the text widget
        print "selected ", treeHelp.GetItemText(item)
        if treeHelp.GetItemText(item) == 'TFT':
            helpSecondDisplay.SetLabel("""test page for landing page""")
            chooseMessageImage.SetBitmap(wx.NullBitmap) # Set image object to null
        #################### End main #########################
        elif treeHelp.GetItemText(item) == 'Main page':
            helpSecondDisplay.SetLabel("""test txt for main page""")
            chooseMessageImage.SetBitmap(wx.Bitmap( u"create_images/add_message.png", wx.BITMAP_TYPE_ANY)) # Set image to some src  
    treeHelp.Bind(wx.EVT_TREE_SEL_CHANGED, OnSelChanged)
    helpSecondDisplay = wx.StaticText( frame, wx.ID_ANY, "Lorem ipsum", wx.DefaultPosition, wx.DefaultSize, 0, )
    sizer.Add(helpSecondDisplay,(3,26),(1,1),wx.EXPAND)   
    root = treeHelp.AddRoot('TFT')
    rootMainPage = treeHelp.AppendItem(root, 'Main page') 
    treeHelp.Expand(root)

    # Wrap it up
    frame.SetSizer(sizer)
    frame.Center()    
    frame.Show(True)     # Show the frame.


# Bind the method
helpButton = wx.Button(top, wx.ID_ANY, u"help",  style=wx.BU_EXACTFIT )
sizer.Add(helpButton,(0,0),(1,1))
top.Bind(wx.EVT_BUTTON, createHelpWindow, helpButton)  
top.Sizer = sizer
top.Sizer.Fit(top)
top.Show()
app.MainLoop()

电流

单击根时显示图像对象(chooseMessageImage)。

期望的

单击根时不应显示图像对象(chooseMessageImage)。

注意:当加载窗口时,焦点将设置在根上,但图像将不会显示。

编辑1:

代码语言:javascript
运行
复制
import wx
app = wx.App(redirect=False)
top = wx.Frame(None)
sizer = wx.GridBagSizer()

def createHelpWindow(event):
    import wx  
    locale = wx.Locale(wx.LANGUAGE_ENGLISH)
    frame = wx.Frame(None, wx.ID_ANY, " Help contents", style=wx.MINIMIZE_BOX | wx.CAPTION | wx.CLOSE_BOX) # A Frame is a top-level window.
    frame.Center()
    frame.SetBackgroundColour('LIGHTGREY')
    frame.SetSize(800,600)
    sizer = wx.GridBagSizer()

    # Add control tree
    treeHelp = wx.TreeCtrl(frame, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TR_DEFAULT_STYLE )
    sizer.Add(treeHelp,(1,1),(19,23),wx.EXPAND)

    # Add description box
    helpDisplay = wx.StaticText( frame, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0, )
    sizer.Add(helpDisplay,(1,26),(1,1),wx.EXPAND)

    # Create image object
    chooseMessageImage = wx.StaticBitmap( frame, wx.ID_ANY, wx.NullBitmap, wx.Point( 300,110 ),wx.DefaultSize, 0)
    def OnSelChanged(event):
        locale = wx.Locale(wx.LANGUAGE_ENGLISH)
        chooseMessageImage = wx.StaticBitmap( frame, wx.ID_ANY, wx.NullBitmap, wx.Point( 300,110 ),wx.DefaultSize, 0)
        item =  event.GetItem()

        # Display the selected item text in the text widget
        print "selected ", treeHelp.GetItemText(item)
        if treeHelp.GetItemText(item) == 'TFT':
            helpSecondDisplay.SetLabel("""test page for landing page""")
            chooseMessageImage.SetBitmap(wx.NullBitmap) # Set image object to null
        #################### End main #########################
        elif treeHelp.GetItemText(item) == 'Main page':
            helpSecondDisplay.SetLabel("""test txt for main page""")
            chooseMessageImage.SetBitmap(wx.Bitmap( "create_images/add_message.png", wx.BITMAP_TYPE_ANY)) # Set image to some src
        chooseMessageImage.Refresh()
    treeHelp.Bind(wx.EVT_TREE_SEL_CHANGED, OnSelChanged)
    helpSecondDisplay = wx.StaticText( frame, wx.ID_ANY, "Lorem ipsum", wx.DefaultPosition, wx.DefaultSize, 0, )
    sizer.Add(helpSecondDisplay,(3,26),(1,1),wx.EXPAND)   
    root = treeHelp.AddRoot('TFT')
    rootMainPage = treeHelp.AppendItem(root, 'Main page') 
    treeHelp.Expand(root)

    # Wrap it up
    frame.SetSizer(sizer)
    frame.Center()    
    frame.Show(True)     # Show the frame.


# Bind the method
helpButton = wx.Button(top, wx.ID_ANY, u"help",  style=wx.BU_EXACTFIT )
sizer.Add(helpButton,(0,0),(1,1))
top.Bind(wx.EVT_BUTTON, createHelpWindow, helpButton)  
top.Sizer = sizer
top.Sizer.Fit(top)
top.Show()
app.MainLoop()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-01 15:29:22

问题解决了。最后的工作守则是:

代码语言:javascript
运行
复制
import wx


app = wx.App(redirect=False)
top = wx.Frame(None)
sizer = wx.GridBagSizer()

def createHelpWindow(event):
    import wx
    locale = wx.Locale(wx.LANGUAGE_ENGLISH)
    frame = wx.Frame(None, wx.ID_ANY, " Help contents", style=wx.MINIMIZE_BOX | wx.CAPTION | wx.CLOSE_BOX) # A Frame is a top-level window.
    frame.Center()
    frame.SetBackgroundColour('LIGHTGREY')
    frame.SetSize(800,600)
    sizer = wx.GridBagSizer()
    # Add control tree
    treeHelp = wx.TreeCtrl(frame, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TR_DEFAULT_STYLE )
    sizer.Add(treeHelp,(1,1),(19,23),wx.EXPAND)
    # Add description box
    helpDisplay = wx.StaticText( frame, wx.ID_ANY, "", wx.DefaultPosition, wx.DefaultSize, 0, )
    sizer.Add(helpDisplay,(1,26),(1,1),wx.EXPAND)
    # Create image object
    chooseMessageImage = wx.StaticBitmap( frame, wx.ID_ANY, wx.NullBitmap, wx.Point( 300,110 ),wx.DefaultSize, 0)
    def OnSelChanged(event):
        locale = wx.Locale(wx.LANGUAGE_ENGLISH)
        item =  event.GetItem()
        # Display the selected item text in the text widget
        print "selected ", treeHelp.GetItemText(item)
        if treeHelp.GetItemText(item) == 'TFT':
            helpSecondDisplay.SetLabel("""test page for landing page""")
            chooseMessageImage.SetBitmap(wx.NullBitmap) # Set image object to null
        #################### End main #########################
        elif treeHelp.GetItemText(item) == 'Main page':
            helpSecondDisplay.SetLabel("""test txt for main page""")
            chooseMessageImage.SetBitmap(wx.Bitmap( "create_images/add_message.png", wx.BITMAP_TYPE_ANY)) # Set image to some src
            frame.Refresh()
    treeHelp.Bind(wx.EVT_TREE_SEL_CHANGED, OnSelChanged)
    helpSecondDisplay = wx.StaticText( frame, wx.ID_ANY, "Lorem ipsum", wx.DefaultPosition, wx.DefaultSize, 0, )
    sizer.Add(helpSecondDisplay,(3,26),(1,1),wx.EXPAND)
    root = treeHelp.AddRoot('TFT')
    rootMainPage = treeHelp.AppendItem(root, 'Main page')
    treeHelp.Expand(root)
    # Wrap it up
    frame.SetSizer(sizer)
    frame.Center()
    frame.Show(True)     # Show the frame.


# Bind the method
helpButton = wx.Button(top, wx.ID_ANY, u"help",  style=wx.BU_EXACTFIT )
sizer.Add(helpButton,(0,0),(1,1))
top.Bind(wx.EVT_BUTTON, createHelpWindow, helpButton)
top.Sizer = sizer
top.Sizer.Fit(top)
top.Show()
app.MainLoop()

我的错误是我在OnSelChanged方法中创建了OnSelChanged。

票数 0
EN

Stack Overflow用户

发布于 2015-12-01 01:16:17

更改图像后添加Refresh()调用

代码语言:javascript
运行
复制
#################### End main #########################
elif treeHelp.GetItemText(item) == 'Main page':
    helpSecondDisplay.SetLabel("""test txt for main page""")
    chooseMessageImage.SetBitmap(wx.Bitmap( "create_images/add_message.png", wx.BITMAP_TYPE_ANY)) # Set image to some src
chooseMessageImage.Refresh()

并将wx.Bitmap(wx.NullBitmap)更改为wx.NullBitmap

来自wxpython关于Refresh()的文档:

""" Refresh(self, bool eraseBackground=True, Rect rect=None) Mark the specified rectangle (or the whole window) as "dirty" so it will be repainted. Causes an EVT\_PAINT event to be generated and sent to the window. """

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33893287

复制
相关文章

相似问题

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