Python Tkinter: ¿cómo mostrar un editor de tablas en un widget de texto?

En este artículo, discutiremos cómo mostrar un editor de tablas en un widget de texto.

Antes de continuar, creemos primero un widget de texto simple con la ayuda de Tkinter. Para obtener el enlace al archivo de Excel utilizado en el código, haga clic aquí .

Widget de texto

El widget de texto se usa para mostrar el editor de texto en la ventana de Tkinter. Un usuario puede modificar el texto en el editor de texto.

Python3

# Import tkinter
from tkinter import *
  
# Create an instance of tkinter window
window = Tk()
  
# Size of the tkinter window
window.geometry("200x200")
  
# Create text widget
text = Text(window, width=15, height=2)
  
# insert text into the text field
text.insert(INSERT, "Hello world!")
  
# Set the position of the widget
text.grid(row = 0,column = 0)
  
window.mainloop()

 Producción:

 

Ejemplo 1:

En este ejemplo, estamos cargando datos tabulares de filas y columnas e iterando a través del número de filas y columnas. Después de eso, el texto se inserta en el widget de texto y se muestra la tabla de datos.

Python3

# import required modules
from tkinter import *
import pandas as pd
  
# Create an instance of tkinter frame
window = Tk()
  
# Set the size of the tkinter window
window.geometry("300x200")
  
# Load data from source
df = pd.read_excel("data.xlsx")
  
# Extract number of rows and columns
n_rows = df.shape[0]
n_cols = df.shape[1]
  
# Extracting columns from the data and
# creating text widget with some
# background color
column_names = df.columns
i=0
for j, col in enumerate(column_names):
    text = Text(window, width=16, height=1, bg = "#9BC2E6")
    text.grid(row=i,column=j)
    text.insert(INSERT, col)
      
  
# adding all the other rows into the grid
for i in range(n_rows):
    for j in range(n_cols):
        text = Text(window, width=16, height=1)
        text.grid(row=i+1,column=j)
        text.insert(INSERT, df.loc[i][j])
  
window.mainloop()

Producción:

 

Ejemplo 2:

Usemos los mismos datos y modificaremos el país UK a Reino Unido y guardaremos los new_data en formato excel.

Python3

# import required modules
from tkinter import *
import pandas as pd
  
# Create an instance of tkinter frame
window = Tk()
  
# Set the size of the tkinter window
window.geometry("300x200")
  
# Load data from source
df = pd.read_excel("data.xlsx")
  
# Extract number of rows and columns
n_rows = df.shape[0]
n_cols = df.shape[1]
  
# Extracting columns from the data and 
#creating text widget with some
# background color
column_names = df.columns
i=0
for j, col in enumerate(column_names):
    text = Text(window, width=16, height=1, bg = "#9BC2E6")
    text.grid(row=i,column=j)
    text.insert(INSERT, col)
      
# Dictionary for storing the text widget
# references
cells = {}
  
# adding all the other rows into the grid
for i in range(n_rows):
    for j in range(n_cols):
        text = Text(window, width=16, height=1)
        text.grid(row=i+1,column=j)
        text.insert(INSERT, df.loc[i][j])
        cells[(i,j)] = text        
          
def do_something():
    """
    When user clicks the "Save" button, modified data
    will be saved in excel file
    """
    for i in range(n_rows):
        for j in range(n_cols):
            if df.loc[i][j] != cells[(i,j)].get("1.0", "end-1c"):
                df.loc[[i],column_names[j]] = cells[(i,j)].get("1.0", "end-1c")
    df.to_excel("new_data.xlsx")
  
save_button = Button(
    window, height = 2,
    width = 16,
    text ="Save",
    command = lambda:do_something())
save_button.grid(row=7,column = 0)
window.mainloop()

Producción:

Haga clic en el botón Guardar. Al hacer clic en el botón Guardar se creará un “nuevo_dato.xlsx” con los datos modificados en el mismo directorio.

 

Publicación traducida automáticamente

Artículo escrito por sandeepburra y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *