带Radiobutton的Python Tkinter动态输入框

时间:2019-12-23 05:26:54

标签: python tkinter

我想在tkinter UI中动态启用与单选按钮关联的输入框。 下面是我的代码,

from tkinter import *
from tkinter import filedialog
from tkinter.ttk import * 
import tkinter.messagebox
root = Tk()

tkinter.Label(root, text="Choose:").grid(row=1, column=1, sticky=W)
var3 = IntVar(value=1)
Radiobutton(root, text="Option 1", variable=var3, value=1).grid(row=1, column=2, sticky=W)

entry = tkinter.Entry(root,  width="10")
entry.insert(10, 'Text') 
entry.grid(row=5, column=4, sticky=W)
entry.configure(state='disabled')

def naccheck(entry, var3):
    if var3.get() != 2:
        entry.configure(state='disabled')
    else:
        entry.configure(state='normal')

Radiobutton(root, text="Option 2", variable=var3, value=2, command=lambda e=entry, v=var3: naccheck(e,v)).grid(row=5, column=2, sticky=E)
root.mainloop()

唯一的问题是,根据是否选择了“选项2”,输入框不会得到动态更新。

2 个答案:

答案 0 :(得分:1)

在这个问题上, 您也只需将功能命令添加到选项1中。因此,每当选中单选按钮时,都会调用该函数并检查条件。

此外,您还必须创建在tkinter中调用函数的小部件,必须在函数声明后对其进行声明。

这是一个解决方案

from tkinter import *
from tkinter import filedialog
from tkinter.ttk import *
import tkinter.messagebox

root = Tk()

tkinter.Label(root, text="Choose:").grid(row=1, column=1, sticky=W)
var3 = IntVar(value=1)

entry = tkinter.Entry(root,  width="10")
entry.insert(10, 'Text')
entry.grid(row=5, column=4, sticky=W)
entry.configure(state='disabled')

def naccheck(entry, var3):
    if var3.get() != 2:
        entry.configure(state='disabled')
    else:
        entry.configure(state='normal')

rbtn1 = Radiobutton(root, text="Option 1", variable=var3, value=1,command=lambda e=entry, v=var3: naccheck(e,v))
rbtn1.grid(row=1, column=2, sticky=W)

rbtn2 = Radiobutton(root, text="Option 2", variable=var3, value=2, command=lambda e=entry, v=var3: naccheck(e,v))
rbtn2.grid(row=5, column=2, sticky=E)

root.mainloop()

答案 1 :(得分:0)

解决此问题的一个简单更改是,您需要为两个Radiobutton小部件提供相同的函数回调。而且您无需将任何参数传递给回调函数。

from tkinter import *
from tkinter import filedialog
from tkinter.ttk import * 
import tkinter.messagebox

root = Tk()

tkinter.Label(root, text="Choose:").grid(row=1, column=1, sticky=W)

entry = tkinter.Entry(root, width="10")
entry.insert(10, 'Text') 
entry.grid(row=5, column=4, sticky=W)
entry.configure(state='disabled')

var3 = IntVar(value=1)

def naccheck():
    if var3.get() == 2:
        entry.configure(state='normal')
    else:
        entry.configure(state='disable')

# You need to pass the same command function to both the Radiobutton widgets
Radiobutton(root, text="Option 1", variable=var3, value=1, command=naccheck).grid(row=1, column=2, sticky=W)
Radiobutton(root, text="Option 2", variable=var3, value=2, command=naccheck).grid(row=5, column=2, sticky=E)

root.mainloop()