2016-07-30 64 views
0

夥計,我試圖讓一個工具,它得在另一個項目一個項目和新的文件名與路徑的用戶路徑和文件名,我的目標是用os.rename(oldname, newname)重命名給定的文件,但它拋出了一些錯誤。OS.rename()不與Tkinter的工作

我的代碼

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

我得到上面的錯誤,當我按一下按鈕, 可有人指導我如何使其發揮作用。

我有一個疑問,os.rename()功能應該在一些其他的方式,因爲它的另一模塊的功能進行訪問。由於我是學習者,我不知道如何有效地使用它們。請指導我解釋我,以便我更好地理解這個概念。

+0

當您應該傳遞本地字符串時,您正在傳遞'StringVar()'。在調用重命名函數之前轉換爲字符串。 – SuperSaiyan

+0

@SuperSaiyan你能告訴我如何與示例行做一個'STRINGVAR()'你的意思是使用STR()函數? – Sundararajan

回答

2

要在什麼@SuperSaiyan在評論(縣)說擴大。

您使用的是StringVar,其中有可以利用的方法.get()。當您傳遞設置爲此stringvar的變量時,您只是將引用傳遞給此對象。您需要實際使用.get()方法來獲取字符串。

例如 - oldname2.get()

另外,對於選擇你可以只使用一個FileDialog的,並使用os.path.splitext獲得在重命名插件的基本路徑+進入的第二個參數與os.rename

+0

哦男人非常感謝!現在知道有什麼鏈接,我可以瞭解更多關於獲取和設置方法 – Sundararajan

+0

這裏有一個網站有很多tkinter的東西http://effbot.org/tkinterbook/variable.htm – Pythonista

1

您正在使用StringVar使用路徑,而rename需要字符串。使用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

是的,這就是答案20分鐘前面說過! – Pythonista