OS.rename()无法使用tkinter

时间:2016-07-30 18:10:17

标签: python function tkinter module

我正在尝试创建一个工具,在一个条目中获取用户路径和文件名,在另一个条目中使用路径获取新文件名,我的目的是使用os.rename(oldname, newname)重命名给定文件,但是给我一些错误。

我的代码

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()函数应该以其他方式访问,因为它的另一个模块的功能。由于我是学习者,我没有任何线索如何有效地使用它们。请指导我并解释我,以便我更好地理解这个概念。

2 个答案:

答案 0 :(得分:2)

扩展@SuperSaiyan在评论中所说的内容。

您使用的是StringVar,其方法.get()可用。当您传递设置为此stringvar的变量时,您只是将引用传递给此对象。您需要实际使用.get()方法来获取字符串。

e.g。 - oldname2.get()

此外,要选择路径,您只需使用filedialog,并使用os.path.splitext获取重命名小部件中的基本路径+条目,以用作os.rename的第二个参数

答案 1 :(得分: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()