Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 [Tkinter] Top Level Window - from tkinter import *
#1
Hi guys, my main programs are based a lot of from subprocess call, but that is giving me problems (it doesn't matter why). I think i could write any code creating a new Top Level Window, but as you will see below, the main issue is from tkinter import * is not allowed. The new tkinter window code is only required that module. If i remove it, it will show only a window with a small, looks like a off button in the middle. And nothing of the remaining code. How can i make it work?

def next_version():
    Utilizador.set('')
    bot.set('')
    import tkinter as tk

    failure_max = 3
    passwords = [('alfa', 'nenebot'), ('alfa1', 'nenebot1'), ('alfa2', 'nenebot2'), ('alfa3', 'nenebot3'), ('alfa4', 'nenebot4'), ('alfa5', 'nenebot5')]

    def make_entry(parent, caption, width=None, **options):
        tk.Label(parent, text=caption).pack(side=tk.TOP)
        entry = tk.Entry(parent, **options)
        if width:
            entry.config(width=width)
        entry.pack(side=tk.TOP, padx=10, fill=tk.BOTH)
        return entry

    def enter(event):
        check_password()

    def check_password():
        """ Collect 1's for every failure and quit program in case of failure_max failures """

        if (user.get(), password.get()) in passwords:
            check_password.user = user.get()
            new_winF()
        check_password.failures += 1
        if check_password.failures == failure_max:
            root.destroy()
            raise SystemExit('Acesso Recusado')
        else:
            root.title('Tente novamente.')
    check_password.failures = 0

    root = tk.Tk()
    root_height = 160
    root_width = 300
    root.title('Login Obrigatório')
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()
    x_cordinate = int((screen_width/2) - (root_width/2))
    y_cordinate = int((screen_height/2) - (root_height/2))
    root.geometry("{}x{}+{}+{}".format(root_width, root_height, x_cordinate, y_cordinate))

    user = make_entry(root, "Utilizador:", 16, show='')
    password = make_entry(root, "Password:", 16, show="*")

    b = tk.Button(root, borderwidth=4, text="Login", width=10, pady=8, command=check_password)
    b.pack(side=tk.BOTTOM)
    password.bind('<Return>', enter)

    user.focus_set()
    root.resizable(False,False)
    root.mainloop()
   
def new_winF():
    from tkinter import *

    root = Tk()
    root_height = 202
    root_width = 456
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()
    x_cordinate = int((screen_width/2) - (root_width/2))
    y_cordinate = int((screen_height/2) - (root_height/2))
    root.geometry("{}x{}+{}+{}".format(root_width, root_height, x_cordinate, y_cordinate))

    var = StringVar()
    label = Label( root, textvariable=var, relief=RAISED )

    var.set("""     NeneBot v1.1 Beta
    ---------------------------------------------------------------------------------------------
    1º reparação de todos os bugs reportados
    *********************************************************************************************
    2º melhorias na estrutura da App
    *********************************************************************************************
    3º melhoria na App em termos de facilidade de leitura
    *********************************************************************************************
    4º adição de calculadora de IP
    *********************************************************************************************
    5º organizador de ficheiros (um clique e todos os ficheiros em pasta)
    *********************************************************************************************
    6º adição de outras funcionalidades mediante sugestões reportadas""")

    label.pack()
    root.resizable(False,False)
    root.mainloop()


Attached Files Thumbnail(s)
   
Quote
#2
bold, italic and underline inside python code tags doesn't work, also i can't quite follow what you are asking Confused .
francisco_neves2020 likes this post
Quote
#3
(Apr-23-2019, 07:34 PM)Yoriz Wrote: bold, italic and underline inside python code tags doesn't work, also i can't quite follow what you are asking Confused .
You can open a new tkinter window based on the main code, don't know if you saw the picture, the code requires from tkinter import *, but it gives an error if i apply it saying: import * only allowed at module level
Quote
#4
import tkinter as tk is the preferred way of importing, see https://python-forum.io/Thread-Namespace...th-imports
you should only need one root.mainloop()
The error is because you are trying to use from tkinter import * inside a function
Imports should go at the start of your python file.

It looks like you have put two separate windows codes together in a way which they shouldn't be.
Quote
#5
I got it to work, the new window opens, but kills the main program. If you saw my post first picture the window wasn't showing nothing at all. Now on this one is showing my text (fine so far). You will understand better by this picture attached below

Resuming:
- the user will insert a password, if correct the new tkinter window, will open to display the text
- then the user should be able to return to the main program, right now it isn't happening, for some reason the main program goes blank.
- for example on the step the user input a password, that window can be closed and the person will return to the main program, on this next one it doesn't

def new_winF():
    t = Toplevel(root)
    import tkinter as tk
    
    root_height = 202
    root_width = 456
    screen_width = root.winfo_screenwidth()
    screen_height = root.winfo_screenheight()
    x_cordinate = int((screen_width/2) - (root_width/2))
    y_cordinate = int((screen_height/2) - (root_height/2))
    root.geometry("{}x{}+{}+{}".format(root_width, root_height, x_cordinate, y_cordinate))

    var = StringVar()
    label = Label( root, textvariable=var, relief=RAISED )

    var.set("""     NeneBot v1.1 Beta
    ---------------------------------------------------------------------------------------------
    1º reparação de todos os bugs reportados
    *********************************************************************************************
    2º melhorias na estrutura da App
    *********************************************************************************************
    3º melhoria na App em termos de facilidade de leitura
    *********************************************************************************************
    4º adição de calculadora de IP
    *********************************************************************************************
    5º organizador de ficheiros (um clique e todos os ficheiros em pasta)
    *********************************************************************************************
    6º adição de outras funcionalidades mediante sugestões reportadas""")

    label.pack()


Attached Files Thumbnail(s)
   
Quote
#6
I'm not great with tkinter but i think your code should be more along the lines of the following.
I don't totally understand tkinters tk.TK(), in WxPython you create a wx.App() but they don't quite seem to be the same thing,
so i may have some of the root stuff mixed up, someone who knows tkinter may be able to tidy that up, but it works.
import tkinter as tk

class NextVersionFrame(tk.Frame):
    def __init__(self, root):
        super().__init__(root)
        self.root = root

# def next_version():
#     Utilizador.set('')
#     bot.set('')
#     import tkinter as tk
        self.failures = 0
        self.failure_max = 3
        self.passwords = [('alfa', 'nenebot'), ('alfa1', 'nenebot1'),
                 ('alfa2', 'nenebot2'), ('alfa3', 'nenebot3'),
                 ('alfa4', 'nenebot4'), ('alfa5', 'nenebot5')]



        root_height = 160
        root_width = 300
        self.root.title('Login Obrigat�rio')
        screen_width = self.root.winfo_screenwidth()
        screen_height = self.root.winfo_screenheight()
        x_cordinate = int((screen_width/2) - (root_width/2))
        y_cordinate = int((screen_height/2) - (root_height/2))
        self.root.geometry("{}x{}+{}+{}".format(
            root_width, root_height, x_cordinate, y_cordinate))

        self.user = self.make_entry("Utilizador:", 16, show='')
        self.password = self.make_entry("Password:", 16, show="*")

        b = tk.Button(
            self, borderwidth=4, text="Login", width=10, pady=8,
            command=self.check_password)
        b.pack(side=tk.BOTTOM)
        self.password.bind('<Return>', self.enter)

        self.user.focus_set()
        self.root.resizable(False,False)
        self.pack()

    def make_entry(self, caption, width=None, **options):
        tk.Label(self, text=caption).pack(side=tk.TOP)
        entry = tk.Entry(self, **options)
        if width:
            entry.config(width=width)
        entry.pack(side=tk.TOP, padx=10, fill=tk.BOTH)
        return entry

    def enter(self, event):
        self.check_password()

    def check_password(self):
        """ Collect 1's for every failure and quit program in case of failure_max failures """
        

        if (self.user.get(), self.password.get()) in self.passwords:
            self.user = self.user.get()
            NewWinFrame(self)
        self.failures += 1
        if self.failures == self.failure_max:
            self.destroy()
            raise SystemExit('Acesso Recusado')
        else:
            root.title('Tente novamente.')
        

class NewWinFrame(tk.Toplevel):
    def __init__(self, parent):
        super(NewWinFrame, self).__init__(parent)

# def new_winF():
#     from tkinter import *
 
#     root = Tk()
        root_height = 202
        root_width = 456
        screen_width = root.winfo_screenwidth()
        screen_height = root.winfo_screenheight()
        x_cordinate = int((screen_width/2) - (root_width/2))
        y_cordinate = int((screen_height/2) - (root_height/2))
        self.geometry("{}x{}+{}+{}".format(root_width, root_height, x_cordinate, y_cordinate))
     
        var = tk.StringVar()
        label = tk.Label( self, textvariable=var, relief=tk.RAISED )
     
        var.set("""     NeneBot v1.1 Beta
        ---------------------------------------------------------------------------------------------
        1� repara��o de todos os bugs reportados
        *********************************************************************************************
        2� melhorias na estrutura da App
        *********************************************************************************************
        3� melhoria na App em termos de facilidade de leitura
        *********************************************************************************************
        4� adi��o de calculadora de IP
        *********************************************************************************************
        5� organizador de ficheiros (um clique e todos os ficheiros em pasta)
        *********************************************************************************************
        6� adi��o de outras funcionalidades mediante sugest�es reportadas""")
     
        label.pack()
        self.resizable(False,False)


if __name__ == '__main__':
    root = tk.Tk()
    next_version_frame = NextVersionFrame(root)
    root.mainloop()
Quote
#7
(Apr-23-2019, 09:18 PM)Yoriz Wrote: I'm not great with tkinter but i think your code should be more along the lines of the following. I don't totally understand tkinters tk.TK(), in WxPython you create a wx.App() but they don't quite seem to be the same thing, so i may have some of the root stuff mixed up, someone who knows tkinter may be able to tidy that up, but it works.
import tkinter as tk class NextVersionFrame(tk.Frame): def __init__(self, root): super().__init__(root) self.root = root # def next_version(): # Utilizador.set('') # bot.set('') # import tkinter as tk self.failures = 0 self.failure_max = 3 self.passwords = [('alfa', 'nenebot'), ('alfa1', 'nenebot1'), ('alfa2', 'nenebot2'), ('alfa3', 'nenebot3'), ('alfa4', 'nenebot4'), ('alfa5', 'nenebot5')] root_height = 160 root_width = 300 self.root.title('Login Obrigat�rio') screen_width = self.root.winfo_screenwidth() screen_height = self.root.winfo_screenheight() x_cordinate = int((screen_width/2) - (root_width/2)) y_cordinate = int((screen_height/2) - (root_height/2)) self.root.geometry("{}x{}+{}+{}".format( root_width, root_height, x_cordinate, y_cordinate)) self.user = self.make_entry("Utilizador:", 16, show='') self.password = self.make_entry("Password:", 16, show="*") b = tk.Button( self, borderwidth=4, text="Login", width=10, pady=8, command=self.check_password) b.pack(side=tk.BOTTOM) self.password.bind('<Return>', self.enter) self.user.focus_set() self.root.resizable(False,False) self.pack() def make_entry(self, caption, width=None, **options): tk.Label(self, text=caption).pack(side=tk.TOP) entry = tk.Entry(self, **options) if width: entry.config(width=width) entry.pack(side=tk.TOP, padx=10, fill=tk.BOTH) return entry def enter(self, event): self.check_password() def check_password(self): """ Collect 1's for every failure and quit program in case of failure_max failures """ if (self.user.get(), self.password.get()) in self.passwords: self.user = self.user.get() NewWinFrame(self) self.failures += 1 if self.failures == self.failure_max: self.destroy() raise SystemExit('Acesso Recusado') else: root.title('Tente novamente.') class NewWinFrame(tk.Toplevel): def __init__(self, parent): super(NewWinFrame, self).__init__(parent) # def new_winF(): # from tkinter import * # root = Tk() root_height = 202 root_width = 456 screen_width = root.winfo_screenwidth() screen_height = root.winfo_screenheight() x_cordinate = int((screen_width/2) - (root_width/2)) y_cordinate = int((screen_height/2) - (root_height/2)) self.geometry("{}x{}+{}+{}".format(root_width, root_height, x_cordinate, y_cordinate)) var = tk.StringVar() label = tk.Label( self, textvariable=var, relief=tk.RAISED ) var.set(""" NeneBot v1.1 Beta --------------------------------------------------------------------------------------------- 1� repara��o de todos os bugs reportados ********************************************************************************************* 2� melhorias na estrutura da App ********************************************************************************************* 3� melhoria na App em termos de facilidade de leitura ********************************************************************************************* 4� adi��o de calculadora de IP ********************************************************************************************* 5� organizador de ficheiros (um clique e todos os ficheiros em pasta) ********************************************************************************************* 6� adi��o de outras funcionalidades mediante sugest�es reportadas""") label.pack() self.resizable(False,False) if __name__ == '__main__': root = tk.Tk() next_version_frame = NextVersionFrame(root) root.mainloop()

Much appreciated, i will try and test it right away.
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  tkinter window and turtle window error 1885 3 165 Nov-02-2019, 12:18 PM
Last Post: 1885
  [Tkinter] Extrakt a Variable from a closed tkinter window hWp 5 296 Aug-23-2019, 09:01 PM
Last Post: woooee
  [Tkinter] Tkinter window pop up again when i click button Orimura_Sandy 1 542 May-12-2019, 08:17 PM
Last Post: joe_momma
  tkinter- adding a new window after clicking a button built on the gui ShashankDS 2 743 Apr-18-2019, 12:48 PM
Last Post: ShashankDS
  [Tkinter] Tkinter window minimize,appear frequency 5 1,925 Dec-28-2018, 02:02 PM
Last Post: frequency
  [Tkinter] Tkinter window issue frequency 4 655 Dec-24-2018, 10:49 AM
Last Post: frequency
  top level window juliolop 3 882 Nov-07-2018, 02:52 PM
Last Post: juliolop
  Python, Tkinter, can only view partial GUI when called from another window Philia 1 904 Jul-17-2018, 06:38 PM
Last Post: woooee
  How to add gif to tkinter window? Nwb 0 901 Jul-04-2018, 11:56 AM
Last Post: Nwb
  [Tkinter] Is there any way to bind keys to a gui window in tkinter? Nwb 1 853 Jun-21-2018, 06:04 PM
Last Post: Larz60+

Forum Jump:


Users browsing this thread: 1 Guest(s)