язык кнопок календаря ttkwidgets

#python #tkinter #calendar #ttkwidgets

Вопрос:

Я хочу знать, можно ли изменить язык кнопок «предыдущий» и «следующий». Если я изменю «языковой стандарт», изменятся только имена месяцев, но не кнопки. Заранее спасибо.

Комментарии:

1. если вы говорите об изменении текста кнопок, то вы можете использовать mybutton.config(text="previous")

2. В принципе, нет, потому что две строки жестко закодированы внутри источника ttkwidgets .

Ответ №1:

Текст кнопок жестко закодирован, и кнопки не являются атрибутами календаря, поэтому изменить их текст непросто. Однако можно создать пользовательский класс, унаследованный от ttkwidgets.Calendar , и просто переписать функцию __place_widgets() , в которой определены кнопки:

 import tkinter as tk
from tkinter import ttk
import ttkwidgets

translation = {"Previous": "Précédant", "Next": "Suivant"}

def _(string):
    return translation.get(string, string)


class Calendar(ttkwidgets.Calendar):
    def __place_widgets(self):
        # header frame and its widgets
        hframe = ttk.Frame(self)
        lbtn = ttk.Button(hframe, command=self._prev_month, text=_("Previous"))
        rbtn = ttk.Button(hframe, command=self._next_month, text=_("Next"))
        self._header = ttk.Label(hframe, width=15, anchor='center')
        # the calendar
        self._calendar = ttk.Treeview(self, show='', selectmode='none', height=7)

        # pack the widgets
        hframe.pack(side='top', pady=4, anchor='center')
        lbtn.grid(sticky=tk.N   tk.S   tk.W   tk.E)
        self._header.grid(column=1, row=0, padx=12)
        rbtn.grid(column=2, row=0, sticky=tk.N   tk.S   tk.W   tk.E)
        self._calendar.pack(expand=1, fill='both', side='bottom')



root = tk.Tk()
cal = Calendar(root, locale="fr_FR.UTF-8")
cal.pack()
root.mainloop()
 

что дает календарь на французском языке скриншот