繁体   English   中英

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

[英]Python Tkinter: Abort Radio Button in command callback

我试图在我的 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后,即使用户在对话框上按no,第三个选项仍然会被选中。 这可能会令人困惑,因为这些单选按钮还向用户传达有关编辑器状态的信息。 是否有一种简单的方法可以撤消选择,或者我是否必须自己跟踪变量的先前值?

您只需将dummyvar设置为 0 即可取消选择“Radiobutton”的所有三个选项。 这是对代码末尾的修改:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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