2017-06-11 11 views
-1

私はプログラムを比較してCSVファイルにエクスポートすることを秀でています。ここに私のコードは次のとおりです。私はfollwingのコードを実行したときにメインループ前後の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) 

しかし、私は必要な条件を入力し、次のエラーで終わる:​​。 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

関連する問題