[英]Python tkinter dynamic entry box with Radiobutton
我想在 tkinter UI 中动态启用与 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)
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”而动态更新。
In this problem, You have to just add the function command to Option 1 also.So, whenever the Radiobutton is checked, the function will called and condition checked every time.
此外,您必须在 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()
解决此问题的一个简单更改是您需要为两个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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.