繁体   English   中英

带有单选按钮的 Python tkinter 动态输入框

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM