Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

I am having trouble with a button in my first gui application

def play():
    wind2 = tk.Toplevel()
    v = tk.IntVar()
    ques = ["Identify the least stable ion amongst the following.",
            "The set representing the correct order of first ionisation potential is",
            "The correct order of radii is"]
    o1 = ["", "Li⁺", "Be⁻", "B⁻", "C⁻"]
    o2 = ["", "K > Na > Li", "Be > Mg >Ca", "B >C > N", "Ge > Si >C"]
    o3 = ["", "N < Be < B", "F⁻ < O²⁻ < N³⁻", "Na < Li < K", "Fe³⁺ < Fe⁴⁺ < Fe²⁺"]
    choice=[o1, o2, o3]
    qsn = tk.Label(wind2, text = ques[0])
    qsn.pack()

    

    def correct():
        selected=v.get()
        print(selected)
        
    r1 = tk.Radiobutton(wind2, text = o1[1], variable = v, value = 1, command=correct)
    r2 = tk.Radiobutton(wind2, text = o1[2], variable = v, value = 2, command=correct)
    r3 = tk.Radiobutton(wind2, text = o1[3], variable = v, value = 3, command=correct)
    r4 = tk.Radiobutton(wind2, text = o1[4], variable = v, value = 4, command=correct)
    r1.pack()
    r2.pack()
    r3.pack()
    r4.pack()

    def nxt():
        n = random.randint(1,2)
        qsn['text'] = ques[n]
        r1['text'] = choice[n][1]
        r2['text'] = choice[n][2]
        r3['text'] = choice[n][3]
        r4['text'] = choice[n][4]
    nbut = tk.Button(wind2, text = "next", command = lambda: nxt)
    nbut.pack()

I am trying to change the question using the button nbut, and it won’t work. I tried using randint outside the function and passing it but then the button works only once

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Change

nbut = tk.Button(wind2, text = "next", command = lambda: nxt)

To this.

nbut = tk.Button(wind2, text = "next", command = nxt) # Recommended
## OR

# nbut = tk.Button(wind2, text = "next", command = lambda: nxt())

The explanation is simple.

You are not calling the nxt function when nbut click Instead you are calling the lambda function. But, because you put the function name inside the lambda function without parentheses the nxt function never executes.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading