terça-feira, 24 de março de 2015

Um pouco de tkinter e sqlite.

.



#**********************************************************************
# Autor:        ubiratã uaatsim itza I.
# Data:         15/03/2015
# Hora:         21:30:00
#*********************************************************************
# Arquivo:      telaPessoas2.py
#
# Descrição:    O arquivo telaPessoas2.py
#
#               Métodos: .
#
#               Atributos: .
#
# uso:          F5
#               from telaPessoas2 import TelaPessoas2
#               t = TelaPessoas2
#
#               help(t)                 <-- docstring da classe.
#               help(t.TelaPessoas2())  <-- docstring do metodo.
#
#*********************************************************************
#
#*********************************************************************
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#*********************************************************************
#
try:
   # from tkinter import *
    import tkinter
    from tkinter import ttk
    from tkinter import messagebox
    from tkinter import StringVar
   # import sys, os
    import sqlite3
    import datetime
    print('Classes instanciadas com sucesso!')
except ImportError:
    print('Erro na importação das classes.')
#*********************************************************************
class TelaPessoas2():
    def __init__(self):
        '''Teste das funçoes de IHM.
        '''
        self.v_testeIhm = 'ti'
        self.comprimentoroot = 400
        self.larguraroot = 150
      
        self.tela1 = tkinter.Tk()
    #    self.tela1.geometry('700x150')
        self.tela1.title("Tela Pessoas 2")

        self.frames = ttk.Frame(self.tela1, padding=(3,3,10,10))
        self.telaprincipal = ttk.Frame(self.frames, borderwidth=5, relief="sunken")#, width=200, height=100)#, title='ola')
        self.style = ttk.Style()
        self.style.configure("BW.TLabel", foreground="black", background="white")
      
        self.ventranome = tkinter.StringVar()
        self.ventranome.set('sem nome')
        self.ventrasenha = tkinter.StringVar()
        self.ventrasenha.set('sem senha')

        self.varlblp = tkinter.StringVar()
        self.namelbl = ttk.Label(self.telaprincipal, text="Pessoa x", style="BW.TLabel", textvariable=self.varlblp)#, bg='yellow')
        self.entraname = tkinter.Entry(self.telaprincipal)#, textvariable=self.ventranome)
        self.entraname.config(textvariable=self.ventranome)
        self.varlbls = tkinter.StringVar()
        self.senhalbl = ttk.Label(self.telaprincipal, text="Senha", style="BW.TLabel", textvariable=self.varlbls)#, bg='yellow')
        self.entrasenha = tkinter.Entry(self.telaprincipal, textvariable=self.ventrasenha, show='*')

        self.btconectar = ttk.Button(self.telaprincipal, text="Conectar")
       
        self.vqtdetipopessoa = tkinter.StringVar()
        self.vqtdetipopessoa.set("4")

        self.opc1 = ttk.Radiobutton(self.telaprincipal, text='Um', variable=self.vqtdetipopessoa, value='1', command=self.qtdepessoas)
        self.opc2 = ttk.Radiobutton(self.telaprincipal, text='Dois', variable=self.vqtdetipopessoa, value='2', command=self.qtdepessoas)
        self.opc3 = ttk.Radiobutton(self.telaprincipal, text='Tres', variable=self.vqtdetipopessoa, value='3', command=self.qtdepessoas)
        self.opc4 = ttk.Radiobutton(self.telaprincipal, text='Quatro', variable=self.vqtdetipopessoa, value='4', command=self.qtdepessoas)

        self.vtipopessoa = tkinter.StringVar()
        self.vtipopessoa.set("uti")
        ###indicatoron=0 # faz menu
      
        self.opclbl = ttk.Label(self.telaprincipal, text="Pessoas", style="BW.TLabel")#, bg='yellow')
        self.opcadm = ttk.Radiobutton(self.telaprincipal, text='Administrador', variable=self.vtipopessoa, value='adm', command=self.tipoPessoa)
        self.opctec = ttk.Radiobutton(self.telaprincipal, text='Tecnico', variable=self.vtipopessoa, value='tec', command=self.tipoPessoa)
        self.opcres = ttk.Radiobutton(self.telaprincipal, text='Responsavel', variable=self.vtipopessoa, value='res', command=self.tipoPessoa)
        self.opcuti = ttk.Radiobutton(self.telaprincipal, text='Utilizador', variable=self.vtipopessoa, value='uti', command=self.tipoPessoa)

        self.wspinlbl = ttk.Label(self.telaprincipal, text="Quantidade", style="BW.TLabel")#, bg='yellow')

        self.telaprincipal.grid(column=0, row=0)#, sticky=(N, S, E, W))
        self.frames.grid(column=0, row=0, columnspan=3, rowspan=2)#, sticky=(N, S, E, W))
        self.namelbl.grid(column=3, row=0, columnspan=2, padx=5, pady=5)#, sticky=(N, W))
        self.entraname.grid(column=3, row=1, columnspan=2, pady=5, padx=5)#, sticky=(N, E, W))
        self.senhalbl.grid(column=3, row=2, columnspan=2, padx=5, pady=5)#, sticky=(N, W))
        self.entrasenha.grid(column=3, row=3, columnspan=2, pady=5, padx=5)#, sticky=(N, E, W))
         
        self.opclbl.grid(column=0, row=0)
        self.opcadm.grid(column=0, row=1)
        self.opctec.grid(column=1, row=1)
        self.opcres.grid(column=0, row=2)
        self.opcuti.grid(column=1, row=2)

        self.opc1.grid(column=0, row=4)
        self.opc2.grid(column=1, row=4)
        self.opc3.grid(column=2, row=4)
        self.opc4.grid(column=3, row=4)
      
        self.btconectar.grid(column=4, row=4)
      
        self.wspinlbl.grid(column=0, row=3)

        self.btconectar.bind("<Button-1>", self.fbtConectar)

        self.tela1.columnconfigure(0, weight=1)
        self.tela1.rowconfigure(0, weight=1)
        self.telaprincipal.columnconfigure(0, weight=3)
        self.telaprincipal.columnconfigure(1, weight=3)
        self.telaprincipal.columnconfigure(2, weight=3)
        self.telaprincipal.columnconfigure(3, weight=1)
        self.telaprincipal.columnconfigure(4, weight=1)
        self.telaprincipal.columnconfigure(5, weight=4)
        self.telaprincipal.rowconfigure(1, weight=1)

        print('Atributos instanciados - Classe TelaPessoas2.')    
#------------------------------------------------------------------------------------------
    def versaoTelaPessoas2():
        """Exibe a versão da classe TelaPessoas2.
        """
        messagebox.showinfo("Informaçao", "TelaPessoas2 - Versão 1.2")
        print('TelaPessoas2 Versão 1.2')

    def fbtConectar(self, event):
        '''Conecta ao sistema.
        '''
        n = self.ventranome.get()
        if n == 'sem nome':
            messagebox.showinfo('Conexao','Insira um nome válido.')
        else:
            self.ventranome.set(n)
          
        s = self.ventrasenha.get()
        if s == 'sem senha':
            messagebox.showinfo('Conexao','Insira um senha válido.')
        else:
            self.ventrasenha.set(s)

        if n == 'sem nome' or s == 'sem senha':
            messagebox.showinfo('Conexao','Insira um nome e uma senha válidos.')
        else:
            i = messagebox.askyesnocancel('Conexao','Utilizador e senha registrados.\n\nContinuar?')
            if i == True:
                v = self.vqtdetipopessoa.get()
                if v == '0':
                    self.btconectar.config(state=tkinter.DISABLED)
                    messagebox.showinfo("Informaçao", "Conexão finalizada com sucesso!")
                    print('Tela %s: sim com 0 pessoa.' % v)
                else:
                    '''Atualiza os rótulos do nome e da senha.
                    '''
                    p = self.ventranome.get()
                    s = self.ventrasenha.get()
                    n = self.vqtdetipopessoa.get()
                    t = self.vtipopessoa.get()

                    self.tela1.title('Conectado --> ' + t.upper() + n.upper() + ': ' + v + p + s)
                    self.ventranome.set('sem nome')
                    self.ventrasenha.set('sem senha')
                    vv = int(v)
                    vv = vv - 1
                    self.vqtdetipopessoa.set(str(vv))
                    self.varlblp.set(p.upper() + ' ' + str(vv))
                    self.varlbls.set('Senha ' + str(vv))
                    print('Tela %s: sim.' % v)
                    TelaPessoas2.persistencia2_criainsere('bd0', p, s, t)# arquivo, pessoa, senha, tipo
                    TelaPessoas2.persistencia2_mostra('bd0', 'tan')
            elif i == False:
                print('Tela 3: não.')
            elif i == None:
                print('Tela 3: cancelado.')
      
        print('Funçao do botao conectar.')

    def tipoPessoa(self):
        '''Radiobutton 1, 2, 3 e 4.
        '''
        p = self.vtipopessoa.get()
        v = self.vqtdetipopessoa.get()
        self.varlblp.set(p.upper() + ' ' + v)
        self.varlbls.set('Senha ' + v)
        if p == 'adm':
            print('administrador')
        elif p == 'tec':
            print('tecnico')
        elif p == 'res':
            print('responsavel')
        elif p == 'uti':
            print('utilizador')
        else:
            print('nada')
        self.btconectar.config(state=tkinter.NORMAL)

    def qtdepessoas(self):
        '''Radiobutton 1, 2, 3 e 4.
        '''
        v = self.vqtdetipopessoa.get()
        p = self.vtipopessoa.get()
        self.varlblp.set(p.upper() + ': ' + v)
        self.varlbls.set('Senha: ' + v)
        if v == '1':
            v_qtde = 1
            print('%s pessoa' %v_qtde)
        elif v == '2':
            v_qtde = 2
            print('%s pessoas' %v_qtde)
        elif v == '3':
            v_qtde = 3
            print('%s pessoas' %v_qtde)
        elif v == '4':
            v_qtde = 4
            print('%s pessoas' %v_qtde)
        else:
            v_qtde = 0
            messagebox.showinfo('Conexao','Concluído com sucesso!')
            print('%s pessoa' %v_qtde)
        self.btconectar.config(state=tkinter.NORMAL)

    def persistencia2_criainsere(vnomearquivo, vnomepessoa, vsenhapessoa, vtipopessoa):#, _dataconexao):
        '''tipos: texto, texto, integer, real, data

    None type is converted to NULL
    int type is converted to INTEGER
    float type is converted to REAL
    str type is converted to TEXT
    bytes type is converted to BLOB
        '''
        try:                                        # db = sqlite3.connect(':memory:')
            _conexao = sqlite3.connect(vnomearquivo)# example.db ou :memory cria no RAM.
            _cursor = _conexao.cursor()
            _cursor.execute("CREATE TABLE tabpessoas(ID INTEGER PRIMARY KEY NOT NULL, Nomepessoa TEXT, Senhapessoa TEXT, Tipopessoa TEXT)") # Cria Tabela. , dataconexao data
            _cursor.execute("INSERT INTO tabpessoas(ID, Nomepessoa, Senhapessoa, Tipopessoa) VALUES(2, ?, ?, ?)", (vnomepessoa, vsenhapessoa, vtipopessoa))# Insere os dados na coluna. , _dataconexao
            _conexao.commit()# Salva as alteraçoes.
            _cursor.execute('SELECT SQLITE_VERSION()')
            vdata = _cursor.fetchone()
            print ("SQLite version: %s" % vdata)
            _cursor.close()
            _conexao.close()
            print('Tabela criada com sucesso: ', vnomearquivo)
            print('Tabela fechada com sucesso: ', vnomearquivo)
           
        except sqlite3.Error as e:
            _cursor.close()
            _conexao.close()# Desconecta
            print ('Um erro ocorreu:', e.args[0])

    def persistencia2_mostra(vnomearquivo, _busca):
        '''p.persistencia2_mostra('bd0.db', 'nomepessoa')
        '''
        try:
            _conexao = sqlite3.connect(vnomearquivo)#example.db ou :memory cria no RAM.
            _cursor = _conexao.cursor()
  
        #    print(_cursor.fetchall())    cursor.fetchmany(2)
            for row in _cursor.execute('SELECT * FROM tabpessoas'):#### ORDER BY ID'):
                print(row)
        #        _cursor.execute('SELECT * FROM tabpessoas WHERE trans = ?', _busca)

        #    print(_cursor.fetchone())
        #    _cursor.execute("insert into tabpessoas(Nomepessoa, Senhapessoa, Tipopessoa) values (?, ?, ?)", (vnomepessoa, vsenhapessoa, vtipopessoa))
            _cursor.execute("select Nomepessoa, Senhapessoa, Tipopessoa from tabpessoas")
            row = _cursor.fetchone()
            print(row[0])
            print(row[1])
            print(row[2])
        #    print(Nomepessoa, "=>", row[0], type(row[0]))
        #    print(Senhapessoa, "=>", row[1], type(row[1]))
        #    print(Tipopessoa, "=>", row[1], type(row[1]))
        #
            _cursor.close()
            _conexao.close()# Desconecta
            print('Desconectado com sucesso - 1')
          
        except sqlite3.Error as e:
            print ('Um erro ocorreu:'), e.args[0]
            _cursor.close()
            _conexao.close()# Desconecta
            print('Desconectado com erro')
#------------------------------------------------------------------------------------------
if __name__ == '__main__':
    TelaPessoas2()
    print ('Classe instanciada - TelaPessoas2!')
#************************************************************************

.

Nenhum comentário:

Postar um comentário