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