#python #python-3.x #button #file-transfer #pysimplegui
#python #python-3.x #кнопка #передача файлов #pysimplegui
Вопрос:
Впервые пробую PySimpleGui, хочу создать программу exec, которая позволяет пользователю перемещать или копировать каталоги / файлы в выбранное им место назначения, но не совсем понимаю, как связать действие с кнопками.
Моя текущая программа выглядит следующим образом:
import PySimpleGUI as sg
import shutil, errno
src = ""
dest = ""
def copy(src, dest):
try:
shutil.copytree(src, dest)
except OSError as e:
# If the error was caused because the source wasn't a directory
if e.errno == errno.ENOTDIR:
shutil.copy(src, dest)
else:
print('Directory not copied. Error: %s' % e)
#Me testing out commands in PSG
layout = [[ sg.Text("Select path from source to
destination")],
[sg.Text("Source Folder", size=(15,1)), sg.InputText(src),
sg.FolderBrowse()],
[sg.Text("Destination Folder", size=(15,1)),
sg.InputText(dest), sg.FolderBrowse()],
[sg.Button("Transfer", button_color=("white", "blue"), size=
(6, 1)),sg.Button(copy, "Copy", button_color=("white",
"green"), size=(6, 1)),sg.Exit(button_color=("white", "red"),
size=(6, 1))]]
event = sg.Window("Mass File Transfer").Layout(layout).Read()
Из того, что я могу четко понять, я бы подумал, что включение команды копирования в свойства кнопки свяжет ее с командой, определенной ранее в коде. У меня есть пустые src и dest в качестве входных данных для src и dest, а также добавлено расширение для просмотра папок для упрощения управления файлами.
Комментарии:
1. Я думаю, что основная программа неправильно понимает, что PySimpleGUI не имеет API и архитектуры, аналогичных основным фреймворкам GUI. Это не соответствует их соглашениям. Вместо модели обратного вызова, как вы пытаетесь, события обрабатываются в простом цикле событий.
Ответ №1:
Нет ни «привязки» кнопок к функциям, ни функций обратного вызова.
Чтобы сделать то, что вы ищете, вызывайте copy, когда вы получаете событие «Копировать кнопку» обратно из чтения.
Я настоятельно рекомендую вам прочитать документы, чтобы понять, как работают эти вызовы Button и т.д. http://www.PySimpleGUI.org
Вот что, я думаю, вы ищете для своего кода:
import PySimpleGUI as sg
import shutil, errno
src = ""
dest = ""
def copy(src, dest):
try:
shutil.copytree(src, dest)
except OSError as e:
# If the error was caused because the source wasn't a directory
if e.errno == errno.ENOTDIR:
shutil.copy(src, dest)
else:
print('Directory not copied. Error: %s' % e)
#Me testing out commands in PSG
layout = [[ sg.Text("Select path from source to destination")],
[sg.Text("Source Folder", size=(15,1)), sg.InputText(src),
sg.FolderBrowse()],
[sg.Text("Destination Folder", size=(15,1)),
sg.InputText(dest), sg.FolderBrowse()],
[sg.Button("Transfer", button_color=("white", "blue"), size=
(6, 1)),sg.Button("Copy", button_color=("white",
"green"), size=(6, 1)),sg.Exit(button_color=("white", "red"),
size=(6, 1))]]
window = sg.Window("Mass File Transfer").Layout(layout)
while True:
event, values = window.Read()
print(event, values)
if event in (None, 'Exit'):
break
if event == 'Copy':
copy(values[0], values[1])