Используя 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()

Из того, что я могу ясно понять, я думаю, что включение команды copy в свойства кнопки свяжет ее с командой, определенной ранее в коде. У меня есть src и dest blank в качестве входных данных для src и dest и выложены с добавленным расширением для просмотра папок для облегчения управления файлами.

1 ответ

Нет "привязки" кнопок к функциям или функциям обратного вызова.

Чтобы сделать то, что вы ищете, вызовите функцию копирования, когда вы получите событие "Кнопка копирования" из операции чтения.

Я призываю вас прочитать документы, чтобы понять, как работают эти вызовы 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])
Другие вопросы по тегам