2017-06-11 50 views
-1

我正在做一個比較程序並將其導出到CSV文件的excel。這裏是我的代碼:主循環之前和之後Tkinter多個錯誤

import openpyxl, csv 
from tkinter import * 
from tkinter.filedialog import askopenfilename 
from openpyxl.utils import column_index_from_string 

output = open('differences.csv', 'w', newline='') 
output_writer = csv.writer(output) 

wb1, wb2 = '', '' 
sheet1, sheet2 = '', '' 
column_1, column_2 = '', '' 

root = Tk() 
root.configure(background='light green') 
root.geometry("500x500") 
root.wm_title("BananaCell") 

e1 = Text(root, width=15, height=1) 
e1.pack() 
e1.place(x=70, y=150) 

e2 = Text(root, width=15, height=1) 
e2.pack() 
e2.place(x=300, y=150) 

column1_entry = Text(root, width=5, height=1) 
column1_entry.pack() 
column1_entry.place(x=135, y=250) 

column2_entry = Text(root, width=5, height=1) 
column2_entry.pack() 
column2_entry.place(x=385, y=250) 


def destroy(): 
    root.destroy() 

def ask_for_filename_1(): 
    global wb1 
    wb1 = askopenfilename(title="Select Workbook 1") 
    print(str(wb1)) 
    return wb1 


def ask_for_filename_2(): 
    global wb2 
    wb2 = askopenfilename(title="Select Workbook 1") 
    print(str(wb2)) 
    return wb2 


def ask_for_sheet1(): 
    global sheet1 
    sheet1 = e1.get("1.0", "end-1c") 
    print(sheet1) 
    return sheet1 


def ask_for_sheet2(): 
    global sheet2 
    sheet2 = e2.get("1.0", "end-1c") 
    print(sheet2) 
    return sheet2 


def get_col_1(): 
    global column_1 
    column_1 = column1_entry.get("1.0", "end-1c") 
    print(column_1) 
    return column_1 


def get_col_2(): 
    global column_2 
    column_2 = column2_entry.get("1.0", "end-1c") 
    print(column_2) 
    return column_2 


filename_button1 = Button(root, text="Workbook 1", width=12, height=2, command=ask_for_filename_1) 
filename_button1.pack() 
filename_button1.place(x=100, y=100) 

filename_button2 = Button(root, text="Workbook 2", width=12, height=2, command=ask_for_filename_2) 
filename_button2.pack() 
filename_button2.place(x=300, y=100) 

col_button1 = Button(root, text="Enter", width=5, height=1, command=get_col_1) 
col_button1.pack() 
col_button1.place(x=185, y=248) 

col_button2 = Button(root, text="Enter", width=5, height=1, command=get_col_2) 
col_button2.pack() 
col_button2.place(x=435, y=248) 

sheet_button1 = Button(root, text="Enter", width=6, height=0, command=ask_for_sheet1) 
sheet_button1.pack() 
sheet_button1.place(x=15, y=147) 

sheet_button2 = Button(root, text="Enter", width=6, height=0, command=ask_for_sheet2) 
sheet_button2.pack() 
sheet_button2.place(x=430, y=147) 

label1 = Label(root, text="Sheet 1 column letter: ", bg="light green") 
label1.pack() 
label1.place(x=10, y=250) 

label2 = Label(root, text="Sheet 2 column letter: ", bg = "light green") 
label2.pack() 
label2.place(x=260, y=250) 


def write_csv(col1, col2, worksheet1, worksheet2): 
    for (col, col_1) in zip(worksheet1.iter_cols(min_col = column_index_from_string(col1), max_col=column_index_from_string(col1)), worksheet2.iter_cols(min_col = column_index_from_string(col2), max_col=column_index_from_string(col2))): 
     for (cell, cell_1) in zip(col, col_1): 
      if cell.value != cell_1.value and cell.row == cell_1.row: 
       output_writer.writerow(['Sheet 1 value: ' + ' ' + str(cell.value) + ' ' + 'is not equal to ' + ' ' + 'Sheet 2 value: ' + ' ' + str(cell_1.value) + ' ' + 'on row ' + ' ' + str(cell.row)]) 


dButton = Button(root, text="Exit", width=8, height=1, command=destroy) 
dButton.pack() 
dButton.place(x=100, y=60) 


mainloop() 

workbook1 = openpyxl.load_workbook(str(wb1)) 
workbook2 = openpyxl.load_workbook(str(wb2)) 

global sheet1 
sheet1 = e1.get("1.0", "end-1c") 

global sheet2 
sheet2 = e2.get("1.0", "end-1c") 


worksheet1 = workbook1.get_sheet_by_name(str(sheet1)) 
worksheet2 = workbook2.get_sheet_by_name(str(sheet2)) 

col1 = column1_entry.get("1.0", "end-1c") 
col2 = column2_entry.get("1.0", "end-1c") 

write_csv(col1, col2, worksheet1, worksheet2) 

然而,當我運行follwing代碼,我輸入所需的條件,以及與以下錯誤結束:​​。 當我把mainloop()作爲文件的最後一行時,我得到這個錯誤:self.fp = io.open(file, modeDict[mode]) FileNotFoundError: [Errno 2] No such file or directory: ''任何人都可以重寫我的代碼,以便它能成功編譯?任何幫助是巨大的謝謝

+1

請嘗試將此降低到[mcve] –

回答

1

後您銷燬窗口,這意味着你的代碼將繼續過去mainloop然後嘗試與已被銷燬的含主root及其相關方法get引用部件。如果在窗口被銷燬後嘗試這樣做,這會引發錯誤。

+1

您能提供一些代碼來解決此錯誤嗎? – Bill

+2

刪除mainloop()後的所有代碼。或者在mainloop()之前的某處移動它。 –

+1

@TerryJanReedy當我這樣做時,我得到以下錯誤:'沒有這樣的文件或目錄'' – Bill