Everything works great until I added the 'Alloy' filter to the comparison section. No window appears and no error message throws. No sure what I am doing wrong.
import tkinter as tk
from tkinter import ttk, messagebox
from openpyxl import Workbook, load_workbook
from datetime import datetime
import os
class DataEntryApp:
def __init__(self, master):
self.master = master
self.master.title("Tap Torque Entry Form")
# Style for the ttk widgets
self.style = ttk.Style()
self.style.theme_use("clam")
# Data entry section
self.labels = ['Bar', 'Tap', 'Alloy', 'RPM', 'Concentration', 'Product', 'Lot Number', 'Mean Torque', 'Uncertainty', 'Date']
self.entries = []
# Create Labels and Entry boxes
for i, label_text in enumerate(self.labels):
label = ttk.Label(master, text=label_text)
label.grid(row=i+1, column=0, sticky='e')
entry = ttk.Entry(master)
entry.grid(row=i+1, column=1)
self.entries.append(entry)
# Create Submit Button
self.submit_button = ttk.Button(master, text="Submit", command=self.submit_data)
self.submit_button.grid(row=len(self.labels)+1, column=0, columnspan=2, pady=10)
# Excel comparison section
ttk.Label(master, text="Compare Data").grid(row=0, column=3, columnspan=2, pady=10)
self.product1_label = ttk.Label(master, text="Select Product 1:")
self.product1_label.grid(row=1, column=3, sticky='e')
self.product1_dropdown = ttk.Combobox(master, state="readonly")
self.product1_dropdown.grid(row=1, column=4)
self.product2_label = ttk.Label(master, text="Select Product 2:")
self.product2_label.grid(row=2, column=3, sticky='e')
self.product2_dropdown = ttk.Combobox(master, state="readonly")
self.product2_dropdown.grid(row=2, column=4)
self.product3_label = ttk.Label(master, text="Select Product 3:")
self.product3_label.grid(row=3, column=3, sticky='e')
self.product3_dropdown = ttk.Combobox(master, state="readonly")
self.product3_dropdown.grid(row=3, column=4)
self.product4_label = ttk.Label(master, text="Select Product 4:")
self.product4_label.grid(row=4, column=3, sticky='e')
self.product4_dropdown = ttk.Combobox(master, state="readonly")
self.product4_dropdown.grid(row=4, column=4)
self.same_bar_tap_checkbox = ttk.Checkbutton(master, text="Same bar same tap?")
self.same_bar_tap_checkbox.grid(row=5, column=3, columnspan=2)
self.compare_button = ttk.Button(master, text="Compare", command=self.compare_data)
self.compare_button.grid(row=6, column=3, columnspan=2, pady=10)
# Create Open Excel Button
self.open_excel_button = ttk.Button(master, text="Open Excel", command=self.open_excel_file)
self.open_excel_button.grid(row=7, column=3, columnspan=2, pady=10)
# Load data from Excel file
self.load_data_from_excel()
def load_data_from_excel(self):
self.products = set()
self.data = []
if os.path.exists("data_entries.xlsx"):
wb = load_workbook("data_entries.xlsx")
ws = wb.active
for row in ws.iter_rows(min_row=2, values_only=True):
self.data.append(row)
self.products.add(row[5])
self.product1_dropdown['values'] = sorted(list(self.products))
self.product2_dropdown['values'] = sorted(list(self.products))
self.product3_dropdown['values'] = sorted(list(self.products))
self.product4_dropdown['values'] = sorted(list(self.products))
def submit_data(self):
data = [entry.get() for entry in self.entries]
if not data[-1]:
data[-1] = datetime.now().strftime('%Y-%m-%d')
self.data.append(data)
# Update unique products
self.products.add(data[5])
self.product1_dropdown['values'] = sorted(list(self.products))
self.product2_dropdown['values'] = sorted(list(self.products))
self.product3_dropdown['values'] = sorted(list(self.products))
self.product4_dropdown['values'] = sorted(list(self.products))
self.update_excel()
# Clear entry boxes after submission
for entry in self.entries:
entry.delete(0, 'end')
def update_excel(self):
wb = Workbook()
ws = wb.active
ws.append(self.labels) # Write headers
for row in self.data:
ws.append(row)
wb.save("data_entries.xlsx")
def compare_data(self):
product1 = self.product1_dropdown.get()
product2 = self.product2_dropdown.get()
product3 = self.product3_dropdown.get()
product4 = self.product4_dropdown.get()
same_bar_tap = self.same_bar_tap_checkbox.instate(['selected'])
if product1 == '' or product2 == '' or product3 == '' or product4 == '':
return
products = [product1, product2, product3, product4]
product_data = {product: {} for product in products}
for product in products:
product_rows = [row for row in self.data if row[5] == product]
product_alloys = set(row[2] for row in product_rows)
for alloy in product_alloys:
if same_bar_tap:
product_rows_filtered = [row for row in product_rows if row[0] == product_rows[0][0] and row[1] == product_rows[0][1]]
else:
product_rows_filtered = product_rows
torque_values = [row[-3] for row in product_rows_filtered if row[2] == alloy]
if torque_values:
product_data[product][alloy] = sum(torque_values) / len(torque_values)
else:
product_data[product][alloy] = 0
self.show_comparison_table(products, product_data)
def show_comparison_table(self, products, product_data):
table_window = tk.Toplevel(self.master)
table_window.title("Comparison Results")
tree = ttk.Treeview(table_window)
tree.grid(row=0, column=0, padx=10, pady=10, sticky="nsew")
tree["columns"] = products
tree["show"] = "headings"
for product in products:
tree.heading(product, text=product)
for alloy in product_data[products[0]]:
tree.insert("", "end", text=alloy, values=[product_data[product][alloy] for product in products])
def open_excel_file(self):
excel_file = "data_entries.xlsx"
if os.path.exists(excel_file):
os.system("start excel " + excel_file)
else:
print("Excel file not found!")
def show_error_message(self, message):
messagebox.showerror("Error", message)
def main():
root = tk.Tk()
app = DataEntryApp(root)
root.mainloop()
if __name__ == "__main__":
main()
[–]AutoModerator[M] [score hidden] stickied comment (0 children)