Python: Tkinter. Run button

Asked

Viewed 2,400 times

1

Dear friends, good evening!

See if you can give me an idea, please!

Problem to be solved:

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

The interface has two text boxes for the user to type the path of any two folders and a button 'Rename'.

I would like after the user typed in the respective fields, as soon as he clicked the button, the program ran.

Note: Gentlemen, just to inform that I can run the code by clicking on the 'Rename' button, when I put everything in the same '.py file'. What I want is to keep the code separate from the interface and, when clicking the button, run 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

#BELOW CODE OF THE PROGRAM

Note: I know that the variables oldAdress and newAdress should receive objects 'Entry()' 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

1 answer

0


Create a file called program.py and import it into the.py file as follows

import programa

in the section of the button command call the already imported method

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 it is necessary to create a method to send the parameters and perform the rest of the logic:

import os

def renomear(nome_antigo, nome_novo):
    #logica ...
  • Thank you Willian Vieira. I will test and then comment. Thank you for your attention!!!

Browser other questions tagged

You are not signed in. Login or sign up in order to post.