2017-10-05 63 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(文件名,文件名),它有一個「智能」連接功能,加入兩個路​​徑,同時刪除冗餘。 –