Я пытаюсь отобразить только базовое имя файла в списке Python, но каким-то образом сохранить полный путь к файлу. Я знаю, как отображать только базовое имя файла, но проблема в том, что список можно сортировать, и когда я пытаюсь выполнить следующий шаг программы (распечатка файлов в формате PDF), она не может найти файлы в списке, потому что они не имеют полного пути к файлу. Если я покажу полный путь к файлу в списке, это сработает, но я бы предпочел видеть только имя файла.
Код приведен ниже. Я удалил большую часть функций, чтобы просто сосредоточиться на том, о чем спрашиваю.
Приведенный ниже код откроет окно tk. Нажмите кнопку «Индивидуальная сортировка». Выберите любые файлы изображений. В новом окне нажмите «Сохранить список». Цель состоит в том, чтобы напечатать исходный путь к файлу изображения, но в настоящее время он печатает путь, в котором находится программа. Если вы закомментируете/раскомментируете помеченные строки, это будет работать, но в списке будет отображаться полный путь к файлу.
import tkinter as tk
from tkinter import *
from tkinter import filedialog
import os
ws = Tk()
ws.title('Select Files to Import')
ws.geometry('500x200')
ws.config(bg='#456')
f = ('sans-serif', 13)
btn_font = ('sans-serif', 10)
bgcolor = '#BF5517'
def sort():
global second
second = Toplevel()
second.geometry('800x400')
menubar=Menu(second)
menubar.add_command(label="Save List", command=save)
second.config(menu=menubar)
global listbox
listbox = Drag_and_Drop_Listbox(second)
listbox.pack(fill=tk.BOTH, expand=True)
directory = filedialog.askopenfilenames()
n = 0
for file in directory:
listbox.insert(n, os.path.basename(file)) ####comment
#listbox.insert(n, file) ####uncomment
n=n+1
def save():
image=listbox.get(0, listbox.size())
for x in image:
print(os.path.abspath(x))
class Drag_and_Drop_Listbox(tk.Listbox):
def __init__(self, master, **kw):
kw['selectmode'] = tk.SINGLE
tk.Listbox.__init__(self, master, kw)
self.bind('', self.getState, add='+')
self.bind('', self.setCurrent, add='+')
self.bind('', self.shiftSelection)
def setCurrent(self, event):
self.curIndex = self.nearest(event.y)
def getState(self, event):
i = self.nearest(event.y)
self.curState = self.selection_includes(i)
def shiftSelection(self, event):
i = self.nearest(event.y)
if self.curState == 1:
self.selection_set(self.curIndex)
else:
self.selection_clear(self.curIndex)
if i < self.curIndex:
x = self.get(i)
selected = self.selection_includes(i)
self.delete(i)
self.insert(i+1, x)
if selected:
self.selection_set(i+1)
self.curIndex = i
x = self.get(i)
selected = self.selection_includes(i)
self.delete(i)
self.insert(i-1, x)
if selected:
self.selection_set(i-1)
self.curIndex = i
frame = Frame(ws, padx=20, pady=20, bg=bgcolor)
frame.pack(expand=True, fill=BOTH)
btn_frame = Frame(frame, bg=bgcolor)
btn_frame.grid(columnspan=2, pady=(50, 0))
sort_btn = Button(
btn_frame,
text='Individual Sort',
command=sort,
font=btn_font,
padx=10,
pady=5
)
sort_btn.pack(side=LEFT, expand=True, padx=(5,5))
ws.mainloop()
Подробнее здесь: https://stackoverflow.com/questions/791 ... ble-python
Как сохранить полный путь к файлу, но отображать только базовое имя в сортируемом списке Python? ⇐ Python
Программы на Python
1731603021
Anonymous
Я пытаюсь отобразить только базовое имя файла в списке Python, но каким-то образом сохранить полный путь к файлу. Я знаю, как отображать только базовое имя файла, но проблема в том, что список можно сортировать, и когда я пытаюсь выполнить следующий шаг программы (распечатка файлов в формате PDF), она не может найти файлы в списке, потому что они не имеют полного пути к файлу. Если я покажу полный путь к файлу в списке, это сработает, но я бы предпочел видеть только имя файла.
Код приведен ниже. Я удалил большую часть функций, чтобы просто сосредоточиться на том, о чем спрашиваю.
Приведенный ниже код откроет окно tk. Нажмите кнопку «Индивидуальная сортировка». Выберите любые файлы изображений. В новом окне нажмите «Сохранить список». Цель состоит в том, чтобы напечатать исходный путь к файлу изображения, но в настоящее время он печатает путь, в котором находится программа. Если вы закомментируете/раскомментируете помеченные строки, это будет работать, но в списке будет отображаться полный путь к файлу.
import tkinter as tk
from tkinter import *
from tkinter import filedialog
import os
ws = Tk()
ws.title('Select Files to Import')
ws.geometry('500x200')
ws.config(bg='#456')
f = ('sans-serif', 13)
btn_font = ('sans-serif', 10)
bgcolor = '#BF5517'
def sort():
global second
second = Toplevel()
second.geometry('800x400')
menubar=Menu(second)
menubar.add_command(label="Save List", command=save)
second.config(menu=menubar)
global listbox
listbox = Drag_and_Drop_Listbox(second)
listbox.pack(fill=tk.BOTH, expand=True)
directory = filedialog.askopenfilenames()
n = 0
for file in directory:
listbox.insert(n, os.path.basename(file)) ####comment
#listbox.insert(n, file) ####uncomment
n=n+1
def save():
image=listbox.get(0, listbox.size())
for x in image:
print(os.path.abspath(x))
class Drag_and_Drop_Listbox(tk.Listbox):
def __init__(self, master, **kw):
kw['selectmode'] = tk.SINGLE
tk.Listbox.__init__(self, master, kw)
self.bind('', self.getState, add='+')
self.bind('', self.setCurrent, add='+')
self.bind('', self.shiftSelection)
def setCurrent(self, event):
self.curIndex = self.nearest(event.y)
def getState(self, event):
i = self.nearest(event.y)
self.curState = self.selection_includes(i)
def shiftSelection(self, event):
i = self.nearest(event.y)
if self.curState == 1:
self.selection_set(self.curIndex)
else:
self.selection_clear(self.curIndex)
if i < self.curIndex:
x = self.get(i)
selected = self.selection_includes(i)
self.delete(i)
self.insert(i+1, x)
if selected:
self.selection_set(i+1)
self.curIndex = i
x = self.get(i)
selected = self.selection_includes(i)
self.delete(i)
self.insert(i-1, x)
if selected:
self.selection_set(i-1)
self.curIndex = i
frame = Frame(ws, padx=20, pady=20, bg=bgcolor)
frame.pack(expand=True, fill=BOTH)
btn_frame = Frame(frame, bg=bgcolor)
btn_frame.grid(columnspan=2, pady=(50, 0))
sort_btn = Button(
btn_frame,
text='Individual Sort',
command=sort,
font=btn_font,
padx=10,
pady=5
)
sort_btn.pack(side=LEFT, expand=True, padx=(5,5))
ws.mainloop()
Подробнее здесь: [url]https://stackoverflow.com/questions/79182349/how-do-i-maintain-full-file-path-but-only-display-basename-in-a-sortable-python[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия