Использование .split с tkinter - PullRequest
       9

Использование .split с tkinter

0 голосов
/ 16 октября 2019

Довольно новичок здесь. У меня есть скрипт командной строки, который отлично работает для того, что я делаю, и я хочу переместить его в графический интерфейс.

os.chdir(ImageDirST)

for f in sorted(os.listdir(ImageDirST)):
    f_name,f_ext = (os.path.splitext(f))
    f_sku = (f_name.split(' ')[0])
    f_num = (f_name[-2:])

    n_name = ('{}_{}{}'.format(f_sku,f_num,f_ext))
    print(f, "-->", n_name)

Я бы хотел, чтобы это отображалось таким же образом в окне сообщений в tkinter. .

С некоторой помощью отсюда мне удалось распечатать имена файлов в каталоге при нажатии кнопки:

filenames = sorted(os.listdir(ImageDirBT))
text = "\n".join(filenames)
print_filename_test.set(text)

Я попытался использовать свой код разделения для настройки спискато, как будут выглядеть новые имена файлов перед установкой переменной, со следующим, где print_filenames () - это функция, вызываемая нажатием кнопки.

def print_filenames():
filenames = sorted(os.listdir(ImageDirBT))
for filenames in sorted(os.listdir(ImageDirBT)):
    f_name,f_ext = (os.path.splitext(filenames))
    f_sku = (f_name.split('_')[0])
    f_num = (f_name[-2:])
    n_name = ('{}_{}{}'.format(f_sku,f_num,f_ext))
newlist = "\n".join(n_name)
print_filename_test.set(newlist)

Я не получаю никаких ошибокс этим кодом для print_filenames (), однако то, что отображается на панели сообщений, является последним именем файла в списке, по вертикали, шириной в один символ: например:

F
I
L
E
_
1
1
.
e
x
t

Я хотел бы отобразить вывод в виде:

oldfilename_01.ext --> newfilename_csvdata_01.ext
oldfilename_02.ext --> newfilename_csvdata_02.ext
oldfilename_03.ext --> newfilename_csvdata_03.ext
oldfilename_04.ext --> newfilename_csvdata_04.ext

Написанная мною программа командной строки использует цифры, чтобы выбрать пункты меню для того, что необходимо сделать, подтвердить перед тем, как будет выполнено любое переименование, и, следовательно, распечатать файл nСравнениеМоя борьба состоит в том, чтобы манипулировать строками в списке, чтобы иметь возможность делать то же самое.

1 Ответ

0 голосов
/ 16 октября 2019

Используя messagebox:

import os
import tkinter as tk
from tkinter import messagebox

ImageDirST = r"your_path"
os.chdir(ImageDirST)

root = tk.Tk()

names = []
for f in sorted(os.listdir(ImageDirST)):
    f_name,f_ext = (os.path.splitext(f))
    f_sku = (f_name.split(' ')[0])
    f_num = (f_name[-2:])
    n_name = ('{}_{}{}'.format(f_sku,f_num,f_ext))
    names.append(f"{f} --> {n_name}\n")

messagebox.showinfo(title="Something", message="".join(names))
root.mainloop()

Или используя Text виджет с полосой прокрутки:

import os
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
ImageDirST = r"your_path"
os.chdir(ImageDirST)

root = tk.Tk()
txt = ScrolledText(root, font="Arial 8")
txt.pack()

for f in sorted(os.listdir(ImageDirST)):
    f_name,f_ext = (os.path.splitext(f))
    f_sku = (f_name.split(' ')[0])
    f_num = (f_name[-2:])
    n_name = ('{}_{}{}'.format(f_sku,f_num,f_ext))
    txt.insert("end",f"{f} --> {n_name}\n")

root.mainloop()
...