好的,所以我有这个 python 脚本,它可以从多个文件中复制文本并将其粘贴到具有不同文件扩展名的新文件中。它几乎完成了,但是我的刷新按钮有问题。
要使用它,只需将一些文件放在“输入”目录中,运行程序即可。
如果用户在“输入”文件夹中没有文件的情况下运行程序,看到文件计数为零,然后将一些文件放入文件夹中,我希望重新加载 file_count 变量。
目前,我有一个名为“refresh()”的函数,它打开程序的另一个实例,然后关闭初始实例。这行得通,但是因为 'os.startfile' 不是为此用途而设计的,所以它有一些问题:
首先,当然,重新启动整个程序似乎有点矫枉过正。
其次,“os.startfile”仅适用于 Windows。
第三,如果窗口被移动,然后程序被“刷新”,新实例将在默认位置打开。
那么无论如何要重新运行'file_count'变量吗?
PS。我是自学成才,所以我的知识存在差距(显然,这是其中之一。)PPS。马上要开始讲课了,所以我只能在一个小时内回复。
import sys
import os, os.path
from os import listdir
import shutil
from Tkinter import *
from Tkinter import Tk
from tkFileDialog import askopenfilename
path, dirs, files = os.walk(os.path.join(os.getcwd(), 'Input')).next()
file_count = len(files)
dirList = os.listdir(path)
def refresh():
opencp = os.startfile(os.path.join(os.getcwd(), 'Copy_Paster.py'))
closecp = os.execl(sys.executable, *([sys.executable]+sys.argv))
def copy_paste():
# Copy pastes text from source documents to new ones.
for fname in dirList:
print fname
extension = text_entered.get()
copy = open(os.path.join(os.getcwd(), 'Input', fname), "r")
paste = open(os.path.join(os.getcwd(), 'Output', fname + extension), "w+")
copy.seek(0)
shutil.copyfileobj(copy,paste)
copy.close()
paste.close()
# Window Geometry
width = "250"
height = "70"
# Window
root = Tk()
root.geometry(width+"x"+height+"+500+200",)
root.resizable(0,0)
root.title("Copy Paster")
text_entered = StringVar()
counter = Label(text="Input Directory: " + str(file_count) + " files.")
counter.place(x=int(width)-248,y=int(height)-63)
refresh = Button(root,command=refresh,text="Refresh")#Why this no work?
refresh.place(x=int(width)-80,y=int(height)-65, width=70)
format_label = Label(text="Output File Format:")
format_label.place(x=int(width)-248,y=int(height)-35)
document_type = Entry(root, textvariable=text_entered)
document_type.place(x=int(width)-135,y=int(height)-33, width=40)
convert = Button(root,command=copy_paste,text="GO!")
convert.place(x=int(width)-80,y=int(height)-35, width=70)
root.mainloop()