2017-10-05 62 views
1

我遇到了Tkinter代码的问题。代码的目标是有4个按钮,2个浏览按钮,用来选择要相互比较的场景。第三种是为输出文件选择一个目的地。第四个是拉我的python代码与两个文件将被计算。Tkinter中的按钮错误 - 选择文件,添加它们的路径

我有我的浏览按钮,在那里,每当我在窗口中选择一个文件时遇到困难,他们返回:

pathlabel.delete(0, END) 
NameError: name 'pathlabel' is not defined 

content = infile.read(filename2) 
TypeError: integer argument expected, got str" 

的预期结果是所选择的文件保存它们的路径,以便我可以在Python代码中使用这些路径。

  1. 我在网上查找有关pathlabel和infile函数的文档,并没有看到任何有用的东西。任何人都可以看到我出错的地方,为什么会出现这些错误?

  2. 有没有人有任何关于如何在本地保存路径的建议(也许是一个变量),以便以后可以将它们拉出来?迄今为止,我一直没有成功。

谢谢。

下面是我的代码:

import os 
from Tkinter import * 
from tkinter import filedialog 

content = 'apple' 
file_path = 'squarebot' 

#FUNCTIONS 
def browsefunc(): #browse button to search for files 
    filename = filedialog.askopenfilename() 
    infile = open(filename, 'r') 
    content = infile.read() 
    pathadd = os.path.dirname(filename)+filename 

    pathlabel.delete(0, END) 
    pathlabel.insert(0, pathadd) 

    return content 

def browsefunc2(): #browse button to search for files 
    filename2 = filedialog.askopenfilename() 
    infile = open(filename2, 'r') 
    content = infile.read(filename2) 
    pathadd = os.path.dirname(filename2)+filename2 

    pathlabel.delete(0, END) 
    pathlabel.insert(0, pathadd) 

    return content 

def process_file(content): #process reconciliation code 
    print(content) 

def directoryname(): 
    directoryname = filedialog.askdirectory() # pick a folder 


#GUI 

root = Tk() 

root.title('Reconciliation Converter') 
root.geometry("598x150") 

mf = Frame(root) 
mf.pack() 


f1 = Frame(mf, width=600, height=250) #file1 
f1.pack(fill=X) 

f2 = Frame(mf, width=600, height=250) #file2 
f2.pack(fill=X) 

f3 = Frame(mf, width=600, height=250) #destination folder 
f3.pack(fill=X) 

f4 = Frame(mf, width=600, height=250) #reconcile button 
f4.pack() 

file_path = StringVar 


Label(f1,text="Select file 1 (Only txt files)").grid(row=0, column=0, sticky='e') #file1 button 
entry = Entry(f1, width=50, textvariable=file_path) 
entry.grid(row=0,column=1,padx=2,pady=2,sticky='we',columnspan=25) 

Label(f2,text="Select file 2 (Only csv files)").grid(row=0, column=0, sticky='e') #file2 button 
entry = Entry(f2, width=50, textvariable=file_path) 
entry.grid(row=0,column=1,padx=2,pady=2,sticky='we',columnspan=25) 

Label(f3,text="Select Your Destination Folder").grid(row=0, column=0, sticky='e') #destination folder button 
entry = Entry(f3, width=50, textvariable=directoryname) 
entry.grid(row=0,column=1,padx=2,pady=2,sticky='we',columnspan=25) 

Button(f1, text="Browse", command=browsefunc).grid(row=0, column=27, sticky='ew', padx=8, pady=4)#file1 button 
Button(f2, text="Browse", command=browsefunc2).grid(row=0, column=27, sticky='ew', padx=8, pady=4)#file2 button 
Button(f3, text="Browse", command=browsefunc).grid(row=0, column=27, sticky='ew', padx=8, pady=4)#destination folder button 
Button(f4, text="RECONCILE NOW", width=32, command=lambda: process_file(content)).grid(sticky='ew', padx=10, pady=10)#reconcile button 


root.mainloop() 

回答

1

注意,这个代码可以优化,但这应该让你去:

import os 
from tkinter import * 
from tkinter import filedialog 

content = 'apple' 
file_path = 'squarebot' 

#FUNCTIONS 
def browsefunc(): #browse button to search for files 
    filename = filedialog.askopenfilename() 
    infile = open(filename, 'r') 
    content = infile.read() 
    pathadd = os.path.dirname(filename)+filename 
    file_path1.set(pathadd) 
    return content 

def browsefunc2(): #browse button to search for files 
    filename2 = filedialog.askopenfilename() 
    infile = open(filename2, 'r') 
    content = infile.read() 
    pathadd = os.path.dirname(filename2)+filename2 
    file_path2.set(pathadd) 
    return content 

def browsefunc3(): #browse button to search for files 
    directory = filedialog.askdirectory(initialdir='.') 
    directoryname.set(directory) 
    return content 

def process_file(content): #process reconciliation code 
    print('------------------------------') 
    print(file_path1.get()) 
    print(file_path2.get()) 
    print(directoryname.get()) 

#GUI 

root = Tk() 

root.title('Reconciliation Converter') 
root.geometry("698x150") 

mf = Frame(root) 
mf.pack() 

f1 = Frame(mf, width=600, height=250) #file1 
f1.pack(fill=X) 
f2 = Frame(mf, width=600, height=250) #file2 
f2.pack(fill=X) 
f3 = Frame(mf, width=600, height=250) #destination folder 
f3.pack(fill=X) 
f4 = Frame(mf, width=600, height=250) #reconcile button 
f4.pack() 

file_path1 = StringVar() 
file_path2 = StringVar() 
directoryname = StringVar() 

Label(f1,text="Select file 1 (Only txt files)").grid(row=0, column=0, sticky='e') #file1 button 
entry1 = Entry(f1, width=50, textvariable=file_path1) 
entry1.grid(row=0,column=1,padx=2,pady=2,sticky='we',columnspan=25) 

Label(f2,text="Select file 2 (Only csv files)").grid(row=0, column=0, sticky='e') #file2 button 
entry2 = Entry(f2, width=50, textvariable=file_path2) 
entry2.grid(row=0,column=1,padx=2,pady=2,sticky='we',columnspan=25) 

Label(f3,text="Select Your Destination Folder").grid(row=0, column=0, sticky='e') #destination folder button 
entry3 = Entry(f3, width=50, textvariable=directoryname) 
entry3.grid(row=0,column=1,padx=2,pady=2,sticky='we',columnspan=25) 

Button(f1, text="Browse", command=browsefunc).grid(row=0, column=27, sticky='ew', padx=8, pady=4)#file1 button 
Button(f2, text="Browse", command=browsefunc2).grid(row=0, column=27, sticky='ew', padx=8, pady=4)#file2 button 
Button(f3, text="Browse", command=browsefunc3).grid(row=0, column=27, sticky='ew', padx=8, pady=4)#destination folder button 
Button(f4, text="RECONCILE NOW", width=32, command=lambda: process_file(content)).grid(sticky='ew', padx=10, pady=10)#reconcile button 

root.mainloop() 
+0

为什么,当我执行的代码,这两个file_path1。 get()和file_path2()被追加到directoryname.get()?否则,感谢您的帮助!对此,我真的非常感激。 –

+0

我不确定我的理解,“附加到”是什么意思?所有这些代码都会打印出从条目中检索的路径。 – kogito

+0

当我实际修复它。在你的代码中,你正在使用pathadd = os.path.dirname(filename2)+ filename2和pathadd = os.path.dirname(filename)+ filename打印目录路径,然后在目录路径后追加filepath,创建一个路径那不存在。我只是将它切换到os.path.join(文件名,文件名),它有一个“智能”连接功能,加入两个路​​径,同时删除冗余。 –