2013-08-14 3 views
2

Странность: После некоторых экспериментов я пришел к выводу, что вставка бесполезной строки (print "hi", или x = 1). В любом случае код ниже заставляет его работать правильно.Оператор печати Python изменяет поведение кода?

Что происходит? Я хотел бы понять, как Python обрабатывает этот код, что вызывает это странное поведение.

Некоторые контексты: Я пишу gui в wxpython. У меня есть эта функция (см. Ниже), которая заставляет инструмент менять значки при нажатии (путем удаления инструмента и добавления его обратно с другим значком).

Приведенный ниже код заставляет кнопку правильно переключаться с иконками в первый раз, а во второй раз панель инструментов кажется отключенной. Я предположил, что это проблема с кодом, поэтому я поставил оператор печати, который, к моему удивлению, устранил проблему.

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

Удаляет ли 'print' свой код в рабочем состоянии? Тогда вы, вероятно, забыли сохранить предыдущую версию файла или забыли перезапустить свою программу и все еще выполняли устаревший код. –

+0

Вместо использования отпечатков для отладки приложения попробуйте использовать [pdb] (http://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/) вместо – Paco

+0

@Martijn Pieters Нет, если я удалю распечатать код больше не работает. Я определенно спасен. Хорошая вещь, чтобы проверить хотя :) – quantka

ответ

0

Я бы попытался использовать SetToolNormalBitmap, а не удалять кнопку. Затем вызовите toolbar.Realize(). См. Также https://groups.google.com/forum/#!topic/wxpython-users/m11YfTdjVjw

Возможно, вам понадобится позвонить self.Layout или self.Refresh тоже.

Кроме того, вы можете взглянуть на FlatMenu, который является чистой реализацией Python меню и панели инструментов wxPython. Это облегчило бы взлом.

+0

Спасибо, я пробовал это, прежде чем идти с этим подходом, однако я не мог заставить его работать по какой-либо причине (с различными комбинациями Layout и Refresh). – quantka

Смежные вопросы