Проблема с дублированием окна может возникнуть, если логика вашей программы вызывается несколько раз. Возможно, вы забыли удалить привязку к событию или вызываете функцию не только при нажатии на кнопку, но и в других местах кода.
Однако, исходя из вашего кода, я не вижу причин, по которым окно должно дублироваться. Возможно, у вас есть другой код, который вызывает создание дополнительного окна.
Относительно проблемы с открытием exe-файла вместо выбора файла, может быть ошибка в следующей строке кода:
```python
filename = filedialog.askopenfilename(parent=root, initialdir='/', title='Choose a file')
```
Вместо этого, попробуйте использовать:
```python
filename = filedialog.askopenfilename(parent=root, initialdir='/', title='Choose a file', filetypes=[('All files','*.*')])
```
Определение filetypes поможет ограничить выбор только до файлов определенного типа (например, только текстовые файлы). Если вам нужны все файлы, вы можете использовать filetypes=[('All files','*.*')].