Guía para principiantes de la biblioteca GUI estándar en Python

Contenidos

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 circular 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

34432questions-9777808
13511analysis1-7912038
50426analysis2-8104108

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.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.