Ir para conteúdo
Fórum Script Brasil
  • 0

Problema Com Tkinter


Inufelipe

Pergunta

6 respostass a esta questão

Posts Recomendados

  • 0

Para o parâmetro command você precisa passar uma função que será executada quando o botão for clicado:

from Tkinter import *

def BotaoClick():
    canvas.create_oval(10,10,100,100)
    
root = Tk()
botao1 = Button(root, command=BotaoClick, text="circulo")
botao1.pack()
canvas = Canvas(root, width=200, height=200)
canvas.pack()
root.mainloop()
Sendo que fica mais elegante (e inteligível) se você usar uma classe:
from Tkinter import *

class Janela(Frame):
    def __init__(self, app):
        self.botao1 = Button(app, command=self.ClickButton, text="circulo")
        self.botao1.pack()
        self.canvas = Canvas(app, width=200, height=200)
        self.canvas.pack()

    def ClickButton(self):
        self.canvas.create_oval(10, 10, 200, 200)

    
aplicacao = Tk()
j = Janela(aplicacao)

aplicacao.mainloop()

Link para o comentário
Compartilhar em outros sites

  • 0

E se eu quiser fazer que apareça na posição do mouse?

Aí já foge dos meus conhecimentos (básicos) de Tkinter. No caso, você deveria procurar algo como um evento MouseClick do form ou algo assim. Talvez você tenha sucesso buscando no Google.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

ok cara,

eu vou tentar algo mail facil,


from Tkinter import *
class Nome(Frame):
 def __init__(self,master):
  self.frame = Frame(master)
  self.frame.pack()
  self.texto1 = Label(self.frame,text="Nome")
  self.texto1.pack()
  self.input = Entry(self.frame)
  self.input.pack()
  self.botao = Button(self.frame,text="Ok",command=self.printre)
  self.botao.pack()
  self.re = Text(master)
  self.re.pack()
 def printre(self):
  self.re.insert(INSERT,self.input.get()+"\n")
root = Tk()
nome = Nome(root)
root.mainloop()

Ele funciona bem,

mais tem como fazer tudo(O label,O entry e O button) na mesma linha ?

Falou

Link para o comentário
Compartilhar em outros sites

  • 0

Não sei se tem como fazer na mesma linha, mas você pode substituir...

  self.texto1 = Label(self.frame,text="Nome")
  self.texto1.pack()
  self.input = Entry(self.frame)
  self.input.pack()
  self.botao = Button(self.frame,text="Ok",command=self.printre)
  self.botao.pack()
... por:
  objetos = [['texto1', Label, {'text': 'Nome'}], ['input', Entry, {}], ['botao', Button, {'text': 'Ok', 'command': self.printre}]]
  for nome, classe, parametros in objetos:
    obj = classe(self.frame, parametros)
    setattr(self, nome, obj)
    obj.pack()

Ficou quase a mesma quantidade de linhas, mas se você adicionar mais uns dois controles já vai ver a diferença. Sendo que também é mais "complicado" de entender se você não tiver um certo conhecimento de Python.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...