Python:脚本中的'刷新'特定变量

时间:2013-05-08 07:53:36

标签: python variables refresh reload

好的,所以我有这个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()

1 个答案:

答案 0 :(得分:2)

refresh函数中,为什么不能重新计算file_count变量?我怀疑你还需要更新一些其他变量。这样的事情可能是:

def refresh():
    global path,dirs,files,file_count,dirList
    path, dirs, files = os.walk(os.path.join(os.getcwd(), 'Input')).next()
    file_count = len(files)
    dirList = os.listdir(path)

要让你的标签更新,你需要做更多的事情。根据{{​​3}}:

  

您可以将Tkinter变量与标签相关联。当变量的内容发生变化时,标签会自动更新:

为此,您需要以不同的方式设置标签。

file_count_string = StringVar()
counter = Label(textvariable=file_count_string)
counter.pack()
file_count_string.set("Input Directory: " + str(file_count) + " files.")

当您想要刷新该标签时再次:

file_count_string.set("Input Directory: " + str(file_count) + " files.")