首页 > 解决方案 > 无论我更改单选按钮多少次,如何仅获取相应的输入框?

问题描述

from tkinter import *

win=Tk()

var = StringVar()

l = Label(win, bg='white', width=15)

l.grid(row=17,column=1,padx=10, pady=10, sticky='w')

def print1_selection():

    if var.get()=="Number":

        lab1= Label(win, text="Enter a number").grid(row=4, column=0)

        ent1=Entry(win).grid(row=4, column=1)

        l.config(text='you have selected ' + var.get())   

    elif var.get()=="Alphabet":

        lab21= Label(win, text="Enter an alphabet").grid(row=5, column=0)

        ent21=Entry(win).grid(row=5, column=1)

        l.config(text='you have selected ' + var.get())

lbl4=Label(win, text="Select One", bg="crimson", fg="white", font=("times new 
roman",15,"bold")).grid(row=1, column=0, padx=10, pady=10, sticky='w')

r1 = Radiobutton(win, text='Number',variable=var, value='Number', command=print1_selection, width=22)

r1.grid(row=2,column=0,padx=10, pady=10)

r2 = Radiobutton(win, text='Alphabet', variable=var, value='Alphabet', command=print1_selection, width=22)

r2.grid(row=2,column=1,padx=10, pady=10)

win.mainloop()

在这段代码中,我希望当我选择radiobutton数字时,只输入一个数字,其他数字相同。但问题是,当我在选择字母后选择数字时,它会同时显示。我只需要选择的一个并立即消除另一个。

标签: pythontkinterdynamicradio-buttonlabel

解决方案


这就是我处理这个问题的方式:

from tkinter import Tk, StringVar, Label, Frame, Entry, Radiobutton


def print1_selection():
    for widget in entry_frame.winfo_children():
        widget.destroy()

    value = var.get()
    lbl.config(text='You have selected ' + value)

    if value == "Number":
        Label(entry_frame, text="Enter a number").grid(row=0, column=0)
        Entry(entry_frame).grid(row=0, column=1)

    elif value == "Alphabet":
        Label(entry_frame, text="Enter an alphabet").grid(row=0, column=0)
        Entry(entry_frame).grid(row=0, column=1)


win = Tk()

var = StringVar(value=0)

entry_frame = Frame(win)
entry_frame.grid(row=2, column=0, columnspan=2)

lbl = Label(win, bg='white', width=20)
lbl.grid(row=3, column=0, columnspan=2, padx=10, pady=10, sticky='w')

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')
Radiobutton(win, text='Number', variable=var, value='Number', command=print1_selection, width=22).grid(row=1, column=0, padx=10, pady=10)
Radiobutton(win, text='Alphabet', variable=var, value='Alphabet', command=print1_selection, width=22).grid(row=1, column=1, padx=10, pady=10)

win.mainloop()

如您所见,如果您不打算在任何地方使用小部件实例,您不必将其分配给变量。也不需要在两个语句中配置标签,因为无论如何都会这样做,所以只需在开始时进行,行也从 0 开始。框架有助于组织小部件。此外,如果您不希望选择任何一个单选按钮,请将变量设置为 0。


推荐阅读