• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gust

Tkinter

8 mensagens neste tópico

Eu queria começar a dar uns toques no Tkinter e escolhi um criador de chaves do euromilhoes.

Este é o codigo:

import random
from Tkinter import *
from sys import exit

def sair():
    exit()
    
def main():
    #Escolhe os numeros e organiza-os
    numeros = range(1, 51)
    estrelas = range(1, 11)
    while len(numeros) > 5:
        numero = random.choice(numeros)
        numeros.remove(numero)
    while len(estrelas) > 2:
        estrela = random.choice(estrelas)
        estrelas.remove(estrela)
    numeros.sort()
    estrelas.sort()
    labela(numeros, estrelas)

def labela(numeros, estrelas):
    numero1 = Label(principal, text=numeros[0], relief=RAISED).pack()
    numero2 = Label(principal, text=numeros[1], relief=RAISED).pack()
    numero3 = Label(principal, text=numeros[2], relief=RAISED).pack()
    numero4 = Label(principal, text=numeros[3], relief=RAISED).pack()
    numero5 = Label(principal, text=numeros[4], relief=RAISED).pack()
    estrela1 = Label(principal, text=estrelas[0], relief=RAISED).pack()
    estrela2 = Label(principal, text=estrelas[1], relief=RAISED).pack()
    
if __name__ == "__main__":
    #Interface grafica
    principal = Tk()
    Button(principal, text="Chave", command=main()).pack()
    Button(principal, text="Sair", command=sair()).pack()
    principal.mainloop()

O problema é que sempre que eu corro  o prgm ele excuta as funções uma vez.

Os botões funcionam bem e tudo, mas ele termina logo na primeira execução.

Não liguem à apresentação depois melhoro-a. "Labela" foi à falta de melhor.

Obrigado pela atenção.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu nunca usei o Tkinter (uso o wxPython) mas pelo que vejo o erro está no quit.


Estive a pesquisar e a aprender os básicos de Tkinter, já consegui criar uma versão que funciona bem comigo.

Atenção que se correres a aplicação apartir do IDLE quando carregas no Sair a aplicação não fecha totalmente.

import random
from Tkinter import *

def main():
    #Escolhe os numeros e organiza-os
    numeros = range(1, 51)
    estrelas = range(1, 11)
    while len(numeros) > 5:
        numero = random.choice(numeros)
        numeros.remove(numero)
    while len(estrelas) > 2:
        estrela = random.choice(estrelas)
        estrelas.remove(estrela)
    numeros.sort()
    estrelas.sort()
    labela(numeros, estrelas)

def labela(numeros, estrelas):
    numero1 = Label(F, text=numeros[0], relief=RAISED)
    numero1.pack()
    numero2 = Label(F, text=numeros[1], relief=RAISED)
    numero2.pack()
    numero3 = Label(F, text=numeros[2], relief=RAISED)
    numero3.pack()
    numero4 = Label(F, text=numeros[3], relief=RAISED)
    numero4.pack()
    numero5 = Label(F, text=numeros[4], relief=RAISED)
    numero5.pack()
    estrela1 = Label(F, text=estrelas[0], relief=RAISED)
    estrela1.pack()
    estrela2 = Label(F, text=estrelas[1], relief=RAISED)
    estrela2.pack()
    
if __name__ == "__main__":
    #Interface grafica
    principal = Tk()
    F = Frame(principal)
    F.pack()
    butao1 = Button(F, text="Chave", command=main)
    butao1.pack()
    butao2 = Button(F, text="Sair", command=F.quit)
    butao2.pack()
    principal.mainloop()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O meu erro (principal)  estava em por o .pack() na criação do objecto.

Isto tornava-o "NoneType"

Muito obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, eu reparei nisso mas esqueci-me de te dizer. :P

Tkinter nem é assim tão mau, mas é feio! :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sabem como é que eu limpo a frame?

Tipo apagar a chave antiga e deixar a nova, eu tentei sobre por uma à outra mas como o tamanho é variavel fica mal.

E como é que executo sem ter de abrir a "Python (cammand line)"?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ja resolivi o primeiro problema.

Agora é só saber como não abrir a "Python (cammand line)".

Obrigado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes fazer double-click no ficheiro. :P

Depois deixa a solução para o teu problema, pode ser que ajude alguém! :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O primeiro problema:

-Em vez do pack usei o grid e dei instruções para a label preencher a coluna toda

O segundo e eu expliquie-me mal é que quando eu carrega 2 vezes no ficheiro o pc corre o python.exe primeiro e só depois o meu prgm.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora