【问题标题】:How to re-evaluate state of checkbutton in tkinter如何在 tkinter 中重新评估检查按钮的状态
【发布时间】:2017-02-05 04:53:27
【问题描述】:

我似乎无法重新评估复选框的状态。在一个简单的解释中,我可以执行以下操作

import tkinter
from tkinter imprt ttk
root = Tk()
ck = ttk.Checkbutton(root, text='Checkbox')
ck.state(['!alternate'])
ck.state(['selected'])

if ck.instate(['selected']):
    # do something
elif ck.instate(['!selected']):
    # do something else

root.mainloop()

这会将检查按钮设置为“选中”状态,然后运行if 语句,因为它已被选中。但是,如果我取消选中该复选框,它不会重新评估复选框的状态并运行 elif 语句。我看过 root.update()root.update_idletasks 之类的东西,但我很确定这不是我想要的。

感谢您的帮助!

附带说明,我使用的是 Python 3.x

【问题讨论】:

  • 这个if/else 只执行一次 - 在开始时。如果您必须在运行程序期间执行某些操作,则将函数分配/绑定到Checkbutton

标签: python-3.x checkbox tkinter ttk


【解决方案1】:

您的if/else 仅在开始时执行一次。如果您在运行程序期间必须执行某些操作,则将函数分配给Checkbutton

 ttk.Checkbutton( ..., command=function_name)

点击checkbutton就会执行

import tkinter as tk
from tkinter import ttk

# --- functions ---

def clicked():
    if ck.instate(['selected']):
        print('selected')
    elif ck.instate(['!selected']):
        print('not selected')

# --- main ---

root = tk.Tk()

ck = ttk.Checkbutton(root, text='Checkbox', command=clicked)
ck.pack()

root.mainloop()

【讨论】:

  • 这很有道理,不敢相信我没有想到这一点。谢谢!
  • 顺便说一句:可能只有ButtonCheckbuttoncommand= - 其他小部件需要widget.bind(event_type, function_name) - 即。 root.bind('<Key>', on_keypress)
猜你喜欢
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多