import tkinter as tk
from tkinter import filedialog
import os

def count_words(text):
    words = text.split()
    return len(words)

def count_characters(text):
    return len(text)

def count_lines(text):
    lines = text.split('\n')
    return len(lines)

def read_from_file():
    file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
    if file_path:
        try:
            with open(file_path, 'r', encoding='utf-8') as file:
                content = file.read()
                display_counts(content)
        except Exception as e:
            display_error(str(e))

def display_counts(text):
    num_words = count_words(text)
    num_characters = count_characters(text)
    num_lines = count_lines(text)

    word_count_label.config(text="Number of words: " + str(num_words))
    char_count_label.config(text="Number of characters (including spaces): " + str(num_characters))
    line_count_label.config(text="Number of lines: " + str(num_lines))

def display_error(message):
    error_label.config(text="Error: " + message)

root = tk.Tk()
root.title("Text Counter")

text_entry = tk.Text(root, wrap="word", width=40, height=10)
text_entry.pack(pady=10)

file_button = tk.Button(root, text="Read from File", command=read_from_file, foreground="white", background="blue")
file_button.pack(side="left", padx=5)
update_button = tk.Button(root, text="Count Text", command=lambda: display_counts(text_entry.get("1.0", "end-1c")), foreground="white", background="green")
update_button.pack(side="left", padx=5)

word_count_label = tk.Label(root, text="Number of words: 0")
word_count_label.pack()
char_count_label = tk.Label(root, text="Number of characters (including spaces): 0")
char_count_label.pack()
line_count_label = tk.Label(root, text="Number of lines: 0")
line_count_label.pack()
error_label = tk.Label(root, text="")
error_label.pack()


root.mainloop()
