簡體   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