我是Python的新手,我真的需要帮助,我一直在寻找,但我找不到答案。
我创建了一个脚本,用于比较来自2个Excel文件的数据,并在新文件中编写报告。这是一个包含大量功能和对象的长脚本。
现在我想让这个脚本对我的团队中的任何人都有用并创建一个GUI。我正在使用Tkinter。我创建了2个按钮来询问用户文件目录并将其存储在列表中。 我希望我的原始脚本使用两个输入,并在单击第三个按钮时运行。
我应该如何在tkinder app脚本中包含我的脚本?这是我的应用程序:
from Tkinter import *
import Tkinter, Tkconstants, tkFileDialog
listfile = []
class simpleapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
button = Tkinter.Button(self,text=u"data 1",command=self.OnButtonClick)
button2 = Tkinter.Button(self,text=u"data 2",command=self.OnButtonClick)
#here is the third button to run the script, the command isn't right
button3 = Tkinter.Button(self,text=u"Run script",command=self.OnButtonClick)
button.pack(side='bottom',padx=15,pady=15)
button2.pack(side='bottom',padx=15,pady=15)
button3.pack(side='bottom',padx=15,pady=15)
def OnButtonClick(self):
x = tkFileDialog.askopenfilename(title='Please select data directory')
listfile.append(x)
# def OnButtonClick2(self):
# Can I run my original script here?
# I read one should not include a function into a function
if __name__ == "__main__":
app = simpleapp_tk(None)
app.title('my application')
app.mainloop()
答案 0 :(得分:1)
Tk提供了一个函数tk_chooseDirectory
,可以在Windows上启动系统提供的目录选择器,我相信MacOSX或其他合适的对话框。在Tkinter上,这是使用 filedialog 命名空间公开的,例如:
from tkinter import filedialog
filedialog.askdirectory()
有关示例,请参阅TkDocs(搜索chooseDirectory)。
如果您要求的实际上是关于从解释器中执行python脚本的话,那么How to execute a file within the python interpreter?已经在What is an alternative to execfile in Python 3.0?处给出了添加Python3的问题。
答案 1 :(得分:1)
假设您的原始脚本名为excel_report.py
,并且它与您的Tkinter脚本位于同一目录中。我假设excel_report.py
已正确组织,以便所有处理都在函数中进行,并且它具有main()
函数,该函数从命令行收集文件名,然后调用执行实际工作的函数,
例如make_report(excelfilename1, excelfilename2, reportname)
。
我还假设excel_report.py
以
if __name__ == "__main__":
main()
如果所有这些都是真的,那么在你的Tkinter脚本中你可以放
from excel_report import make_report
靠近剧本顶部,
然后在第3个按钮的回调函数中调用make_report()
(例如)
def OnButtonClick3(self):
make_report(self.name1, self.name2, self.reportname)
self.name1
,self.name2
和self.reportname
包含您使用Tkinter文件对话框收集的文件名。
答案 2 :(得分:0)
如果您只需要选择两个目录并运行脚本,那么GUI可能对此类内容有些过分。如果你想让它变得非常简单,我建议放弃用户界面并将你的脚本改为:
您可以使用patthoyts提到的tkFileDialog.askdirectory()来完成此操作。简化版:
import tkFileDialog
def your_script(dir1, dir2):
*your script goes here with dir1 and dir2 as inputs for processing*
dir1 = tkFileDialog.askdirectory()
dir2 = tkFileDialog.askdirectory()
your_script(dir1,dir2)
如果您想让最终用户更轻松,请查看将脚本转换为应用程序(如果他们使用Mac)或exe(如果他们使用Windows)。 py2app或py2exe将成功。 Mac预装了python而Windows没有,所以如果你的团队在没有python的Windows上运行你的团队将无法运行你的脚本期。 py2whatever模块可以生成一个预先打包python的可执行文件,这样在他们的机器上没有python的人仍然可以运行你的脚本。