Окно Tkinter GUI не распознается другими функциями - PullRequest
0 голосов
/ 06 марта 2020

Я делаю простую программу, которая сохраняет чье-то имя и адрес электронной почты в файле. Я кодирую в python без дела. Мой код:

import random
from tkinter import *

num = (random.randint(1,3))
NOSa = open("CN.txt", "r")
NOS = (NOSa.read())
NOSa.close()
NOSa = open("CN.txt", "w")
if num == ("1"):
    NOS = NOS + "a"
elif num == ("2"):
    NOS = NOS + "v"
else:
    NOS = NOS + "x"
NOSa.write(NOS)
NOSa.close()

def efg():
        window2.destroy()
        window2.mainloop()
        exit()

def abc():
    name = entry.get()
    email = entry2.get()
    window.destroy()
    window2 = Tk()
    window2.title("OP")
    OT = Text(window2, width=30, height=10, wrap=WORD, background="yellow")
    OT.grid(row=0, column=0, sticky=W)
    OT.delete(0.0, END)
    MT = "We have logged your details " + name
    MT2 = ". We have a file saved called " + NOS
    MT3 = ". Go check it out!"
    OT.insert(END, MT)
    OT.insert(END, MT2)
    OT.insert(END, MT3)
    new_file = open(NOS, "a")
    new_file.write("This is ")
    new_file.write(name)
    new_file.write(" email address.")
    new_file.write(" ")
    new_file.write(email)
    button2 = Button(window2, text="OK", width=5, command=efg)
    button2.grid(row=1, column=0, sticky=W)
    window.mainloop()
    window2.mainloop()

window = Tk()
window.title("EN")
label = Label(window, text="Enter your name: ")
label.grid(row=0, column=0, sticky=W)
entry = Entry(window, width=20, bg="light green")
entry.grid(row=1, column=0, sticky=W)
label2 = Label(window, text="Enter your email address: ")
label2.grid(row=2, column=0, sticky=W)
entry2 = Entry(window, width=25, bg="light green")
entry2.grid(row=3, column=0, sticky=W)
button = Button(window, text="SUBMIT", width=5, command=abc)
button.grid(row=4, column=0, sticky=W)
window.mainloop()

Когда я запускаю код, появляются мои первые 2 поля, и они отлично выполняют свой код. Однако, когда я нажимаю кнопку «ОК», я получаю эту ошибку: NameError: имя 'window2' не определено

Я использую python -idle.

1 Ответ

1 голос
/ 06 марта 2020

Вы можете сделать windows2 global

window2 = None

def efg():
        global window2

и позже

def abc():
    global window2
...