Python+Sqlite+Tkinter

410 views
Skip to first unread message

J Iuri Antunes

unread,
Nov 6, 2017, 9:05:52 AM11/6/17
to Python Brasil
Boa tarde,

Tenho um arquivo exemplo anexo funcionando e tenho dúvidas como criar uma grid onde poderia verificar todas as entradas efetuadas.

Agradeço qualquer dica. 



---------------------------------------------------------------------------------------------------------------------------------------------------------
# -*- coding: iso-8859-1 -*-
# Estudo de cadastro e consulta de clientes, em python+sqlite+Tkinter' 

import sqlite3
import ttk
from Tkinter import *
import tkMessageBox

#Criar conexão e cursor
con = sqlite3.connect('banco.db')
cur = con.cursor()
#Criar tabela clientes
cur.execute("""CREATE TABLE IF NOT EXISTS clientes (
            nome VARCHAR,
            telefone VARCHAR PRIMARY KEY,
            endereco VARCHAR,
            comp VARCHAR)""")

class main:
    def __init__(self,master):
#--------------------------------------TKINTER INTERFACE------------------------------------------------#
        self.frame1 = Frame(master,bg='sky blue')
        self.frame1.configure(relief=GROOVE)
        self.frame1.configure(borderwidth="2")
        self.frame1.place(relx=0.0,rely=0.0,relheight=1.0,relwidth=0.51)
        Label(self.frame1,text='CADASTRO',font=('Ariel','30'),bg='sky blue').place(relx=0.30,rely=0.01)
        Label(self.frame1,text='Nome',font=('Ariel','15'),bg='sky blue').place(relx=0.02,rely=0.12)
        self.nome=Entry(self.frame1,font=('Ariel','20'))
        self.nome.place(relx=0.02,rely=0.16)
        Label(self.frame1,text='Endereco',font=('Ariel','15'),bg='sky blue').place(relx=0.02,rely=0.21)
        self.endereco = Entry(self.frame1,font=('Ariel','20'))
        self.endereco.place(relx=0.02,rely=0.25,relwidth=0.94)
        Label(self.frame1,text='Telefone',font=('Ariel','15'),bg='sky blue').place(relx=0.02,rely=0.31)
        self.fone = Entry(self.frame1,font=('Ariel','20'))
        self.fone.place(relx=0.02,rely=0.36,width=200)
        Label(self.frame1,text='Complemento',font=('Ariel','15'),bg='sky blue').place(relx=0.02,rely=0.50)
        self.comp = Text(self.frame1,font=('Ariel','20'))
        self.comp.place(relx=0.02,rely=0.55,relwidth=0.94,relheight=0.43)
        self.botaocadastra = Button(self.frame1,text='Cadastrar',font=('Ariel','20'),
                                    fg='green',command=self.cadastraclientes)
        self.botaocadastra.place(relx=0.62,rely=0.33,relwidth=0.31)
        self.botaocancela = Button(self.frame1,text='Novo/Cancelar',font=('Ariel','20'),
                                   fg='red',command=self.limpaclientes)
        self.botaocancela.place(relx=0.62,rely=0.44,relwidth=0.31)
        
        self.frame2 = Frame(master,bg='sky blue')
        self.frame2.configure(relief=GROOVE)
        self.frame2.configure(borderwidth="2")
        self.frame2.place(relx=0.51,rely=0.0,relheight=0.31,relwidth=0.49)
        Label(self.frame2,text='CONSULTA',font=('Ariel','30'),bg='sky blue').place(relx=0.29,rely=0.05)
        self.fonec=Entry(self.frame2,font=('Ariel','20'))
        self.fonec.bind("<Return>",self.mostraclientes_a)
        self.fonec.place(relx=0.22,rely=0.42)
        self.botaook = Button(self.frame2, text='OK',font=('Ariel','25'),
                              fg='green',command=self.mostraclientes)
        self.botaook.place(relx=0.38,rely=0.65)

        self.frame3 = Frame(master)
        self.frame3.configure(relief=GROOVE)
        self.frame3.configure(borderwidth="2")
        self.frame3.place(relx=0.51,rely=0.31,relheight=0.69,relwidth=0.49)
        self.mostra1 = Text(self.frame3,bg='azure',font=('Courier','20','bold'),fg='blue')
        self.mostra1.place(relx=0.00,rely=0.0,relheight=1.0,relwidth=1.0)
        

#-----------------------------------------FUNÇÕES-----------------------------------------------------------#
    def cadastraclientes(self):
        nome=self.nome.get()
        telefone=self.fone.get()
        endereco=self.endereco.get()
        comp=self.comp.get(0.0,END)
        try:
            cur.execute("INSERT INTO clientes VALUES(?,?,?,?)",
                    (nome,telefone,endereco,comp))
        except:
            tkMessageBox.showinfo('Aviso!','Telefone ja cadastrado')  
        con.commit()
        self.fone.delete(0,END)
        

    def limpaclientes(self):
        self.nome.delete(0,END)
        self.fone.delete(0,END)
        self.endereco.delete(0,END)
        self.comp.delete(0.0,END)
        
    def mostraclientes(self):
        self.mostra1.delete(0.0,END)
        fonec = self.fonec.get()
        cur.execute("SELECT * FROM clientes WHERE telefone = '%s'" %fonec)
        consulta = cur.fetchall()
        for i in consulta:
            self.mostra1.insert(END,'''Nome:{}
End:{}
Complemento:{}'''.format(i[0],i[2],i[3]))
    
# Função q aceita eventos do teclado, apenas chama a função mostraclientes quando a tecla Enter é pressionada
    def mostraclientes_a(self,event):
        self.mostraclientes()
        
                                           
        
root = Tk()
root.title("Cadastro_C")
root.geometry("1366x768")
main(root)
root.mainloop()

Luciano da Silva Martins

unread,
Nov 7, 2017, 4:16:51 AM11/7/17
to Python Brasil
Acompanhando o tópico!!

SleX Luthor

unread,
Nov 10, 2017, 6:41:47 AM11/10/17
to Python Brasil
Não entendi bem o que vc esta querendo mas de uma olhada se e isso que deseja. Fiz o Grid com a listagem utilizando o ttk.Treeview

# -*- coding: iso-8859-1 -*-
# Estudo de cadastro e consulta de clientes, em python+sqlite+Tkinter'

import sqlite3
import tkinter
from tkinter import ttk
from tkinter import messagebox as tkMessageBox


con = sqlite3.connect('banco.db')
cur = con.cursor()
cur.execute("""CREATE TABLE IF NOT EXISTS clientes (
nome VARCHAR,
telefone VARCHAR PRIMARY KEY,
endereco VARCHAR,
comp VARCHAR)""")


class main:
def __init__(self, master):
        self.frame1 = tkinter.Frame(master, bg='sky blue')
self.frame1.configure(relief=tkinter.GROOVE)
self.frame1.configure(borderwidth="2")
self.frame1.place(relx=0.0, rely=0.0, relheight=1.0, relwidth=0.51)
tkinter.Label(self.frame1, text='CADASTRO', font=('Ariel', '30'),
bg='sky blue').place(relx=0.30, rely=0.01)
tkinter.Label(self.frame1, text='Nome', font=('Ariel', '15'),
bg='sky blue').place(relx=0.02, rely=0.12)
self.nome = tkinter.Entry(self.frame1, font=('Ariel', '20'))
self.nome.place(relx=0.02, rely=0.16)
tkinter.Label(self.frame1, text='Endereco', font=('Ariel', '15'),
bg='sky blue').place(relx=0.02, rely=0.21)
self.endereco = tkinter.Entry(self.frame1, font=('Ariel', '20'))
self.endereco.place(relx=0.02, rely=0.25, relwidth=0.94)
tkinter.Label(self.frame1, text='Telefone', font=('Ariel', '15'),
bg='sky blue').place(relx=0.02, rely=0.31)
self.fone = tkinter.Entry(self.frame1, font=('Ariel', '20'))
self.fone.place(relx=0.02, rely=0.36, width=200)
tkinter.Label(self.frame1, text='Complemento', font=('Ariel', '15'),
bg='sky blue').place(relx=0.02, rely=0.50)
self.comp = tkinter.Text(self.frame1, font=('Ariel', '20'))
self.comp.place(relx=0.02, rely=0.55, relwidth=0.94, relheight=0.43)
self.botaocadastra = tkinter.Button(self.frame1, text='Cadastrar',
                                    font=('Ariel', '20'),
fg='green', command=self.cadastraclientes)
self.botaocadastra.place(relx=0.62, rely=0.33, relwidth=0.31)
        self.botaocancela = tkinter.Button(
self.frame1, text='Limpar',
            font=('Ariel', '20'),
fg='red', command=self.limpaclientes
)
self.botaocancela.place(relx=0.62, rely=0.44, relwidth=0.31)

        self.frame2 = tkinter.Frame(master, bg='sky blue')
self.frame2.configure(relief=tkinter.GROOVE)
self.frame2.configure(borderwidth="2")
self.frame2.place(relx=0.51, rely=0.0, relheight=0.31, relwidth=0.49)
tkinter.Label(self.frame2, text='CONSULTA', font=('Ariel', '30'),
bg='sky blue').place(relx=0.29, rely=0.05)
self.fonec = tkinter.Entry(self.frame2, font=('Ariel', '20'))
self.fonec.bind("<Return>", self.mostraclientes)
self.fonec.place(relx=0.22, rely=0.42)
self.botaook = tkinter.Button(self.frame2, text='OK', font=('Ariel', '25'),
                              fg='green', command=self.mostraclientes)
self.botaook.place(relx=0.38, rely=0.65)

        self.frame3 = tkinter.Frame(master)
self.frame3.configure(relief=tkinter.GROOVE)
self.frame3.configure(borderwidth="2")
self.frame3.place(relx=0.51, rely=0.31, relheight=0.69, relwidth=0.49)

self.frame4 = tkinter.Frame(master)
self.frame4.configure(relief=tkinter.GROOVE)
self.frame4.configure(borderwidth="2")
self.frame4.place(relx=0.51, rely=0.31, relheight=0.69, relwidth=0.49)

self.scrollbar = tkinter.Scrollbar(self.frame4)
self.scrollbar.pack(side='right', fill=tkinter.Y)

column_names = ('Nome', 'Telefone', 'Endereco', 'Comp')
self.tree = ttk.Treeview(
self.frame4,
height="26",
columns=column_names,
yscrollcommand=self.scrollbar.set,
selectmode = "extended"
)
self.tree.column('#0', stretch=tkinter.NO, width=0)
for col in column_names:
self.tree.column(col, width=100)
self.tree.heading(col, text=col)

self.mostraclientes()
self.scrollbar.config(command=self.tree.yview)


def cadastraclientes(self):
nome = self.nome.get()
telefone = self.fone.get()
endereco = self.endereco.get()
comp = self.comp.get(0.0, tkinter.END)

try:
cur.execute("INSERT INTO clientes VALUES(?,?,?,?)",
(nome, telefone, endereco, comp))
except:
tkMessageBox.showinfo('Aviso!', 'Telefone ja cadastrado')
con.commit()
        self.fone.delete(0, tkinter.END)
self.mostraclientes()


def limpaclientes(self):
self.nome.focus()
self.nome.delete(0, tkinter.END)
self.fone.delete(0, tkinter.END)
self.endereco.delete(0, tkinter.END)
self.comp.delete(0.0, tkinter.END)


def mostraclientes(self, *args, **kwarks):
fonec = self.fonec.get() + '%'
cur.execute(
"SELECT * FROM clientes WHERE telefone LIKE ?",
(fonec,)
)
consulta = cur.fetchall()
self.tree.delete(*self.tree.get_children())
for idx, item in enumerate(consulta):
self.tree.insert('', idx, text="", values=item)
self.tree.pack(expand=True, fill='both')


root = tkinter.Tk()

root.title("Cadastro_C")
root.geometry("1366x768")
main(root)
root.mainloop()
Em segunda-feira, 6 de novembro de 2017 12:05:52 UTC-2, J Iuri Antunes escreveu:

J Iuri

unread,
Nov 10, 2017, 9:22:09 AM11/10/17
to python...@googlegroups.com
Obrigado. sx....@gmail.com

Vou verificar e retorno.

Abraço



--
--
------------------------------------
Grupo Python-Brasil
http://www.python.org.br/wiki/AntesDePerguntar
 
<*> Para visitar o site do grupo na web, acesse:
http://groups.google.com/group/python-brasil
 
<*> Para sair deste grupo, envie um e-mail para:
python-brasil+unsubscribe@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Atenciosamente,
J Iuri Antunes
Programador de computador
Analista de Sistemas Estruturados 
Celular (21)99286-4930/98964-8864
 
 
 
 
 
 

Luciano da Silva Martins

unread,
Nov 10, 2017, 4:10:11 PM11/10/17
to Python Brasil
A forma como ele fez de tkinter minúsculo indica ser o python3 não ou python2 certo?


---
Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasi...@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.

SleX Luthor

unread,
Nov 10, 2017, 4:47:15 PM11/10/17
to python...@googlegroups.com
Correto. =)


python-brasil+unsubscribe@googlegroups.com

---
Você recebeu essa mensagem porque está inscrito em um tópico no grupo "Python Brasil" dos Grupos do Google.
Para cancelar inscrição nesse tópico, acesse https://groups.google.com/d/topic/python-brasil/N77k12pU0Uc/unsubscribe.
Para cancelar inscrição nesse grupo e todos os seus tópicos, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
Alexandre Villela Eiras Brandão de Oliveira
or simply "SleX"

"Dispõe o Eterno Escriba e, havendo escrito, a folha vira. E não há ciência ou devoção que apague uma linha. E não há pranto sofrido que risque uma palavra. Ah, todo choro é vão!" (Omar Khayyam no livro Rubayat)

J Iuri

unread,
Nov 11, 2017, 11:01:37 AM11/11/17
to python...@googlegroups.com, sx....@gmail.com
​Slex,

Funcionou legal. Obrigado

Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para python-brasil+unsubscribe@googlegroups.com.

Para mais opções, acesse https://groups.google.com/d/optout.



--
Reply all
Reply to author
Forward
0 new messages