Manipulação de MySQL com Python e Tkinter
Manipulação de MySQL com Python e Tkinter
Manipular um banco de dados MySQL As interfaces gráficas Tkinter Gestão das disposições geométricas dos widgets
importar pymysqPyLab permite usar facilmente NumPy e matplotlib A classe Tk do módulo Tkinter é um widget especial que, quando é
de pylab importar * f = Tk(); [Link]( "300x150")
instanciada, representa a janela principal da aplicação
Nom = Label ( f , text = "Saisissez votre nom : " )
… O método pack() garante o posicionamento de um widget em um widget
Prenom = Label ( f , text="Saisissez votre prénom : " )
tente conteneur (tornar o widget visível). champNom = Entry ( f );
db = Dbconnect() Cada widget possui um certo número de propriedades, chamadas de opções,
champPrenom = Entry ( f )
[Link]('SELECIONE * DE emp') podem ser lidas e configuradas como elementos de dicionário, ou
[Link]():print(emp) especificadas nos parâmetros do construtor. [Link](); [Link]();
sql="select year(hiredate), count(*) from emp group by year(hiredate)" O método mainloop() garante a exibição da janela principal e se coloca em [Link](); [Link]()
[Link](sql) ; atendimento dos eventos.
res=array([Link]()) Exemplo Nom. grade (linha=0, coluna=0)
annee=[Link]()[0] [Link] (linha=1,coluna=0)
nbEmp=[Link]()[1] de tkinter import* [Link](linha=0, coluna=1)
fig=figura() maFenetre = Tk() champPrenom. grid (row=1, column=1)
bar(annee,nbEmp) lblUser = Label (maFenetre , text= "User login"
ylabel("Nombre d'employés") ) txtUser = Entry (maFenetre) [Link](x=10,y=50,largura=120,altura=30)
xlabel("HireDate") txtUser['bg']="blue" [Link](x=140,y=50,largura=150,
mostrar() [Link](); [Link](fill=X)
altura=30)
lblPass = Label (maFenetre )
db.fechar_db() [Link](x=10,y=100,largura=120,
lblPass['text'] = "Password"
exceptExceptionaserr: txtPass = Entry (maFenetre ,bg="blue" ) altura=30)
print("Erro detectado:"+str(err) ) [Link](side=LEFT); [Link](x=140,y=100,
[Link](side=ESQUERDA) largura=150,altura=30)
FI SIBD - Módulo Programação Python FI SIBD - Módulo Programação Python FI SIBD - Módulo Programação Python
[Link] Moumoun 4 [Link]
Pr. Lahcen Moumoun () 5 Pr. Lahcen Moumoun 6
Ações manipulando widgets Tkinter Menu Tkinter Ações manipulando widgets Tkinter
Exemplo O papel deste widget é permitir criar todos os tipos de menus utilizáveis por Cada widget pode associar uma função a um evento que recebe, por meio do
uma aplicação. biais da método bind :
classe Interface(Frame):
def init (self, fenetre, **kwargs): Exemplo [Link](evento, funcaoCallback)
Frame. init (self, fenetre, largura=768, altura=576, ** kwargs) O primeiro argumento do método bind é um evento. Define-se por uma
[Link](fill=BOTH); master = Tk() cadeia de caracteres da forma: "<modificador-tipo-detalhe>"
self.nb_clic = 0
# Criação dos widgets # étape 1: Création de la barre des menu modificateur Description Exemplo de tipo Description
[Link]=Label(self,text=" Você não clicou no botão.") menuBar = Menu(master) Alt, Control, Touche Alt, Ctrl ou Maj Botão clique do mouse.
[Link]() Mudança afundada LiberarBotão Botão do mouse solto
# étape 2: Création du menu principal Duplo, evento ocorreu 2 ou KeyPress Tecla do teclado foi pressionada
[Link]= Button(self, text=" Quitter ",command=[Link])
[Link](side="esquerda") menuFichier = Menu(menuBar, tearoff = 0) Triplo 3 vezes em um curto espaço de Liberação de Tecla Tecla do teclado foi liberada
tempos. Enter , Leave Movimento do mouse
[Link]=Button(self,text=" Cliquez ici",command= [Link] ) #Menu não acessível (tearoff= 0); Menu destacável (tearoff=1) Fechar Verdade se o usuário bloquear dentro (entrar) ou fora (sair)
[Link](side="direita") menuBar.add_cascade(label=" Fichier",menu=menuFichier) o modo Maiúsculo. du Widget relacionado ao evento
def cliquer(self):
self.nb_clic += 1
# étape 3: Création des sous menus Exemplo
Você clicou {} vezes. menuFichier.add_command(label="Nouveau") "<KeyPress-s>" :Touche S enfoncée ; "<Double-Button-1>" : Double clic gauche de souris
fenetre = Tk() menuFichier.add_command(label=" Ouvrir" ) <Control-Shift-KeyPress-H>: As teclas Control, Shift e H estão pressionadas simultaneamente
interface = Interface(fenetre)
[Link]() menuFichier.add_command(label=" Quitter",command=quit) O callback é a função que será chamada quando o evento ocorrer.
[Link]() # étape 4: Configuration de la barre des menus a função deve aceitar como argumento um objetevent.
A opção define a ação a ser executada quando um evento de clique em um botão ocorre. [Link] (menu=barraDeMenu)
def funcaoRetorno(evento): ...
FI SIBD - Módulo Programação Python FI SIBD - Módulo Programação Python FI SIBD - Módulo de Programação em Python
Pr. Lahcen Moumoun 7 Pr. Lahcen Moumoun 8 Pr. Lahcen Moumoun 9
Ações manipulando widgets Tkinter Exemplo Exemple
do tkinter importar *
def init (self, fenetre, **kwargs):
Evento de teclado Description importar [Link] como tkFt
toque Enter
...
<Entrar>, <Retornar> classe Interface(Frame):
<Escape> , <Cancel> touche Échappement, combinação das teclas Ctrl+C [Link]=IntVar()
def init (self, fenetre, **kwargs):
<Alt_L>, <Cntrl_L>, <Shift_L> pressiona Alt, Ctrl, Shift (L para Esquerda, R para Direita) [Link]= Scale(master=frameTaille,
Frame. init (self, janela)
<Up>, <Left> , <Down>, <Right>, seta para cima, esquerda, para baixo, direita e teclas Início, Fim,
[Link](fill=BOTH) orient='horizontal',
<Home>,<End>,<Next>,<Prior>,<Tab> page down, page up, Tabulation troughcolor='dark grey',from_=1,
<Delete>, <Insert>, <BackSpace> toque Supressão, Inserção, retroceder (voltar atrás) [Link]=Entry(master=self) para=72,resolução=1,intervalotick=10,
<Caps_Lck>, <Num_Lck> tecla de bloqueio de maiúsculas, bloqueio numérico [Link](END,"Prog Python") length=150,variable= [Link],
<Pause>, <Print>, <FN> tocar Pausa, Impressão, de funções F1, F2, F3...
[Link](fill=X, padx=8, pady=8) command = [Link] )
<Key> toque qualquer
frm1 = Frame(self); [Link]() [Link](); [Link](14)
Evento do mouse Descrição radioGroup = LabelFrame(frm1, text="Style") framePolice = LabelFrame(frm1, text="Police")
<[Botão|PressãoDoBotão]-n> um dos botões do mouse está pressionado. n vale 1 (botão [Link] (linha=0, coluna=0, pady=8) [Link](linha=0, coluna=2, pady=8);
esquerda), 2 (botão do centro) ou 3 (botão da direita) stylePoliceFr = ["Normal", "Gras", "Italique", "Gras/Italique"] sbar =Scrollbar(framePolice)
<Bn-Motion> o mouse é movido sobre o widget, com um stylePoliceTk = ["normal","bold","italic","bold italic"] [Link]=StringVar()
botão pressionado (n vale 1, 2 ou 3) lista = Listbox(framePolice, alívio=SUNKEN, altura=6)
[Link] = StringVar() ; [Link](stylePoliceTk[0])
<ButtonRelease-n> o botão não está solto.
<Configurar> o tamanho do widget é modificado. forn em range(4): [Link](comando=[Link]);[Link](yscrollcommand=[Link])
<Double-Button-n>,<Triple-Button-n> equivalente ao Button, mas para um clique duplo ou triplo. bout=Radiobutton(master=grupoRadio,text=stylePoliceFr[n], # expand : remplir tout espace non utilisé dans le widget parent.
<Enter> , <Leave> o mouse entra no widget, sai do widget variable=[Link],value=stylePoliceTk[n],command=[Link])
[Link](anchor=W)alinhamento à esquerda [Link](side=RIGHT,fill=Y); [Link](side=LEFT,expand=YES, fill=BOTH)
para rotular [Link]ílias():
[Link](FIM, rótulo)
frameTaille = LabelFrame(frm1, text="Taille") [Link]('<Double-Button-1>', [Link])
[Link](linha=0, coluna=1, pady=8) [Link] = list
FI SIBD - Módulo Programação Python FI SIBD - Módulo Programação Python FI SIBD - Módulo Programação Python
[Link] Moumoun 10 [Link] Moumoun 11 Pr. Lahcen Moumoun 12
Manipular um banco de dados MySQL Manipuler une base de données MySQL Manipular um banco de dados MySQL
de connexion importar Connexion cbprofil = [Link](interf, values=lstval, textvariable=profil) def listarPessoas():
do tkinter importar * [Link](x=230, y=33, largura=100, altura=20) se [Link]()!=-1:
do tkinter import ttk árvore = [Link](interf, colunas=(1, 2, 3, 4, 5, 6), altura=5, mostrar='títulos') se [Link]() == 'Masculin':
db = Conexão() á[Link](x=0, y=70, largura=500) sx = 1
interf = Tk() [Link](1, largura=40) elif [Link]() == 'Feminino':
[Link]('Consulta do pessoal') [Link](2, width=100) sx = 0
[Link]("500x230") [Link](3, largura=60) req='''select [Link], [Link], [Link], [Link],
sexe = Label(interf, text="sexe :") [Link](4, largura=80) [Link], [Link] from personne per, profil pro
[Link](x=5, y=30, width=50, height=30) á[Link](5, largura=140) onde [Link] = [Link]'''
lstval = ["Masculin", "Féminin"] [Link](6, width=80) se [Link]()==-1 e [Link]()==-1:
cbsexe = [Link](interf, values=lstval) [Link](1, text='id') [Link](req)
[Link](x=60, y=33, largura=100, altura=20) [Link](2, text='nomprenom') elif [Link]()!=-1 e [Link]()==-1:
profil = Label(interf, text="Profil :") [Link](3, text='sexe') [Link](req + ''' e [Link] = %s''', (sx,))
[Link](x=170, y=30, largura=50, altura=30) [Link](4, text='datenaiss') elif [Link]()==-1 e [Link]()!=-1:
[Link]('SELECT libelle FROM perfil') [Link](5, text='email') [Link](req + ''' e [Link] = %s''', (perfil,))
lstval = [Link]() [Link](6, text='libelle') senão:
profil = StringVar() vsb = [Link](interf, orient="vertical", command=[Link]) [Link](req + ''' e [Link] = %s e [Link] = %s''', (sx, perfil))
[Link](x=485, y=72, altura=123) [Link](yscrollcommand=[Link]) res = [Link]()
FI SIBD - Módulo Programação Python FI SIBD - Módulo Programação Python FI SIBD - Módulo Programação Python
Pr. Lahcen Moumoun 22 Pr. Lahcen Moumoun 23 Pr. Lahcen Moumoun 24
Manipular um banco de dados MySQL Manipular um banco de dados MySQL Manipular um banco de dados MySQL
para it em tree.get_children(): •Soudages(numSo: smallint, libelle: varchar(20), dateOuverture: date, frm1_ = Quadro(self)
á[Link](it) dateFermeture: date) frm1_.pack(side=ESQUERDA)
para linha em res: •Sujets(numSu: int, intitule: varchar(20), numSo: smallint) frm2_ = Frame(self)
se row[2] == b'\x00': • Participants(numP: int, nomPrenom: varchar(30), sexe: boolean(255)) frm2_.pack(lado=DIREITO)
[Link]('', 'end', values=(row[0], row[1], 'Feminino', row[3], row[4], row[5])) • Votes(numV: int, dateVote: date, numP: int , numSu : int, ChoixVote : char(3) ) frm1 = Frame(frm1_)
senão: de tkinter importar * [Link]()
[Link]('', 'end', values=(row[0], row[1], 'Masculino', row[3], row[4], row[5])) do [Link] import * frm2 = Quadro(frm1_)
da [Link] import Figure [Link](preencher='ambos')
[Link]('<<ComboboxSelected>>', listerPersonnes) from db_connect import * frm3 = Quadro(frm2_)
[Link]('<<ComboboxSelected>>', listerPersonnes) importar matplotlib, numpy como np [Link]()
import [Link] como plt [Link]('SELECT libelle FROM sondages;')
search = Button(interf, text='search', command=listerPersonnes) [Link]('TkAgg') [Link] = [Link]()
[Link](x=130, y=200, largura=80, altura=20) da [Link].backend_tkagg import FigureCanvasTkAgg [Link] = StringVar()
classe Interface(Frame): [Link] = StringVar()
listerPersonnes() def __init__(self, fenetre, **kwargs): [Link] = Label(frm1, text="Libellé soundage:
[Link]() [Link] = Dbconnect() ,justificar=ESQUERDA).grid(adesivo =OESTE,linha=0, coluna=0, pady=8, padx=20)
Frame.__init__(self, fenetre) [Link] = Label(frm1, text="Intitulado assunto: ", justify=LEFT).grid(sticky =
[Link] = StringVar() W,row=1, coluna=0, pady=8, padx=20
[Link](fill=BOTH)
FI SIBD - Módulo Programação Python FI SIBD - Módulo Programação em Python FI SIBD - Módulo Programação Python
Pr. Lahcen Moumoun 25 Pr. Lahcen Moumoun 26 Pr. Lahcen Moumoun 27
Manipular um banco de dados MySQL Manipular um banco de dados MySQL Manipular um banco de dados MySQL
[Link] = Combobox(frm1,width=25, textvariable=[Link], [Link]['show'] = 'títulos' votos v ON [Link] = [Link] E [Link] = [Link] ONDE [Link] = '
values=[Link]) [Link]("1", width=90, anchor='c') ' AGRUPAR POR [Link];
[Link] = Combobox(frm1, width=25, textvariable=[Link], [Link]("2", width=90, anchor='se') resultCommandes = [Link]()
estado=DESATIVADO [Link]("1", text="NomPrenom") para i em [Link].get_children():
[Link]("<<ComboboxSelected>>", [Link]) [Link]("2", text="EscolhaVoto") [Link](i)
[Link]("<<ComboboxSelected>>", [Link]) def escolherIdadeSom(self,event=None): para c em resultCommandes:
[Link](linha=0, coluna=1, padx=15, pady=6) [Link]["state"] = "ENABLED" [Link]("", 'fim', values=(c[0], c[1]))
[Link](linha=1, coluna=1, padx=15, pady=6) [Link](sondage=[Link]()) tente:
self.labelframe2 = LabelFrame(frm2, text="Infos Votos") def chooseSujet(self, event=None, sondage=""): fig = [Link]()
[Link](fill="both", expand="sim", pady=20, padx=20) [Link]( fig.set_figwidth(2.7)
[Link] = Treeview(self.labelframe2, selectmode='browse') SELECIONE [Link] DE sujets s JUNTE-se aos sondages so ON [Link] = [Link] fig.set_figheight(3)
[Link](fill="both", pady=20, padx=20) ONDE [Link]=' [Link](f"SELECT [Link], [Link], sum([Link]) ")
[Link] = Scrollbar(self.labelframe2, resultCommandes = [Link]() DE votos v, participantes p, assuntos s, pesquisas so ONDE [Link]=[Link] e
orient="vertical" [Link]["values"] = resultCommandes [Link]=[Link] e [Link]=[Link] e [Link]='{[Link]()}'
command=[Link]) e [Link]='{[Link]()}' Agrupar por [Link], [Link] ORDENAR
[Link](sujet=[Link]())
POR [Link]
[Link](side='right', fill='x') def atualizar(self, assunto=""):
res = [Link]()
[Link](xscrollcommand=[Link]) [Link](
todos os resultados = [Link](res)
[Link]["columns"] = ("1", "2") SELECIONE [Link], [Link] DE sujeitos s JUNTE-se a participantes p JUNTE-se
FI SIBD - Módulo Programação em Python FI SIBD - Módulo Programação Python FI SIBD - Módulo Programação Python
Pr. Lahcen Moumoun 28 Pr. Lahcen Moumoun 29 Pr. Lahcen Moumoun 30
FI SIBD - Módulo de Programação Python FI SIBD - Módulo Programação Python FI SIBD - Módulo Programação Python
Pr. Lahcen Moumoun 37 Pr. Lahcen Moumoun 38 Pr. Lahcen Moumoun 39