Все экземпляры являются дочерними элементами одного окна, этот класс должен иметь возможность манипулировать дату в виджете DateEntry следующим образом:
- Если она инициируется как checkNdate(window, "Fecha de solicitud", ""), тогда экземпляр должен отображать флажок, установленный в FALSE, и НЕ ПОКАЗЫВАТЬ виджет DateEntry
- Если он инициируется как определенная дата, например checkNdate( window, "Fecha de solicitud", "16-05-2024"), флажок должен быть установлен как TRUE и ПОКАЗАТЬ виджет DateEntry в выбранную дату.
- Если виджет был загружен в первом случае, как только мы установим флажок и установим для него значение TRUE, должен появиться виджет DateEntry, и пользователь должен выбрать дату.
- Если для флажка установлено значение FALSE после того, как оно установлено в TRUE, виджет DateEntry должен быть скрыт.
- Целью этого является то, что другая кнопка будет подключаться к таблице SQL и отправлять даты из виджетов DateEntry, для соответствующего флажка которых установлено значение TRUE, или отправлять None, если флажок установлен FALSE.
from tkinter import ttk
from tkcalendar import DateEntry
class checkNdate(ttk.Frame):
def __init__(self, parent: ttk.Widget, checkButton_name: str, date_or_none):
super().__init__(master=parent)
# layout of the widgets
self.rowconfigure(0, weight = 1)
self.columnconfigure((0 , 1), weight = 1, uniform = "a")
# set the checkbutton
ttk.Checkbutton(master = self, text = checkButton_name, ).grid(row = 0, column = 0, sticky = "nsew")
# show the calendar if date exists
if date_or_none != (None or ""):
# code to check in which case we are, ignore this print
print("date is :", date_or_none)
# calling this DateEntry widget creates the error.
cal = DateEntry(master=parent)
cal.grid(row = 0, column = 1)
cal.set_date(date_or_none)
#DateEntry.set_date(date_or_none)
else:
# code to check in which case we are, ignore this print
print("date is :", date_or_none)
self.pack()
# this next code only is for testing purposes
window = tk.Tk()
window.title = "check n' date"
window.geometry("300x300")
# widgets for testing purposes
checkNdate(window, "Fecha de solicitud", "")
checkNdate(window, "Fecha de solicitud", "16-05-2024")
# run
window.mainloop()
Я знаю, что до сих пор код не привязывал флажок к созданию или уничтожению виджета DateEntry, но моя текущая проблема заключается в том, что эта ошибка появляется, когда я пытаюсь загрузить DateEntry. на этих двух примерах. Я думаю, это проблема наследования классов, но я не уверен
date is :
date is : 16-05-2024
Traceback (most recent call last):
File "/Users/hidari/Coding/cs50py/project/prueba_class_check_calendar.py", line 42, in
checkNdate(window, "Fecha de solicitud", "16-05-2024")
File "/Users/hidari/Coding/cs50py/project/prueba_class_check_calendar.py", line 24, in __init__
cal = DateEntry(master=parent)
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/tkcalendar/dateentry.py", line 123, in __init__
self._top_cal = tk.Toplevel(self)
^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/tkinter/__init__.py", line 2695, in __init__
self.title(root.title())
^^^^^^^^^^^^
TypeError: 'str' object is not callable
Подробнее здесь: https://stackoverflow.com/questions/785 ... ther-class