Python print语句改变了代码的行为?

时间:2013-08-14 14:16:43

标签: python wxpython

古怪:经过一些实验后,我得出结论,在下面的代码中任何地方放置一条无用的行(print "hi"x = 1)都可以使其正常工作。

发生了什么事?我很想了解Python如何处理导致这种奇怪行为的代码。

某些情况:我在wxpython中写了一个gui。我有这个功能(见下文),这会导致工具在按下时更改图标(通过移除工具并将其添加回另一个图标)。

下面显示的代码会导致按钮第一次正确切换图标,然后第二次工具栏似乎被禁用。我以为这是代码的一个问题,所以我输入了一个打印语句,令我惊讶的是,修复了这个问题。

def configure_itunes_button(self):
    '''
    Configures the itunes button to either sync or unsync depending on whether itunes is currently synced
    '''
    if self.iTunesTool:
        id = self.iTunesTool.GetId()
        self.toolbar.DeleteTool(id)
    else:
        id = self.toolbar.GetToolsCount() + 1

    if self._is_itunes_synced_locally:
        self.iTunesTool = self.toolbar.AddSimpleTool(id, wx.Bitmap('images\\iTunes.png'), "Sync iTunes Library", "Sync all iTunes music and playlists to Sookbox.")
    else:
        self.iTunesTool = self.toolbar.AddSimpleTool(id, wx.Bitmap('images\\trash.gif'), "Stop syncing iTunes Library", "Stop syncing all iTunes music and playlists to Sookbox.")

    self.Bind(wx.EVT_TOOL, self.onITunesSync, self.iTunesTool)
    self.toolbar.Realize()

1 个答案:

答案 0 :(得分:0)

我会尝试使用SetToolNormalBitmap而不是删除按钮。然后调用toolbar.Realize()。另请参阅https://groups.google.com/forum/#!topic/wxpython-users/m11YfTdjVjw

您可能需要调用self.Layout或self.Refresh。

或者,您可能需要查看FlatMenu,它是wxPython菜单和工具栏的纯Python实现。它可以让黑客更轻松。