简体   繁体   中英

Can't modify global variable in python

from tkinter import *
import time

check = False

window = Tk()

window.geometry("1920x1080")

def typeTime():
    hour   = int(time.strftime("%H"))
    minute = int(time.strftime("%M"))
    second = int(time.strftime("%S"))
    hourInput2 = int(hourInput.get())
    minuteInput2 = int(minuteInput.get())
    secondInput2 = int(secondInput.get())
    
    if(hour == hourInput2 and minute == minuteInput2 and second == secondInput2):
        print("now")
    global check
    check = True

canvas = Canvas(window, width = 1980, height = 1020)

canvas.pack()

hourInput = StringVar()
minuteInput = StringVar()
secondInput = StringVar()

setHour = Entry(window, text = hourInput, font = (20)).place(x = 100, y = 20, width = 100, height = 40)

setMinute = Entry(window, text = minuteInput, font = (20)).place(x = 300, y = 20, width = 100, height = 40)

setSecond = Entry(window, text = secondInput, font = (20)).place(x = 500, y = 20, width = 100, height = 40)

canvas.create_text(60, 40, text = "Hour: ", font = (20))

canvas.create_text(260, 40, text = "Minute: ", font = (20))

canvas.create_text(460, 40, text = "Second: ", font = (20))

submit = Button(text = "Submit", height = 2, width = 10, font = (10), command = typeTime)

submit.place(x = 100, y = 100)

if check == True:
    print("Pressed")
    submit.config(relief = SUNKEN)

window.mainloop()

I'm trying to make a button to stay pressed, so I tried to make this happens with a global variable. The variable check is initially False, but when typeTime() is called via the submit object it should change its value in True and when check will be tested later to keep my button pressed using config method.

What am I doing wrong, as neither the button is still pressed nor the message "Pressed" is displayed in the console?

The window.mainloop() is the internal loop inside object window , not in your script so that is why it didn't work. You need to add the action inside the function typeTime :

from tkinter import *
import time

if __name__=='__main__':
    check = False

    window = Tk()

    window.geometry("1920x1080")

    def typeTime(button):
        hour   = int(time.strftime("%H"))
        minute = int(time.strftime("%M"))
        second = int(time.strftime("%S"))
        hourInput2 = int(hourInput.get())
        minuteInput2 = int(minuteInput.get())
        secondInput2 = int(secondInput.get())

        if(hour == hourInput2 and minute == minuteInput2 and second == secondInput2):
            print("now")
#         global check
#         check = True
        print('Pressed')
        button.config(relief=SUNKEN)


    canvas = Canvas(window, width = 1980, height = 1020)
    
    canvas.pack()

    hourInput = StringVar()
    minuteInput = StringVar()
    secondInput = StringVar()

    setHour = Entry(window, text = hourInput, font = (20)).place(x = 100, y = 20, width = 100, height = 40)

    setMinute = Entry(window, text = minuteInput, font = (20)).place(x = 300, y = 20, width = 100, height = 40)

    setSecond = Entry(window, text = secondInput, font = (20)).place(x = 500, y = 20, width = 100, height = 40)

    canvas.create_text(60, 40, text = "Hour: ", font = (20))

    canvas.create_text(260, 40, text = "Minute: ", font = (20))

    canvas.create_text(460, 40, text = "Second: ", font = (20))

    submit = Button(text = "Submit", height = 2, width = 10, font = (10))
    submit.config(command = lambda submit=submit:typeTime(submit))

    submit.place(x = 100, y = 100)
    
#     if check == True:
#         print("Pressed")
#         submit.config(relief = SUNKEN)

    window.mainloop()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM