How do I focus on Toplevel open Tkinter?

Asked

Viewed 508 times

0

In the Help menu, I’m opening as many windows as I click to open, this wasn’t supposed to happen. I tried to adapt something of this post: Tkinter focus a window ignoring the back? , but I couldn’t, it’s the same problem practically.

Follows the code:

from tkinter import *
import tkinter.filedialog as tkfiledialog

class homepage:
def __init__(self):
  inicio = Tk()

  lb1 = Label (inicio, padx=10, font=("Tahoma", 10), text="Todos os Direitos Reservados à PRO+, entretanto o código está aberto exclusivamente para Programadores Brasileiros. (Atenção: Este programa não pode ser comercializado.)")
  lb1.pack(side=BOTTOM , anchor=CENTER)

  inicio.overrideredirect(True) # Maximiza a janela sem bordas
  inicio.resizable(False, False)

  inicio.title("Pena Software")
  inicio.geometry("{0}x{1}+0+0".format(inicio.winfo_screenwidth(), inicio.winfo_screenheight()))
  inicio["bg"] = "gray"
  inicio.iconbitmap(r'pena.ico')

  def Open(): tkfiledialog.askopenfilename()
  def Quit(): inicio.destroy()


  menubar = Menu(tearoff=False)
  inicio.config(menu=menubar)

  MENUarquivo = Menu(tearoff=False)
  menubar.add_cascade(label="Arquivo", menu=MENUarquivo)
  MENUarquivo.add_command(label="Criar Sorteio",)
  MENUarquivo.add_command(label="Abrir...", command=Open)
  MENUarquivo.add_command(label="Editar Sorteio",)
  MENUarquivo.add_separator()
  MENUarquivo.add_command(label="Sair (Alt + F4)", command=Quit)


  MENUferramentas = Menu(tearoff=False)
  menulang = Menu(tearoff=False)
  menubar.add_cascade(label="Ferramentas", menu=MENUferramentas)

  menulang.add_command(label="Português (Brasil)",)
  menulang.add_command(label="English (Em Breve)",)
  MENUferramentas.add_cascade(label="Linguagens", menu=menulang)

  def noite():
        inicio.configure(background="black")

  def padrao():
        inicio.configure(background="light gray")


  menuamb = Menu(tearoff=False)
  menuamb.add_checkbutton(label="Padrão", command=padrao)
  menuamb.add_checkbutton(label="Noite...", command=noite)
  MENUferramentas.add_cascade(label="Ambiente", menu=menuamb)


  MENUajuda = Menu(menubar, tearoff=False)
  MENUajuda.add_command(label="Sobre", command=sobre)
  MENUajuda.add_command(label="Como Usar? (F1)", command=como_usar)
  menubar.add_cascade(label="Ajuda", menu=MENUajuda)

  inicio.mainloop()

def sobre():# uma pequena função "sobre"

    root = Tk()
    root.geometry("240x110+75+75")
    root.title("Sobre")


    texto=("Pena_Software.v0.1_Estável")
    textONlabel = Label(root, text=texto)
    textONlabel.pack()

    text1=("Livre")
    lb2 = Label(root, text="Licença Livre ")

    lb2.pack(side=BOTTOM)

def como_usar():
comousar = Tk()
comousar.geometry("380x520+80+80")
comousar.title("Como Usar?...")
comousar["bg"] = "white"


lb1 = Label(comousar, text="Menu ajuda" , font="Arial 11 italic" , background="white")
lb1.pack()

lb2 = Label(comousar, text="Como funciona o programa:\n" , font="Arial 10 bold" , background="white")
lb2.pack(anchor=NW)

lb3 = Label(comousar, text="Arquivo:" , font="Arial 10 italic" , background="white")
lb3.pack(anchor=NW)

lb4 = Label(comousar, text="  - Criar Sorteio: Cria uma lista de caracteres, letras, numeros e/ou \npalavras e, posterior sorteá-los.\n- Abrir...: Busca uma lista já criada, para poupar trabalho de fazer\n uma nova.\n - Editar Soteio: Tem com função editar uma lista já criada (escre-\n                            veu algo errado? Não tem problema, edite-o).\n- Sair: Tem como função fechar o programa.                                     \n" , font="Arial 9" , background="white")
lb4.pack(anchor=NW)

lb5 = Label(comousar, text="Ferramentas:" , font="Arial 10 italic" , background="white")
lb5.pack(anchor=NW)

lb6 = Label(comousar, text=" - Liguagens: Tem como função proporcionar uma boa experiên-\ncia à outros países.\n       • No Momento a Linguaguem disponível é: Português (Brasil)\n- Ambiente: Tem como função a diminuir a claridade (para evitar\n problemas na vista)\n" , font="Arial 9" , background="white")
lb6.pack(anchor=NW)

homepage()

1 answer

1

I found the answer in this link: https://stackoverflow.com/questions/5554954/toplevel-window-in-python-keeps-appearing-under-the-root-window

So I went looking and I found this http://effbot.org/tkinterbook/wm.htm#wm.Wm.Transient-method

Then I understood: janela = Tk(); opens a completely new independent window.

janela = Toplevel(parente); janela.transient(parente); This stretch allowed me to keep an open window and focus on what I wanted to open.

class Janela: def __init__ (self, master): janela = Toplevel(master); janela.transient(master);

That worked for me. : D

  • 1

    Thanks man, it’s been a while since I got this code and I haven’t finished this project

Browser other questions tagged

You are not signed in. Login or sign up in order to post.