Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python打印语句更改代码的行为?_Python_Wxpython - Fatal编程技术网

Python打印语句更改代码的行为?

Python打印语句更改代码的行为?,python,wxpython,Python,Wxpython,奇怪之处:经过一些实验后,我得出结论,在下面的代码中的任何地方插入一行无用的行(打印“hi”,或x=1)可以使它正常工作 发生什么事了?我很想了解Python是如何处理导致这种奇怪行为的代码的 一些上下文:我正在用wxpython编写gui。我有这个功能(见下文),它可以使工具在按下时更改图标(通过移除工具并使用不同的图标将其重新添加) 下面显示的代码使按钮第一次正确切换图标,第二次工具栏似乎被禁用。我假设这是代码的问题,所以我加入了一个print语句,令我惊讶的是,它解决了这个问题 def c

奇怪之处:经过一些实验后,我得出结论,在下面的代码中的任何地方插入一行无用的行(
打印“hi”
,或
x=1
)可以使它正常工作

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

一些上下文:我正在用wxpython编写gui。我有这个功能(见下文),它可以使工具在按下时更改图标(通过移除工具并使用不同的图标将其重新添加)

下面显示的代码使按钮第一次正确切换图标,第二次工具栏似乎被禁用。我假设这是代码的问题,所以我加入了一个print语句,令我惊讶的是,它解决了这个问题

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()

我会尝试使用SetToolNormalBitmap,而不是删除按钮。然后调用toolbar.Realize()。另见

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


或者,您可能想看看FlatMenu,它是wxPython菜单和工具栏的纯Python实现。这样可以更容易地进行黑客攻击。

删除
打印
是否会使代码处于工作状态?然后,您可能忘记保存文件的早期版本,或者忘记重新启动程序,并且仍在运行较旧的代码。请尝试使用打印来调试应用程序,而不是使用打印instead@MartijnPieters不,如果我删除打印,代码将不再工作。我肯定救了你。不过要检查的好东西是:)谢谢,在使用这种方法之前,我试过了,但是无论出于什么原因(布局和刷新的各种组合),我都无法让它工作。