Este artículo fue publicado como parte del Blogatón de ciencia de datos.
Introducción
Descripción general de Tkinter
Python proporciona una biblioteca GUI estándar llamada Tkinter. El módulo Tkinter ayuda a crear aplicaciones GUI de una manera rápida y sencilla. Tkinter proporciona 15 tipos de widgets. Algunos de los más comunes son Botón, Etiqueta, Marco, Menú. El mensaje, el botón de radio, el texto, la barra de desplazamiento, etc. Puedes leer más sobre esto aquí y aquí.
En este articulo. crearemos un juego de números pequeños. El usuario seguirá recibiendo preguntas numéricas. Ellos las responderán y harán clic en Enter para ir a la siguiente pregunta hasta que decidan salir y procesar el resultado. Se capturarán las respuestas correctas e incorrectas para mostrar el resultado al final. Usaremos widgets como Etiqueta, Fin, Entrada, Texto, Botón. Comencemos con la implementación sin más preámbulos.
Implementación
1. Importar paquetes
Por lo general, es una buena idea mantener todas las importaciones por separado. ¡Al menos, me gusta así!
import tkinter import random from random import randint from tkinter import Button import matplotlib.pyplot as plt import numpy as np
2. Creación de una ventana GUI y declaración de variables globales
Crearemos el diseño de la interfaz. Decidir el tamaño del diseño y un título atractivo
root = tkinter.Tk() root.title("Are you smart!!") root.geometry("400x200") correct_result=0 correct_answers=0 total_questions=0 incorrect_answer=0
3. Función para evaluar el resultado
Crearemos pequeñas definiciones para realizar tareas que hagan que el código sea fácil de mantener y limpio de leer.
def evaluate(event): global correct_result global user_input user_input_given = user_input.get() if str(user_input_given) == str(correct_result): global correct_answers correct_answers += 1 nextQuestion() else: global incorrect_answer incorrect_answer += 1 result = tkinter.Label(root, text="Hard Luck!!nThe correct answer is : "+str(correct_result), font=('Helvetica', 10)) result.pack() nextQuestion() root.after(1500, result.destroy)
4. Función para crear una pregunta
Usaremos aleatorio para crear un número entero aleatorio y una elección aleatoria para el operador ‘+’, ‘-‘ y ‘*’ para que los usuarios puedan obtener conjuntos aleatorios de preguntas numéricas para responder
def nextQuestion(): user_input.focus_set() user_input.delete(0, tkinter.END) global first_num first_num = randint(1,15) global second_num second_num = randint(1,15) global character character = random.choice("+-*") global correct_result if character == '*': correct_result = first_num*second_num if character == '+': correct_result = first_num+second_num if character == '-': correct_result = first_num-second_num text="Enter the value of "+str(first_num)+" "+character+" "+str(second_num) global total_questions total_questions += 1 user_question.config(text=text) user_question.pack()
5. Función para salir
Crearemos una pequeña función para salir e interactuar y registrar los resultados.
def exitThis(): print("Total Questions attended : "+str(total_questions)) print("Total Correct Answers : "+str(correct_answers)) print("Total Incorrect Answers : "+str(incorrect_answer)) root.destroy()
6. Pregunta inicial
Crearemos un conjunto inicial de preguntas basado en un entero aleatorio y un conjunto aleatorio de operadores numéricos
first_num = randint(1,15) second_num = randint(1,15) character = random.choice("+-*") if character == '*': correct_result = first_num*second_num if character == '+': correct_result = first_num+second_num if character == '-': correct_result = first_num-second_num
7. Creación de etiquetas
Crearemos el texto y el diseño de la interfaz.
user_question = tkinter.Label(root, text="Enter the value of "+str(first_num)+" "+character+" "+str(second_num), font=('Helvetica', 10)) user_question.pack() user_input = tkinter.Entry(root) root.bind('<Return>',evaluate) user_input.pack() user_input.focus_set() exitButton = Button(root, text="EXIT and Check Result", command=exitThis) exitButton.pack(side="top", expand=True, padx=4, pady=4)
8. Inicie la GUI
root.mainloop()
9. Visualización de resultados
Usaremos una barra y un gráfico circularEl gráfico circular, también conocido como diagrama de sectores, es una representación visual que muestra la proporción de diferentes partes respecto a un todo. Se utiliza comúnmente en estadísticas para ilustrar la distribución de datos categóricos. Cada sección del gráfico representa un porcentaje del total, facilitando la comparación entre categorías. Su diseño claro y conciso lo convierte en una herramienta efectiva para la presentación de información cuantitativa.... para mostrar el resultado a los usuarios después de que decidan salir del juego.
#Plotting the bar graph plt.figure(0) objects = ('Total Number of Questions','Correct Answers','Incorrect answers') y_pos = np.arange(len(objects)) stats = [total_questions,correct_answers,incorrect_answer] plt.bar(y_pos, stats, align='center', alpha=0.5) plt.xticks(y_pos, objects) plt.ylabel('Numbers') plt.title('Your Result!')
#Plotting the pie chart if str(total_questions) != "0": plt.figure(1) labels="Correct Answers",'Incorrect answers' sizes = [correct_answers,incorrect_answer] colors = ['green', 'red'] explode = (0.1, 0) # explode 1st slice plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct="%1.1f%%", shadow=True, startangle=140) plt.axis('equal') #Show both the graphs plt.show()
Conclusión
Si ha llegado hasta aquí, ¡debe haber estado realmente intrigado! Entonces, así es como se ve finalmente
Comparta sus pensamientos si este artículo fue interesante o lo ayudó de alguna manera. Siempre abierto a mejoras y sugerencias. Puedes encontrar el código en Github
Los medios que se muestran en este artículo no son propiedad de DataPeaker y se utilizan a discreción del autor.
Relacionado
Posts Relacionados:
- Tipos de datos en Python | 6 tipos de datos estándar en Python
- Biblioteca BeautifulSoup | Web Scraping con Python: Biblioteca BeautifulSoup
- Multiprocesamiento en Python | Una guía para principiantes sobre multiprocesamiento en Python
- Biblioteca AutoScraper | Automatice el web scraping con la biblioteca AutoScraper