2016-07-30 38 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