【问题标题】:Python print statement changes behavior of code?Python print 语句改变代码的行为?
【发布时间】:2013-08-14 14:16:42
【问题描述】:

怪异之处:经过一些实验,我得出结论,在下面的代码中的任何地方添加一个无用的行(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()

【问题讨论】:

  • 删除print 是否会使您的代码处于工作状态?那么您可能忘记保存文件的先前版本,或者忘记重新启动程序并且仍在运行旧代码。
  • 不要使用打印来调试您的应用程序,而是尝试使用pdb
  • @Martijn Pieters 不,如果我删除打印,代码将不再有效。我肯定得救了。好东西要检查:)

标签: python wxpython


【解决方案1】:

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

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

或者,您可能想看看 FlatMenu,它是 wxPython 菜单和工具栏的纯 Python 实现。这将使黑客更容易。

【讨论】:

  • 谢谢,在使用这种方法之前我尝试过,但是无论出于何种原因(布局和刷新的各种组合),我都无法让它工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多