2016-07-30 15 views
0

Leute Ich versuche, ein Werkzeug zu machen, die Benutzer Pfad und Dateiname in einem Eintrag und neuen Dateinamen mit Pfad in einem anderen Eintrag bekommt, Mein Ziel ist es, os.rename(oldname, newname) zu verwenden, um die umbenennen gegebene Datei, aber es wirft mir einen Fehler.OS.rename() nicht mit tkinter

Mein Code

from tkinter import * 
import os 

def Rename_Function(*args): 
    os.rename(oldname2,newname) 
    oldname.set(oldname)#"Renamed Successfully !!! ") 


root = Tk() 
root.title("MyPython App") 
root.geometry("250x250+100+50") 

oldname = StringVar() 
oldname2= StringVar() 
newname= StringVar() 
Title1 = Label(root,text="FileName (with path):") 
Title1.grid(row=0, column=0) 
Oldfilename = Entry(root, textvariable=oldname2) 
Oldfilename.grid(row=0, column=1) 
Title2 = Label(root, text="New Filename:") 
Title2.grid(row=1, column=0) 
Newfilename = Entry(root, textvariable=newname) 
Newfilename.grid(row=1, column=1) 
RenameButton = Button(root, text="RENAME MY FILE", command=Rename_Function) 
RenameButton.grid(row=3,columnspan=2, sticky="NWES") 
FinalOutput = Label(textvariable=oldname) 
FinalOutput.grid(row=4, columnspan=2, sticky = "NWES") 
root.mainloop() 

This is how the tool looks

enter image description here

ich den obigen Fehler bekommen, wenn ich auf die Schaltfläche klicken, Kann jemand mich leiten, wie es funktioniert.

Ich habe Zweifel, dass os.rename() Funktion auf eine andere Weise zugegriffen werden sollte, da die Funktion eines anderen Moduls. Da ich Lerner bin, habe ich keine Ahnung, wie man sie effektiv einsetzt. Bitte führen Sie mich und erklären Sie mir, damit ich dieses Konzept besser verstehe.

+0

Sie übergeben eine 'StringVar()', wenn Sie eine systemeigene Zeichenfolge übergeben sollten. In String konvertieren, bevor die Umbenennungsfunktion aufgerufen wird. – SuperSaiyan

+0

@SuperSaiyan Können Sie mir sagen, wie man es mit Beispielzeile für eine 'StringVar()' Sie meinst mit str() -Funktion? – Sundararajan

Antwort

2

Um zu erweitern, was @SuperSaiyan in den Kommentaren gesagt hat.

Sie verwenden eine StringVar, für die die Methode .get() verfügbar ist. Wenn Sie die Variable übergeben, die auf diese Zeichenfolge festgelegt ist, übergeben Sie nur die Referenz an dieses Objekt. Sie müssen tatsächlich die .get()-Methode verwenden, um die Zeichenfolge abzurufen.

z.B. - oldname2.get()

Auch für den Pfad der Auswahl können Sie nur einen Dateidialog nutzen, und verwenden Sie os.path.splitext den Basispfad + Eintrag in der Umbenennung Widget zu bekommen als zweiten Parameter zu verwenden, um mit os.rename

+0

oh Mann Vielen Dank! Ich habe es jetzt gibt es einen Link, wo ich mehr über erhalten und setzen Methoden lernen kann – Sundararajan

+0

Hier ist eine Seite, die eine Menge tkinter Zeug hat http://effbot.org/tkinterbook/variable.htm – Pythonista

1

Sie StringVar verwenden, wohingegen rename Strings benötigt. Verwenden Sie oldname.get():

import tkinter as tk 
import os 

def rename(oldname, oldname2, newname): 
    os.rename(oldname2.get(),newname.get()) 
    oldname.set("Renamed Successfully !!! ") 

def main(): 
    root = tk.Tk() 
    root.title("MyPython App") 
    root.geometry("250x250+100+50") 
    oldname = tk.StringVar() 
    oldname2= tk.StringVar() 
    newname= tk.StringVar() 
    tk.Label(root, text="FileName (with path):").grid(row=0, column=0) 
    tk.Entry(root, textvariable=oldname2).grid(row=0, column=1) 
    tk.Label(root, text="New Filename:").grid(row=1, column=0) 
    tk.Entry(root, textvariable=newname).grid(row=1, column=1) 
    tk.Button(root, text="RENAME MY FILE", command=lambda: rename(oldname, oldname2, newname)).grid(row=3,columnspan=2, sticky="NWES") 
    tk.Label(textvariable=oldname).grid(row=4, columnspan=2, sticky = "NWES") 
    root.mainloop() 

if __name__ == '__main__': 
    main() 
+0

Ja, das ist, was die Antwort 20 Minuten Vorhin gesagt! – Pythonista