我正在使用Tkinter构建一个简单的桌面应用程序,该应用程序具有一个浏览按钮,用户可以从他们的计算机中选择文件(下面的代码位于名为gui.py的文件中):
import Tkinter
import tkFileDialog
import tkMessageBox
class simpleapp_tk(Tkinter.Tk):
def __init__(self,parent):
Tkinter.Tk.__init__(self,parent)
self.parent = parent
self.initialize()
def initialize(self):
self.grid()
self.entryVariable = Tkinter.StringVar()
self.entry = Tkinter.Entry(self,textvariable=self.entryVariable)
self.entry.grid(column=0,row=0,sticky='EW')
self.entry.bind("<Return>", self.OnPressEnter)
self.entryVariable.set(u"Enter text here.")
button_browse = Tkinter.Button(self, text = u"Browse", command = lambda:self.entryVariable.set(tkFileDialog.askopenfilename()))
button = Tkinter.Button(self,text=u"Go",
command=self.OnButtonClick)
button_browse.grid(column=1,row=0)
button.grid(column=2,row=0)
self.labelVariable = Tkinter.StringVar()
label = Tkinter.Label(self,textvariable=self.labelVariable,
anchor="w",fg="black",bg="white")
label.grid(column=0,row=1,columnspan=3,sticky='EW')
self.labelVariable.set(u"Hello !")
self.grid_columnconfigure(0,weight=1)
self.resizable(True,False)
self.update()
self.geometry(self.geometry())
self.entry.focus_set()
self.entry.selection_range(0, Tkinter.END)
def OnButtonClick(self):
self.labelVariable.set( self.entryVariable.get()+" (You clicked the button)" )
self.entry.focus_set()
self.entry.selection_range(0, Tkinter.END)
def OnPressEnter(self,event):
self.labelVariable.set( self.entryVariable.get()+" (You pressed ENTER)" )
self.entry.focus_set()
self.entry.selection_range(0, Tkinter.END)
if __name__ == "__main__":
app = simpleapp_tk(None)
app.title('my application')
app.mainloop()
现在,当用户点击按钮&#34; Go&#34;时,我希望将所选文件名传递给以下函数(在类外),代替"filename"
变量和该程序的输出应该在&#34; labelvariable
&#34;中的gui中返回:
def main():
data=[]
total_top5=[]
book = xlrd.open_workbook(filename)
sheet = book.sheet_by_index(0)
for row_index in xrange(1, sheet.nrows): # skip heading row
text = sheet.row_values(row_index, end_colx=1)
data.append(text)
#data = unicode(x).encode('UTF8') for x in data
new_data=[]
for x in data:
new_data.append(unicode(x[0]).encode('UTF8'))
我以前从未使用过Tkinter或在python中创建GUI,所以请各种帮助。
答案 0 :(得分:0)
这是一个解决方案,我假设您的意思是当您说要将所选文件的名称传递给predict.py时
在predict.py内部,进行这些更改;
首先导入GUI
from gui import simpleapp_tk
其次,使main函数传递参数
def main(filename="test.foo"):
最后,在您的运行例程中,实例化GUI,获取文件名,然后运行主函数
if __name__ == "__main__":
app = simpleapp_tk(None)
app.title('my application')
app.mainloop()
# Here it will wait until the GUI finishes and exits
filename = app.labelVariable.get()
main(filename)
您可以从gui.py导入predict.py并更改&#34; Go&#34;的方法调用。按钮。
,或者
如果你使button_browse成为simpleapp_tk的一个属性,你可以轻松地在外部设置它的命令,如果你将GUI导入其他地方,这是在predict.py
里面if __name__ == "__main__":
app = simpleapp_tk(None)
app.title('my application')
app.configure(command=main(tkFileDialog.askopenfilename()))
app.mainloop()