2012-05-13 3 views
0

У меня возникают проблемы при использовании операторов if и else, где я использую несколько операторов wx.FileDialog для изменения типа файла, который я разрешаю пользователю выбирать на основе того, что выбирается радиокнопка. Таким образом, проблема заключается в том, что я продолжаю получать UnboundLocalError, что моя локальная переменная назначается оператору FileDialog, указанному перед назначением. Вот мой код:Справочная проблема с wxPython FileDialog if и else statements

def OnOpen(self, e): 
if self.radioButton1.GetValue(): 
    opendialog = wx.FileDialog(self, "Choose a file", "", "", "*.txt", wx.MULTIPLE) 
if self.radioButton2.GetValue(): 
    opendialog = wx.FileDialog(self, "Choose a file", "", "", "*.csv", wx.MULTIPLE) 
else: 
    selectdialog = wx.MessageDialog(self,"Select process", "Warn", wx.OK) 
    selectdialog.ShowModal() 
    selectdialog.Destroy() 
if opendialog.ShowModal() == wx.ID_OK: 
    #More code to file path information 
+1

Вы имеете в виду "elif self.radioButton2 ..."? – acattle

+0

@acattle, я не имел в виду это, но должен был. Я думаю, что это тоже устранило бы мою проблему. Спасибо за это. – wilbev

ответ

2

Я предполагаю, что вы падаете во второй «если», «другое» условного оператора без OpenDialog либо определяется. Вы должны убедиться, что он инициализирован каким-то образом в каждом случае, а не только в двух из трех. В противном случае этот последний оператор «if» не будет выполнен. Поэтому не забудьте добавить

opendialog = wx.FileDialog(self, "Choose a file", "", "", "*.csv", wx.MULTIPLE) 

до конца второго заявления «если» и он будет работать во всех случаях.

+0

спасибо за ответ. Второй оператор «if» уже имеет wx.FileDialog. Вы имели в виду заявление «else»? Проблема в том, что я хочу показать MessageDialog для else, а не wx.FileDialog. Может быть, вы имели в виду выражение opendialog.ShowModal if? Для этого мне нужно добавить код, чтобы получить информацию о пути к файлу. Я попытался повторить этот последний оператор if (opendialog.ShowModal(), но оператор else все еще работает, когда я почему-то выбираю radobutton1. – wilbev

+0

Второй оператор if if только создает экземпляр opendialog в первой части, а не вторую часть (т.е. else) .Так что если BOTH первое «if» и первая часть второго «if» никогда не запускаются, то третий «if» не будет работать, потому что opendialog не определен. –

+0

Как указано в @acattle, добавив elif во второй, если кажется, исправляет проблему только в том случае, если я добавляю if opendialog.ShowModal() для операторов if и elif – wilbev