Python Tkinter:在命令回调中中止单选按钮



我正在尝试在我的 Tkinter 应用程序中的一个单选按钮上提供一点额外的安全性。我有一组单选按钮可以在位图编辑器上的位深度之间切换,其中一种模式修改了调色板,因此我想在执行操作之前与用户核实。这是我为说明问题而编写的快速演示:

# Radio Button Abort Test
# Mikumiku747 2019-12-30
import tkinter as tk
import tkinter.messagebox as tkmb
class Application():
def __init__(self):
# Create widgets
self.root = tk.Tk()
self.dummyvar = tk.IntVar(self.root, value=1)
self.radio1 = tk.Radiobutton(self.root, text="Option 1 (Safe)",
command=lambda: self.safecallback(1),
var=self.dummyvar, value=1)
self.radio2 = tk.Radiobutton(self.root, text="Option 2 (Safe)",
command=lambda: self.safecallback(2),
var=self.dummyvar, value=2)
self.radio3 = tk.Radiobutton(self.root, text="Option 3 (Dangerous)",
command=lambda: self.dangercallback(3),
var=self.dummyvar, value=3)
# Widget Layout
self.radio1.pack()
self.radio2.pack()
self.radio3.pack()
def safecallback(self, value):
print("Safe Callback with value", value)
def dangercallback(self, value):
print("Dangerous callback, asking for confirmation:")
# We need to confirm with the user before doing anything which would 
answer = tkmb.askyesno("Perform dangerous action",
"Are you sure you want to perform this action? Unsaved data may be lost!")
if answer:
print("User confirmed, clear things out.")
else:
return

问题是,单击选项3后,即使用户在对话框中按"否",仍将选择第三个选项。这可能会令人困惑,因为这些单选按钮还会向用户传达有关编辑器状态的信息。有没有一种简单的方法来撤消选择,或者我必须自己跟踪变量的先前值?

您只需将dummyvar设置为 0 即可取消选择"单选按钮"的所有三个选项。以下是代码末尾的修改:

if answer:
print("User confirmed, clear things out.")
else:
self.dummyvar.set(0)