Tk - Kalender
Verfasst: Samstag 27. Juni 2009, 23:02
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
def change_date(self, step_month, step_year):
self.month = (self.month + 1) % len(self.MONTHS[self.language])
self.year_label.config(text = self.year)
self.month_label.config(text=self.MONTHS[self.language][self.month])
self.make_date()
Code: Alles auswählen
properties = dict(calendar_frame, text=day_name, width=5, font=self.font, relief=self.relief, fg=self.control_fg, bg=self.control_bg)
for column, day_name in enumerate(self.WEEK_DAYS[self.language]):
tk.Label(**properties).grid(row=0, column=column)
for row in xrange(1, 7):
week_number = tk.Label(**properties)
week_number.grid(row=row, column=0)
self.week_numbers.append(week_number)
week = list()
for column in xrange(1, 8):
day = tk.Label(**properties)
week.append(day)
day.grid(row=row, column=column)
Code: Alles auswählen
def main():
def update_gui(label):
label.config(text=cal.select_date)
def set_select_date(event, label):
label.after(1, update_gui, label)
root = tk.Tk()
cal = Tk_Calendar(root, "Arial 10 bold", "black", "white", "black",
"green", "black", "gray85", "groove", "eng")
cal.pack(padx=5, pady=5)
current_date_label = tk.Label(root, text=cal.current_date)
current_date_label.pack()
cal.bind("<Enter>", lambda event, label=current_date_label:
set_select_date(event, label))
root.title("Calendar")
root.mainloop()
if __name__ == "__main__":
main()
Code: Alles auswählen
class Gui(object):
def __init__(self, root):
self.root = root
self.date_select_status = True
self.calendar = Tk_Calendar(root, "Courier 10 bold", "black", "white",
"black", "green", "black", "gray85", "groove", "eng")
self.calendar.pack()
self.date_label = tk.Label(root, text=self.calendar.select_date.strftime(
"%d.%m.%y"))
self.date_label.pack()
self.calendar.bind("<Enter>", self.start_get_select_date)
self.calendar.bind("<Leave>", self.stop_get_select_date)
def start_get_select_date (self, event):
if self.date_select_status:
self.date_label.config(text = self.calendar.select_date.strftime(
"%d.%m.%y"))
self.root.after(50, self.start_get_select_date, event)
def stop_get_select_date(self, event):
self.date_select_status = False
self.root.after(100, self.config_status)
def config_status(self):
self.date_select_status = True
def main():
root = tk.Tk()
gui = Gui(root)
root.title("Calendar")
root.mainloop()
if __name__ == "__main__":
main()
Code: Alles auswählen
#! /usr/bin/env python
# -*- coding: utf-8
import Tkinter as tk
from calendar import Calendar
import time
from datetime import datetime
class Tk_Calendar(tk.Frame):
WEEK_DAYS = {"de" : ("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"),
"eng" : ("Mo","Tu", "We", "Th", "Fr", "Sa", "So")}
MONTHS = {"de" : ("Januar", "Februar", "Maerz", "April", "Mai",
"Juni", "Juli", "August", "September", "Oktober",
"November", "Dezember"),
"eng" : ("January", "February", "March", "April", "May",
"June", "July", "August", "September", "Oktober",
"November","December")}
MONTH_LABEL_WIDTH = 10
YEAR_LABEL_WIDTH = 5
DAY_LABEL_WIDTH = 5
CONTROL_RELIEF = "flat"
def __init__(self, root, font=("arial",15,"bold"), day_fg="black",
day_bg = "white", current_day_fg = "black", current_day_bg = "#FF6051",
control_fg = "black", control_bg = "gray85", relief = "flat",
select_day_bg = "#4765FF", language = "de"):
tk.Frame.__init__(self, root, bg=control_bg)
self.week_numbers = list()
self.weeks = list()
self.calendar = Calendar()
self.select_day = time.localtime().tm_mday
self.select_year = time.localtime().tm_year
self.select_month = time.localtime().tm_mon
self.select_date = datetime(self.select_year, self.select_month,
self.select_day)
self.language = language
self.day_fg = day_fg
self.day_bg = day_bg
self.current_day_fg = current_day_bg
self.current_day_bg = current_day_bg
self.select_day_bg = select_day_bg
control_properties = dict(font = font, fg = control_fg,
bg = control_bg, relief = self.CONTROL_RELIEF)
calendar_properties = dict(font = font, fg = control_fg,
bg = control_bg, relief = relief, width = self.DAY_LABEL_WIDTH)
control_frame_date_left = tk.Frame(self, bg = control_bg)
control_frame_date_left.grid(row=0, column=0, sticky="w",
padx=3, pady=3)
control_frame_date_right = tk.Frame(self, bg = control_bg)
control_frame_date_right.grid(row=0, column=1, sticky="e",
padx=3, pady=3)
control_buttons = ((control_frame_date_left, "<<", -1, 0,
self.change_date, 0, 0),
(control_frame_date_left, ">>", 1, 0,
self.change_date, 0, 2),
(control_frame_date_right, "<<", 0, -1,
self.change_date, 0, 3),
(control_frame_date_right, ">>", 0, 1,
self.change_date, 0, 5))
for frame, text, step_month, step_year, command, row, column\
in control_buttons:
tk.Button(frame, text=text, relief="flat", width=1,
fg=control_fg, bg=control_bg, font=font,
command=lambda step_month=step_month, step_year=step_year:
command(step_month, step_year)
).grid(row=row, column=column)
self.month_label = tk.Label(control_frame_date_left,
width=self.MONTH_LABEL_WIDTH, **control_properties)
self.month_label.grid(row=0, column=1)
self.year_label = tk.Label(control_frame_date_right,
width = self.YEAR_LABEL_WIDTH, **control_properties)
self.year_label.grid(row=0, column=4)
calendar_frame = tk.Frame(self, bg=control_bg)
calendar_frame.grid(row=1, columnspan=2)
tk.Label(calendar_frame, **calendar_properties).grid(row=0, column=0)
for column, day_name in enumerate(self.WEEK_DAYS[self.language]):
tk.Label(calendar_frame, text=day_name, **calendar_properties
).grid(row=0, column=column+1)
for row in xrange(1, 7):
week_number = tk.Label(calendar_frame, **calendar_properties)
week_number.grid(row=row, column=0)
self.week_numbers.append(week_number)
week = list()
for column in xrange(1, 8):
day = tk.Label(calendar_frame, **calendar_properties)
day.grid(row=row, column=column)
week.append(day)
day.bind("<Leave>", lambda event, label=day, row=row,
bg=self.day_bg, column=column:
self.config_bind_label(event, label, row, column, bg))
day.bind("<Enter>", lambda event, label=day, row=row,
bg=self.select_day_bg, column=column:
self.config_bind_label(event, label, row, column, bg))
day.bind("<Button-1>",lambda event, row=row, column=column:
self.selected_date(event, row, column))
self.weeks.append(week)
self.make_date()
def get_day(self, row, column):
try:
day = self.calendar.monthdayscalendar(
self.select_year, self.select_month)[row-1][column-1]
except IndexError:
day = 0
return day
def config_bind_label(self, event, label, row, column, bg):
label.config(bg = bg)
day = self.get_day(row, column)
if day == 0:
label.config(fg = self.day_bg, bg = self.day_bg)
elif day == time.localtime().tm_mday and\
self.select_month == time.localtime().tm_mon and\
self.select_year == time.localtime().tm_year:
label.config(bg = self.current_day_bg)
def selected_date(self, event, row, column):
day = self.get_day(row, column)
if day > 0:
self.select_day = day
self.select_date = datetime(self.select_year,
self.select_month, self.select_day)
def make_date(self):
self.year_label.config(text = self.select_year)
self.month_label.config(
text = self.MONTHS[self.language][self.select_month-1])
for week in self.weeks:
for day in week:
day.config(text = "", bg = self.day_bg)
for week_number in self.week_numbers:
week_number.config(text = "")
for index_week, week in enumerate(self.calendar.monthdayscalendar(
self.select_year, self.select_month)):
for index_day, day in enumerate(week):
if day > 0:
iso_calendar = datetime(self.select_year,
self.select_month, day)
iso_year, iso_week, iso_day = iso_calendar.isocalendar()
fg = self.day_fg
bg = self.day_bg
if day == 0:
fg = self.day_bg
elif day == time.localtime().tm_mday and\
time.localtime().tm_mon == self.select_month and\
time.localtime().tm_year == self.select_year:
bg = self.current_day_bg
self.weeks[index_week][index_day].config(text = day, fg =fg,
bg = bg)
self.week_numbers[index_week].config(text = iso_week)
def change_date(self, step_month, step_year):
self.select_month += step_month
self.select_year += step_year
self.select_month = self.select_month % len(self.MONTHS[self.language])
if self.select_month == 0:
self.select_month = len(self.MONTHS[self.language])
self.make_date()
class Gui(object):
def __init__(self, root):
self.root = root
self.date_select_status = True
self.calendar = Tk_Calendar(root)
self.calendar.pack()
self.date_label = tk.Label(root, text=self.calendar.select_date.strftime(
"%d.%m.%y"))
self.date_label.pack()
self.calendar.bind("<Enter>", self.start_get_select_date)
self.calendar.bind("<Leave>", self.stop_get_select_date)
def start_get_select_date (self, event):
if self.date_select_status:
self.date_label.config(text = self.calendar.select_date.strftime(
"%d.%m.%y"))
self.root.after(50, self.start_get_select_date, event)
def stop_get_select_date(self, event):
self.date_select_status = False
self.root.after(100, self.config_status)
def config_status(self):
self.date_select_status = True
def main():
root = tk.Tk()
gui = Gui(root)
root.title("Calendar")
root.mainloop()
if __name__ == "__main__":
main()
Also eigentlich wollte Ich nur die Farben und Schriftart/größe ändern.krisi: Es existiert das babel-Modul (babel.edgewall.org), um Wochentagsnamen und Monatsnamen automatisch zu lokalisieren.
Oh, tut mir leid. Da hab ich wohl zu schnell geguckt. Das ist aber trotzdem kein Grund, um von kaytac überhört zu werdenkrisi12345 hat geschrieben:Also eigentlich wollte Ich nur die Farben und Schriftart/größe ändern.krisi: Es existiert das babel-Modul (babel.edgewall.org), um Wochentagsnamen und Monatsnamen automatisch zu lokalisieren.