-1

我正在写,其中一部分是一个功能程序,它在 tkinter 中禁用或启用日历,具体取决于是否选中了复选框。这是我的代码到目前为止的样子:

from tkinter import *
from tkcalendar import *


    class Checkbox:
        def __init__(self, master):
            self.checkbuttonVar = IntVar()
            self.calendarLabel = Checkbutton(master, text="Set deadline:", variable=self.checkbuttonVar,
                                             command=self.checkcheck)
            self.calendarLabel.grid(row=5, column=0, pady=10, sticky=W)

            self.datePick = Calendar(master, date_pattern="mm/dd/yyyy")
            self.datePick.grid(row=6, column=0, columnspan=6, sticky=N + W + S + E)

        def checkcheck(self):
            if self.checkbuttonVar.get() == True:
                self.datePick(state='disabled')
            else:
                print('Not check')
    root = Tk()

    b = Checkbox(root)

    root.mainloop()

当我选中复选框时,我得到一个 TypeError: 'Calendar' object is not callable (我意识到这可能是最愚蠢的做法,但这是我第一次真正尝试做类似的事情,所以请多多包涵) . 是否有任何选项可以更改日历的状态?我带来的唯一选择是:

def checkcheck(self):
    if self.checkbuttonVar.get() == True:
        self.datePick = Calendar(root, date_pattern="mm/dd/yyyy")
        self.datePick.grid(row=6, column=0, columnspan=6, sticky=N + W + S + E)
    else:
        self.datePick = Calendar(root, date_pattern="mm/dd/yyyy", state='disabled')
        self.datePick.grid(row=6, column=0, columnspan=6, sticky=N + W + S + E)

它有点像它应该做的,但我对这个解决方案不满意,我可以看到每次我检查不是很好看的按钮时程序都会刷新。我将非常感谢任何建议!

4

1 回答 1

1

我是个白痴,我所要做的就是:

def checkcheck(self):
    if self.checkbuttonVar.get() != True:
        self.datePick.configure(state="disabled")
    else:
        self.datePick.configure(state="normal")

它按预期工作。

于 2020-03-18T17:56:45.570 回答