JavaScript
x
41
41
1
from tkinter import *
2
3
win=Tk()
4
5
var = StringVar()
6
7
l = Label(win, bg='white', width=15)
8
9
l.grid(row=17,column=1,padx=10, pady=10, sticky='w')
10
11
def print1_selection():
12
13
if var.get()=="Number":
14
15
lab1= Label(win, text="Enter a number").grid(row=4, column=0)
16
17
ent1=Entry(win).grid(row=4, column=1)
18
19
l.config(text='you have selected ' + var.get())
20
21
elif var.get()=="Alphabet":
22
23
lab21= Label(win, text="Enter an alphabet").grid(row=5, column=0)
24
25
ent21=Entry(win).grid(row=5, column=1)
26
27
l.config(text='you have selected ' + var.get())
28
29
lbl4=Label(win, text="Select One", bg="crimson", fg="white", font=("times new
30
roman",15,"bold")).grid(row=1, column=0, padx=10, pady=10, sticky='w')
31
32
r1 = Radiobutton(win, text='Number',variable=var, value='Number', command=print1_selection, width=22)
33
34
r1.grid(row=2,column=0,padx=10, pady=10)
35
36
r2 = Radiobutton(win, text='Alphabet', variable=var, value='Alphabet', command=print1_selection, width=22)
37
38
r2.grid(row=2,column=1,padx=10, pady=10)
39
40
win.mainloop()
41
In this code I want that when I select radiobutton
number, only enter a number should appear and same for the other.
But the problem is that when I select number after selecting alphabet, it shows both. I need only the selected one and eliminate the other instantly.
Advertisement
Answer
This is how I would approach this issue:
JavaScript
1
35
35
1
from tkinter import Tk, StringVar, Label, Frame, Entry, Radiobutton
2
3
4
def print1_selection():
5
for widget in entry_frame.winfo_children():
6
widget.destroy()
7
8
value = var.get()
9
lbl.config(text='You have selected ' + value)
10
11
if value == "Number":
12
Label(entry_frame, text="Enter a number").grid(row=0, column=0)
13
Entry(entry_frame).grid(row=0, column=1)
14
15
elif value == "Alphabet":
16
Label(entry_frame, text="Enter an alphabet").grid(row=0, column=0)
17
Entry(entry_frame).grid(row=0, column=1)
18
19
20
win = Tk()
21
22
var = StringVar(value=0)
23
24
entry_frame = Frame(win)
25
entry_frame.grid(row=2, column=0, columnspan=2)
26
27
lbl = Label(win, bg='white', width=20)
28
lbl.grid(row=3, column=0, columnspan=2, padx=10, pady=10, sticky='w')
29
30
Label(win, text="Select One", bg="crimson", fg="white", font=("times new roman", 15, "bold")).grid(row=0, column=0, padx=10, pady=10, sticky='w')
31
Radiobutton(win, text='Number', variable=var, value='Number', command=print1_selection, width=22).grid(row=1, column=0, padx=10, pady=10)
32
Radiobutton(win, text='Alphabet', variable=var, value='Alphabet', command=print1_selection, width=22).grid(row=1, column=1, padx=10, pady=10)
33
34
win.mainloop()
35
As You can see if You don’t plan on using the widgets instance anywhere You don’t have to assign it to a variable. Also no need to configure label in both statements since that will be done anyways so just do it at the beginning, also rows start from 0 too. Frames help with organizing widgets. Also if You want neither of the radiobuttons selected set the variable to 0.