1

我正在尝试为我的日历创建一个单击功能。

class MainWindow():
    
    def __init__(self, app) :
        
        #---------------------------------Initialisation de la page principale------------------------------------
        self.app = app
        self.app.title("Page Principale")

        # Center main window
       #----------------------------------------------------------------
        app_width = 800
        app_height = 600

        screnn_width = app.winfo_screenwidth()
        screnn_heigth = app.winfo_screenheight()

        x = (screnn_width / 2) - (app_width / 2)
        y = (screnn_heigth / 2) - (app_height / 2)

        self.app.geometry(f'{app_width}x{app_height}+{int(x)}+{int(y)}')
       #----------------------------------------------------------------
        self.app.config(background="azure")
        self.app.resizable(0,0)
        self.app.focus_force()
        
        today = datetime.date.today()
        self.cal = Calendar(app, selectmode="day", year=today.year, month=today.month, day=today.day, date_pattern="mm/dd/yyyy")
        self.cal.pack(ipady=20, fill="both", expand=True)        
       
        self.cal.bind('<Double-1>', self.double_click)

这是我的 double_click 函数:

def double_click(self, event):
        print("event double click effectuer")  

问题是我的功能没有执行我希望当我在日历中时,当我双击时,我会出现消息。但仅在日历中,不在应用程序的其余部分中。目标是针对特定的一天,当用户双击时,将打开一个模式窗口,其中包含他单击 Thx 以寻求帮助的当天的许多信息!

4

1 回答 1

1

Calendar部件是由标签填充/覆盖的框架,这就是绑定不起作用的原因,因为双击事件由这些标签而不是日历小部件消耗。

查看代码tkcaender.Calendar,实例变量_calendar(2D 列表)用于存储这些标签。所以你可以绑定<Double-1>这些标签:

for row in self.cal._calendar:
    for lbl in row:
        lbl.bind('<Double-1>', self.double_click)
于 2022-03-01T16:18:08.160 回答