##############################################################################
# Parte do livro Introdução à Programação com Python
# Autor: Nilo Ney Coutinho Menezes
# Editora Novatec (c) 2010-2024
# Quarta Edição - Março/2024 - ISBN 978-85-7522-886-9
#
# Site: https://python.nilo.pro.br/
#
# Arquivo: capítulo 13/13.10 - Cadastro de sites.py
##############################################################################
import tkinter as tk
import tkinter.ttk as ttk
from gerente import GerenteDeSites
class App(tk.Tk):
MIN_X = 800
MIN_Y = 200
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.title("Controle de sites interessantes")
self.geometry(f"{self.MIN_X}x{self.MIN_Y}")
self.cria_controles()
self.gerente = GerenteDeSites()
self.gerente.carrega("dados.json")
self.mostra_dados()
self.minsize(self.MIN_X, self.MIN_Y)
def cria_controles(self):
self.quadro = ttk.Frame(self)
self.quadro.grid(
row=0, column=0, columnspan=2, padx=10, pady=10, sticky=tk.NSEW
)
self.grid_rowconfigure(0, weight=1)
self.tabela = ttk.Treeview(
self.quadro, columns=["url", "categoria", "data", "notas"], show="headings"
)
self.tabela.heading("url", text="URL")
self.tabela.heading("categoria", text="Categoria")
self.tabela.column("categoria", anchor=tk.CENTER)
self.tabela.heading("data", text="Data")
self.tabela.column("data", anchor=tk.CENTER)
self.tabela.heading("notas", text="Notas")
self.tabela.grid(row=0, column=0, sticky=tk.NSEW)
self.tabela.config(selectmode="browse")
scrollbar = ttk.Scrollbar(
self.quadro, orient=tk.VERTICAL, command=self.tabela.yview
)
self.tabela.configure(yscroll=scrollbar.set)
scrollbar.grid(row=0, column=1, sticky=tk.NS)
self.quadro.grid_columnconfigure(0, weight=1)
self.quadro.grid_rowconfigure(0, weight=1)
self.quadro.pack(expand=True, fill=tk.BOTH, padx=10, pady=10)
def adiciona_site_a_tabela(self, site):
self.tabela.insert(
"",
tk.END,
values=(site.url, site.categoria, site.data, site.notas),
iid=site.id,
)
def mostra_dados(self):
for site in self.gerente.sites.values():
self.adiciona_site_a_tabela(site)
App().mainloop()