Home > OS >  Can't get code to work with new window button - Tkinter
Can't get code to work with new window button - Tkinter

Time:11-04

I'm new to Python and Tkinter and am trying to make a window, that has a button, which when pressed, opens code for a Calculator in a new window, I have the calculator code ready and it works on its own, but when I copied it and tried to get it to work with the new window, it just opens an empty window.

The open new window code was made from this tutorial: Open a new Window with a button in Python-Tkinter.

The calculator was made from FreeCodeCamp.org's tkinter course, it had a lot of code that included e.get, thinking this was the problem I changed it to newWindow.

from tkinter import *
from tkinter.ttk import *
 
master = Tk()
 
master.geometry("200x200")
 
 
def openNewWindow():
    global newWindow
    newWindow = Toplevel(master)
    newWindow.title("New Window")
    newWindow = Entry(width=35, borderwidth=5)
    newWindow.grid(row=0, column=0, columnspan=3, padx=10, pady=10)
    
    def button_click(number):
        current = newWindow.get()
        newWindow.delete(0, END)
        newWindow.insert(0, str(current)   str(number))

    def button_clear():
        newWindow.delete(0, END)

    def button_add():
        first_number = newWindow.get()
        global f_num
        global math
        math = "addition"
        f_num = int(first_number)
        newWindow.delete(0, END)

    def button_equal():
        second_number = newWindow.get()
        newWindow.delete(0, END)
    
        if math == "addition":
            newWindow.insert(0, f_num   int(second_number))

        if math == "subtraction":
            newWindow.insert(0, f_num - int(second_number))

        if math == "multiplication":
            newWindow.insert(0, f_num * int(second_number))

        if math == "devision":
            newWindow.insert(0, f_num /  int(second_number))

    def button_subtract():
        first_number = newWindowe.get()
        global f_num
        global math
        math = "subtraction"
        f_num = int(first_number)
        newWindow.delete(0, END)

    def button_multiply():
        first_number = newWindow.get()
        global f_num
        global math
        math = "multiplication"
        f_num = int(first_number)
        newWindow.delete(0, END)

    def button_devide():
        first_number = newWindow.get()
        global f_num
        global math
        math = "devision"
        f_num = int(first_number)
        newWindow.delete(0, END)

    button_1 = Button(root, text="1", padx=40, pady=20, command=lambda: button_click(1))
    button_2 = Button(root, text="2", padx=40, pady=20, command=lambda: button_click(2))
    button_3 = Button(root, text="3", padx=40, pady=20, command=lambda: button_click(3))
    button_4 = Button(root, text="4", padx=40, pady=20, command=lambda: button_click(4))
    button_5 = Button(root, text="5", padx=40, pady=20, command=lambda: button_click(5))
    button_6 = Button(root, text="6", padx=40, pady=20, command=lambda: button_click(6))
    button_7 = Button(root, text="7", padx=40, pady=20, command=lambda: button_click(7))
    button_8 = Button(root, text="8", padx=40, pady=20, command=lambda: button_click(8))
    button_9 = Button(root, text="9", padx=40, pady=20, command=lambda: button_click(9))
    button_0 = Button(root, text="0", padx=40, pady=20, command=lambda: button_click(0))
    button_add = Button(root, text=" ", padx=39, pady=20, command=button_add)
    button_equal = Button(root, text="=", padx=91, pady=20, command=button_equal)
    button_clear = Button(root, text="C", padx=91, pady=20, command=button_clear)

    button_subtract = Button(root, text="-", padx=41, pady=20, command=button_subtract)
    button_multiply = Button(root, text="*", padx=40, pady=20, command=button_multiply)
    button_devide = Button(root, text="/", padx=41, pady=20, command=button_devide)

    # Put the buttons on the screen
    #myButton = Button(root, text="What is your name?", command=myClick)

    button_1.grid(row=3, column=0)
    button_2.grid(row=3, column=1)
    button_3.grid(row=3, column=2)

    button_4.grid(row=2, column=0)
    button_5.grid(row=2, column=1)
    button_6.grid(row=2, column=2)

    button_7.grid(row=1, column=0)
    button_8.grid(row=1, column=1)
    button_9.grid(row=1, column=2)

    button_0.grid(row=4, column=0)
    button_clear.grid(row=4, column=1, columnspan=2)
    button_add.grid(row=5, column=0)
    button_equal.grid(row=5, column=1, columnspan=2)

    button_subtract.grid(row=6, column=0)
    button_multiply.grid(row=6, column=1)
    button_devide.grid(row=6, column=2)
 
 
label = Label(master,
              text ="Window")
 
label.pack(pady = 10)
 
btn = Button(master,
             text ="Calculator",
             command = openNewWindow)
btn.pack(pady = 10)
 
mainloop()

CodePudding user response:

Watch the terminal when you're running your code. When the window stops responding, it usually means python encountered an error and it's printed in the terminal. Looks like you've still got some work to do to migrate your code over from being standalone - root is not defined anywhere. Also I removed from tkinter.ttk import * which got rid of a bunch of unknown options errors for me.

CodePudding user response:

Without actually doing the whole thing (although I did and I learned something), here is a skeleton:

def openNewWindow():
    # Toplevel window uses pack manager, not grid manager
    newWindow = Toplevel(master)
    newWindow.title(...)

    # Create a frame as the only object in Toplevel.
    # The frame will contain the other objects and use the grid manager.
    frame = Frame(newWindow)
    frame.pack()

    # Create items in the frame and grid them
    entry = Entry(frame, width=35)
    entry.grid(row=0, ...)
    button_1 = Button(frame, text="1", command=...)
    button_1.grid(row=3, column=0, padx=4, pady=2)
    button_2 = Button(...)
    button_2.grid(...)
    ...

For manipulating the content of the text entry box:

    entry.get()
    entry.delete(0, END)
    entry.insert(0, str)
  • Related