Python: Tkinter. Execute button

1

Dear friends, good evening!

See if you can give me an idea, please!

Problem to solve:

I created the TKINTER interface for my program. This interface is in a separate file of the code. I would like the 'Rename' button to make the program run.

The interface has two textboxes for the user to enter the path of any two folders and a 'Rename' button.

I would like that after the user types in the respective fields, as soon as he clicks the button, the program executes.

Note: Gentlemen, just to inform you that I can run the code by clicking the 'Rename' button, when I put everything in the same 'file.py'. What I want is to keep the code separate from the interface and, when I click the button, execute the code. Thank you.

#CÓDIGO DA INTERFACE
from tkinter import *

janela = Tk()
janela.title("Move&Renomeia")
janela["bg"] = "wheat"
janela.geometry('500x450+800+100')



#título da interface
rotulo = Label(janela,
               font="Arial 16 bold",
               text='Programa Move e Renomeia Arquivos',
               bg="wheat")
rotulo.pack(side=TOP)

#rótulo da caixa de texto, campo endereço de origem
rotulo = Label(janela,
               font="Arial 12 bold",
               text='Pasta origem:',
               bg="wheat")
rotulo.place(x=10, y=100)

#rótulo da caixa de texto, campo endereço de destino
rotulo = Label(janela,
               font="Arial 12 bold",
               text='Pasta destino:',
               bg="wheat")
rotulo.place(x=10, y=150)

#Caixa de texto para colocar o caminho de origem
cxtexto1 = Entry(janela,
                 width=40,
                 font="Arial 12 bold")
cxtexto1.place(x=125, y=100)

#Caixa de texto para colocar o caminho de destino
cxtexto2 = Entry(janela,
                 width=40,
                 font="Arial 12 bold")
cxtexto2.place(x=125, y=150)

#Texto de orientação ao usuário
rotulo = Label(janela,
               font="Arial 10",
               text=' Como fazer:\n'
                    ' 1) Crie duas pastas:\n'
                    '    a) na primeira, coloque os arquivos a serem renomeados; \n'
                    '    b) na segunda, crie um arquivo no bloco de notas e coloque os nomes; \n'
                    ' 2) copie o endereço das pastas e cole no campo respectivo; \n'
                    ' 3) INVERTA as barras do endereço e acrescente uma barra no final; ',
               justify=LEFT,
               bd=2,
               relief=GROOVE,
               bg="wheat")
rotulo.place(x=50, y=200)


#botão para renomear o arquivo
bt1 = Button(janela,
             width=10,
             text="Renomear",
             font="Arial 12 bold",
             command='AQUI VAI ENTRAR A CHAMADA A FUNÇÃO')
bt1.place(x=200, y=310)



janela.mainloop()

ABOVE, INTERFACE CODE

#ABAIX PROGRAM CODE

Note: I know that the oldAdress and newAdress variables should receive 'Entry ()' objects instead of 'Input'

import os

oldAdress = str(input('Digite a pasta de origem: ')) #pasta origem
newAdress = str(input('Digite a pasta de destino: ')) #pasta destino

#Encontra o arquivo dentro do diretório. Neste caso só haverá uma arquivo.
listaNewAdress = os.listdir(newAdress)

#junta caminho com arquivo para formar diretório completo
diretorioCompleto_new = newAdress + listaNewAdress[0]

#abre arquivo no diretório
listaNomes = open(diretorioCompleto_new)

# Encontra os arquivos dentro do diretório. Vários arquivos.
listaOldAdress = os.listdir(oldAdress)

#acha quantos arquivos há no diretório
lista_len = len(listaOldAdress)

x = 0
while x < lista_len:
    #armazena nome de caa linha e retira o espaço de quebra de linha
    nome = listaNomes.readline().rstrip().upper()

    # junta caminho com arquivo para formar diretório completo
    diretorioCompleto_old = oldAdress + listaOldAdress[x]

    #Diretório de destino dos arquivos recebem o nome dos novos arquivos
    diretorioCompleto_new = newAdress + nome + '.docx'



     #move os arquivos, renomeando-os
        os.rename(diretorioCompleto_old, diretorioCompleto_new)

        x += 1
    
asked by anonymous 24.04.2018 / 00:38

1 answer

0

Create a file named programa.py and import it into the .py file as follows

import programa

In the command line snippet call the method already imported

bt1 = Button(janela,
         width=10,
         text="Renomear",
         font="Arial 12 bold",
         command=lambda programa.renomear(cxtexto1.get(),cxtexto2.get()))
bt1.place(x=200, y=310)

In the .py file, you need to create a method to send the parameters and perform the rest of the logic:

import os

def renomear(nome_antigo, nome_novo):
    #logica ...
    
25.04.2018 / 03:21