Python Tkinter checkbuttons默认在Mac上显示减号

Python Tkinter checkbuttons默认在Mac上显示减号,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我对Mac上默认显示减号的复选框有一个问题: 以下代码用于在labelframe内生成这些代码: for x in ["Why", "Do", "These", "Have", "Minus", "Signs", "On", "Them?", "Clicked once", "Clicked twice"]: check_button = ttk.Checkbutton( check_button_labelframe, text=x, )

我对Mac上默认显示减号的复选框有一个问题:

以下代码用于在labelframe内生成这些代码:

for x in ["Why", "Do", "These", "Have", "Minus", "Signs", "On", "Them?", "Clicked once", "Clicked twice"]:
    check_button = ttk.Checkbutton(
        check_button_labelframe,
        text=x,
    )
    check_button.grid(column=0, row=current_button_row, sticky="W")
    current_button_row += 1
减号是什么意思?我希望它们要么是选中的,要么是空白的(分别如屏幕截图中的“单击一次”和“单击两次”)。我已经尝试提供
variable=somevariable
where

somevariable=tk.IntVar()
somevariable.set(1)
但这并没有改变任何事情。我使用的是ttk。这里的checkbuttons,当使用tk.checkbuttons时,所有的框都是空白的

编辑:更完整的示例:

        cases = {
            "case1": {
                "description": "This is case 1",
                "enabled_or_not": 0,
                "enabled_var": tk.IntVar()
            },
            "case2": {
                "description": "This is case 2",
                "enabled_or_not": 1,
                "enabled_var": tk.IntVar()
            }
        }

        for case in cases.keys():
            case_info = cases[case]
            case_info["enabled_var"].set(case_info["enabled_or_not"])
            check_button = ttk.Checkbutton(
                check_button_labelframe,
                text=case_info["description"],
                variable=case_info["enabled_var"],
                onvalue=1,
                offvalue=0
            )
            check_button.grid(column=0, row=current_button_row, sticky="W")
            current_button_row += 1
这就产生了:

编辑2: 这似乎与Mac如何设置复选框的动画有关,请查看:

编辑1000(MCVE):你们说得对,伙计们,如果我除去复选框以外的所有内容,它就会起作用:

app = tk.Tk()
app.wm_title("MCVE")
app.geometry("320x240")

# Tk checkbuttons
first_var = tk.IntVar()
first_var.set(1)
first_checkbox = tk.Checkbutton(app, text="This should be enabled", variable=first_var, onvalue=1, offvalue=0)
first_checkbox.grid(column=0, row=0, sticky="W")

second_var = tk.IntVar()
second_var.set(0)
second_checkbox = tk.Checkbutton(app, text="This should be disabled", variable=second_var, onvalue=1, offvalue=0)
second_checkbox.grid(column=0, row=1)

# Ttk checkbuttons
third_var = tk.IntVar()
third_var.set(1)
third_checkbox = ttk.Checkbutton(app, text="This should be enabled", variable=third_var, onvalue=1, offvalue=0)
third_checkbox.grid(column=0, row=2)

fourth_var = tk.IntVar()
fourth_var.set(0)
fourth_checkbox = ttk.Checkbutton(app, text="This should be disabled", variable=fourth_var, onvalue=1, offvalue=0)
fourth_checkbox.grid(column=0, row=3)

app.mainloop()


那么它和字典中存储的变量有什么关系吗?

减号是默认状态,在windows上是灰色背景的复选标记


我更喜欢在创建复选框后使用
.deselect()
方法-看起来更好。

您是在循环内部还是在循环外部执行
somevariable=tk.IntVar()
。@Kevin如果有什么不同,它们是在循环外部定义的,作为字典的一个成员。在循环内部,我做
ttk.CheckButton(…,variable=mydict[somevariable])
您是对整个CheckButton组使用相同的IntVar,还是对每个CheckButton使用不同的IntVar?另外,带有“减号”的复选框实际上是(也称为不确定复选框)。这些通常表示您在下面有一个已选中和未选中项目的集合。当然,在这种情况下,它们似乎没有多大意义。@Plasma,如果没有一个按钮,就好像在完全黑暗的房间里寻找东西一样。在缩进中查看-
cases
是某个函数中的局部变量,因此可能所有的
StringVar
都是垃圾收集的。后运行示例。通常,您的
案例必须是全局字典或
Tk
类的成员。