2017-12-23 37 views
-4

私がしようとしているのは、Googleカレンダーや他のカレンダープログラムのようにカレンダーフレームを作ることです。その日に私がしなければならない出来事は、python tkinterを使っている時です。現在私のデータベースには、日付、開始時刻、終了時刻のイベントがあります。私はpython 3を使用していることに注意してください。誰かが私にそれを行う方法やそれを行う方法を言うWebサイトへのリンクを送信するための手がかりを教えてくださいできますか?しかし、私は日付ピッカーを探しているわけではありません。ありがとう;)pythonのイベントのカレンダービューを作るtkinter

+1

[asking](https://stackoverflow.com/help/asking)を参照してください。 – Nae

+1

tkinterを学ぶと、HTMLやCSSを学び、PythonのWebフレームワーク(フラスコやdjangoなど)を使ってWebメソッドを構築する方法を知ることができます。両方のパスには書籍全体がありますが、ウェブ上のドキュメントもあります。 – progmatico

+0

'tkinter'は' Label'sや 'Button'sでカレンダー表示を作成する' grid() 'レイアウトを持っています。 – furas

答えて

1

編集:私はSO:How do I create a date picker in tkinter?に見つかりました。

calendarすぎ

を使用する(ただし、あなただけのリストとしてイベントを表示する必要がある場合、あなたはpack()またはListboxでのみLabel/Button必要があることができtkinterためのウィジェットがあります。そして、あなたはどのチュートリアルで見つけることができますこの。 )


Python

はテキストまたはHTML

としてカレンダーを生成することができるモジュール calendarを有します
import calendar 

text = calendar.TextCalendar() 

print(text.formatmonth(2017, 12)) 

結果:

December 2017 
Mo Tu We Th Fr Sa Su 
      1 2 3 
4 5 6 7 8 9 10 
11 12 13 14 15 16 17 
18 19 20 21 22 23 24 
25 26 27 28 29 30 31 

または通年の

print(text.formatyear(2017)) 

結果:

        2017 

     January     February     March 
Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su 
        1    1 2 3 4 5    1 2 3 4 5 
2 3 4 5 6 7 8  6 7 8 9 10 11 12  6 7 8 9 10 11 12 
9 10 11 12 13 14 15  13 14 15 16 17 18 19  13 14 15 16 17 18 19 
16 17 18 19 20 21 22  20 21 22 23 24 25 26  20 21 22 23 24 25 26 
23 24 25 26 27 28 29  27 28      27 28 29 30 31 
30 31 

     April      May      June 
Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su 
       1 2  1 2 3 4 5 6 7    1 2 3 4 
3 4 5 6 7 8 9  8 9 10 11 12 13 14  5 6 7 8 9 10 11 
10 11 12 13 14 15 16  15 16 17 18 19 20 21  12 13 14 15 16 17 18 
17 18 19 20 21 22 23  22 23 24 25 26 27 28  19 20 21 22 23 24 25 
24 25 26 27 28 29 30  29 30 31     26 27 28 29 30 

     July      August     September 
Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su 
       1 2   1 2 3 4 5 6     1 2 3 
3 4 5 6 7 8 9  7 8 9 10 11 12 13  4 5 6 7 8 9 10 
10 11 12 13 14 15 16  14 15 16 17 18 19 20  11 12 13 14 15 16 17 
17 18 19 20 21 22 23  21 22 23 24 25 26 27  18 19 20 21 22 23 24 
24 25 26 27 28 29 30  28 29 30 31    25 26 27 28 29 30 
31 

     October     November     December 
Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su 
        1    1 2 3 4 5     1 2 3 
2 3 4 5 6 7 8  6 7 8 9 10 11 12  4 5 6 7 8 9 10 
9 10 11 12 13 14 15  13 14 15 16 17 18 19  11 12 13 14 15 16 17 
16 17 18 19 20 21 22  20 21 22 23 24 25 26  18 19 20 21 22 23 24 
23 24 25 26 27 28 29  27 28 29 30    25 26 27 28 29 30 31 
30 31 

また、選択した月の日時オブジェクトを与えることができ

print(text.monthdatescalendar(2017, 12)) 

結果

[[datetime.date(2017, 11, 27), datetime.date(2017, 11, 28), datetime.date(2017, 11, 29), datetime.date(2017, 11, 30), datetime.date(2017, 12, 1), datetime.date(2017, 12, 2), datetime.date(2017, 12, 3)], 
[datetime.date(2017, 12, 4), datetime.date(2017, 12, 5), datetime.date(2017, 12, 6), datetime.date(2017, 12, 7), datetime.date(2017, 12, 8), datetime.date(2017, 12, 9), datetime.date(2017, 12, 10)], 
[datetime.date(2017, 12, 11), datetime.date(2017, 12, 12), datetime.date(2017, 12, 13), datetime.date(2017, 12, 14), datetime.date(2017, 12, 15), datetime.date(2017, 12, 16), datetime.date(2017, 12, 17)], 
[datetime.date(2017, 12, 18), datetime.date(2017, 12, 19), datetime.date(2017, 12, 20), datetime.date(2017, 12, 21), datetime.date(2017, 12, 22), datetime.date(2017, 12, 23), datetime.date(2017, 12, 24)], 
[datetime.date(2017, 12, 25), datetime.date(2017, 12, 26), datetime.date(2017, 12, 27), datetime.date(2017, 12, 28), datetime.date(2017, 12, 29), datetime.date(2017, 12, 30), datetime.date(2017, 12, 31)]] 

そして、あなたはこのようなtkinter.Frameを生成するクラスの作成にCalendarを使用することができます:それはまだカレンダー内のイベントを表示する必要が

enter image description here

# --- class --- 

import calendar 
import tkinter 

class TkinterCalendar(calendar.Calendar): 

    def formatmonth(self, master, year, month): 

     dates = self.monthdatescalendar(year, month) 

     frame = tkinter.Frame(master) 

     self.labels = [] 

     for r, week in enumerate(dates): 
      labels_row = [] 
      for c, date in enumerate(week): 
       label = tkinter.Button(frame, text=date.strftime('%Y\n%m\n%d')) 
       label.grid(row=r, column=c) 

       if date.month != month: 
        label['bg'] = '#aaa' 

       if c == 6: 
        label['fg'] = 'red' 

       labels_row.append(label) 
      self.labels.append(labels_row) 

     return frame 


# --- example how to use --- 

import tkinter as tk 

root = tk.Tk() 

tkcalendar = TkinterCalendar() 

for year, month in [(2017, 11), (2017, 12), (2018,1)]: 
    tk.Label(root, text = '{}/{}'.format(year, month)).pack() 

    frame = tkcalendar.formatmonth(root, year, month) 
    frame.pack() 

root.mainloop()          

enter image description here

を機能を割り当てるボタン(各日付はtkinter.Button)です。

関連する問題