2017-02-22 67 views
1

У меня есть функция askopenfilenames(), которая возвращает кортеж и помещает его в переменную files. Когда я print files печатает его следующим образом:Установить запись Tkinter с кортежем

('/home/hoeter/PycharmProjects/Renpy/rpatool.py', '/home/hoeter/PycharmProjects/Renpy/unrpa.py', '/home/hoeter/PycharmProjects/Renpy/window.py') 

Теперь то, что я хочу, чтобы поместить это значение в записи с , но без (), я пытаюсь следующее:

files_path.set(files) 
entry3 = Entry(f3, width=50, textvariable=files_path) 

Но в записи это выходит как:

/home/hoeter/PycharmProjects/Renpy/rpatool.py /home/hoeter/PycharmProjects/Renpy/unrpa.py /home/hoeter/PycharmProjects/Renpy/window.py 

Однако я ожидал, что он выйдет, как это было в print. Почему не так?

Короче говоря, мой желаемый результат в записи является:

'/home/hoeter/PycharmProjects/Renpy/rpatool.py', '/home/hoeter/PycharmProjects/Renpy/unrpa.py', '/home/hoeter/PycharmProjects/Renpy/window.py' 

Мой выходной ток в записи является:

/home/hoeter/PycharmProjects/Renpy/rpatool.py /home/hoeter/PycharmProjects/Renpy/unrpa.py /home/hoeter/PycharmProjects/Renpy/window.py 

И то, что я ожидал, что в записи прямо сейчас, но нет, есть:

('/home/hoeter/PycharmProjects/Renpy/rpatool.py', '/home/hoeter/PycharmProjects/Renpy/unrpa.py', '/home/hoeter/PycharmProjects/Renpy/window.py') 
+1

Итак, вам нужны котировки? Я не понимаю ваш ожидаемый результат. – Lafexlos

ответ

3

Честно говоря, я немного удивлен тем, что StringVar.set принимает кортеж.

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

files_path.set(str(files)[1:-1]) 

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

s = ', '.join(repr(u) for u in files) 
files_path.set(s) 

Но нет необходимости в этом, так как первая версия по сути делает то же самое.

Обратите внимание, что в обеих версиях, если какое-либо имя файла содержит символы одной кавычки, представление будет цитироваться с двойными кавычками. И если имя файла содержит как одинарные, так и двойные кавычки, тогда его представление будет одноколейным, а внутренние одинарные кавычки будут экранированы с обратным слэшем, например: \'. Но, надеюсь, вам не придется иметь дело с такими именами злых файлов. :)

0

Кронштейны и запятые не являются частью строки, они являются лишь визуальной частью списка.

Хотите что-то вроде этого?

list_of_string = ('/home/hoeter/PycharmProjects/Renpy/rpatool.py', '/home/hoeter/PycharmProjects/Renpy/unrpa.py', 
     '/home/hoeter/PycharmProjects/Renpy/window.py') 

output = "" 
for string in list_of_string: 
    output += "('"+string+"')" + ", " 

print(output) 

Выход:

('/home/hoeter/PycharmProjects/Renpy/rpatool.py'), ('/home/hoeter/PycharmProjects/Renpy/unrpa.py'), ('/home/hoeter/PycharmProjects/Renpy/window.py'),