2015-05-01 4 views
1

Я пытаюсь использовать tkinter filedialog, чтобы получить выбор пользователя из файла в моей программе Python 3.4.Как получить строку из tkinter filedialog в Python 3?

Раньше я пытался использовать Gtk FileChooserDialog, но я держать работает в стену после того, как стены заставить его работать (here's my question about that.) Итак, я (пытался) перешел на Tkinter и использовать FileDialog.

Вот код, я использую для GUI:

import tkinter 
from tkinter import filedialog 

root = tkinter.Tk() 
root.withdraw() 

path = filedialog.askopenfile() 

print(type(path)) # <- Not actually in the code, but I've included it to show the type 

Он отлично работает, за исключением того, что она возвращает <class '_io.TextIOWrapper'> объект вместо строки, как я ожидал/это нужно, кроме.

Вызов str() на то, что не работает, и также не использует функцию модуля iogetvalue().

Кто-нибудь знает, как я мог получить выбранный путь к файлу в виде строки из функции filedialog.askopenfile()?

ответ

4

Я уверен, что существует несколько способов, но как насчет получения path.name? Это должна быть строка.

print("type(path):", type(path)) 
# <class '_io.TextIOWrapper'> 

print("path:", path) 
# <_io.TextIOWrapper name='/some/path/file.txt' mode='r' encoding='UTF-8'> 

print("path.name:", path.name) 
# /some/path/file.txt 

print("type(path.name):", type(path.name)) 
# <class 'str'> 

Обратите внимание, что askopenfile открывает и возвращает файл в режиме чтения по умолчанию. Если вы просто хотите имя файла и планируете его самостоятельно открыть позже, попробуйте вместо этого использовать askopenfilename. См this ссылку более:

Во-первых, вы должны решить, если вы хотите открыть файл или просто хотите, чтобы получить имя файла, чтобы открыть файл самостоятельно. В первом случае вы должны использовать tkFileDialog.askopenfile() в последнем случае tkFileDialog.askopenfilename().

+0

Удивительный! Я пропустил, что вам нужно было использовать 'askopenfilename' вместо просто' askopenfile'. +1 Принять :) –

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