Amazing-Python-Scripts

Форк
0
167 строк · 5.6 Кб
1
from datetime import datetime
2
import tkinter as tk
3
import tkinter.messagebox
4
import pytz
5

6
# Creating main Window
7
window = tk.Tk()
8
window.title("Time-Zone Converter")
9
window.geometry('480x300')
10

11
# giving the format of datetime
12
format = "%Y-%m-%d %H:%M"
13

14
# entry box for all the values
15
entry_cur_tz = tk.Entry(window, width=20, font=('arial', 10))
16
entry_cur_tz.place(x=20, y=100)
17

18
entry_cnv_tz = tk.Entry(window, width=20, font=('arial', 10))
19
entry_cnv_tz.place(x=250, y=100)
20

21
entry_cur_tm = tk.Entry(window, width=20, font=('arial', 10))
22
entry_cur_tm.place(x=20, y=170)
23

24
entry_cnv_tm = tk.Entry(window, width=20, font=('arial', 10))
25
entry_cnv_tm.place(x=250, y=170)
26

27
# All Entry Box configuration
28

29

30
def on_focus_in_ent_cur_tz(event):
31
    if entry_cur_tz.get() == 'Eg. Asia/Kolkata':
32
        entry_cur_tz.delete(0, "end")
33
        entry_cur_tz.insert(0, '')
34
        entry_cur_tz.config(fg='black')
35

36

37
def on_focus_out_ent_cur_tz(event):
38
    if entry_cur_tz.get() == '':
39
        entry_cur_tz.insert(0, 'Eg. Asia/Kolkata')
40
        entry_cur_tz.config(fg='grey')
41

42

43
entry_cur_tz.insert(0, 'Eg. Asia/Kolkata')
44
entry_cur_tz.bind('<FocusIn>', on_focus_in_ent_cur_tz)
45
entry_cur_tz.bind('<FocusOut>', on_focus_out_ent_cur_tz)
46
entry_cur_tz.config(fg='grey')
47

48

49
def on_focus_in_ent_cnv_tz(event):
50
    if entry_cnv_tz.get() == 'Eg. Australia/Sydney':
51
        entry_cnv_tz.delete(0, "end")
52
        entry_cnv_tz.insert(0, '')
53
        entry_cnv_tz.config(fg='black')
54

55

56
def on_focus_out_ent_cnv_tz(event):
57
    if entry_cnv_tz.get() == '':
58
        entry_cnv_tz.insert(0, 'Eg. Australia/Sydney')
59
        entry_cnv_tz.config(fg='grey')
60

61

62
entry_cnv_tz.insert(0, 'Eg. Australia/Sydney')
63
entry_cnv_tz.bind('<FocusIn>', on_focus_in_ent_cnv_tz)
64
entry_cnv_tz.bind('<FocusOut>', on_focus_out_ent_cnv_tz)
65
entry_cnv_tz.config(fg='grey')
66

67

68
def on_focus_in_ent_cur_tm(event):
69
    if entry_cur_tm.get() == "Eg. 2023-06-02 20:01":
70
        entry_cur_tm.delete(0, "end")
71
        entry_cur_tm.insert(0, '')
72
        entry_cur_tm.config(fg='black')
73

74

75
def on_focus_out_ent_cur_tm(event):
76
    if entry_cur_tm.get() == '':
77
        entry_cur_tm.insert(0, "Eg. 2023-06-02 20:01")
78
        entry_cur_tm.config(fg='grey')
79

80

81
entry_cur_tm.insert(0, "Eg. 2023-06-02 20:01")
82
entry_cur_tm.bind('<FocusIn>', on_focus_in_ent_cur_tm)
83
entry_cur_tm.bind('<FocusOut>', on_focus_out_ent_cur_tm)
84
entry_cur_tm.config(fg='grey')
85

86

87
def on_focus_in_ent_cnv_tm(event):
88
    if entry_cnv_tm.get() == 'Click convert button':
89
        entry_cnv_tm.delete(0, "end")
90
        entry_cnv_tm.insert(0, '')
91
        entry_cnv_tm.config(fg='black')
92

93

94
def on_focus_out_ent_cnv_tm(event):
95
    if entry_cnv_tm.get() == '':
96
        entry_cnv_tm.insert(0, 'Click convert button')
97
        entry_cnv_tm.config(fg='grey')
98

99

100
entry_cnv_tm.insert(0, 'Click convert button')
101
entry_cnv_tm.bind('<FocusIn>', on_focus_in_ent_cnv_tm)
102
entry_cnv_tm.bind('<FocusOut>', on_focus_out_ent_cnv_tm)
103
entry_cnv_tm.bind("<Key>", lambda a: "break")
104
entry_cnv_tm.config(fg='grey')
105

106

107
# All label with text
108
title_lbl = tk.Label(master=window, text="Time-Zone Converter",
109
                     font=("broadway", 25), bg="black", fg='white')
110
title_lbl.place(x=48, y=10)
111

112
cur_tz_lbl = tk.Label(master=window, text="Current timezone name", font=(
113
    "Times Roman", 10), fg='black')
114
cur_tz_lbl.place(x=16, y=80)
115
cnv_tz_lbl = tk.Label(master=window, text="Convert timezone name", font=(
116
    "Times Roman", 10), fg='black')
117
cnv_tz_lbl.place(x=246, y=80)
118

119
cur_tm_lbl = tk.Label(master=window, text="Current time (YYYY-MM-DD H:M)",
120
                      font=("Times Roman", 10), fg='black')
121
cur_tm_lbl.place(x=16, y=150)
122
cnv_tm_lbl = tk.Label(master=window, text="Converted time (YYYY-MM-DD H:M)",
123
                      font=("Times Roman", 10), fg='black')
124
cnv_tm_lbl.place(x=246, y=150)
125

126
# Convert button function
127

128

129
def cnv_time():
130
    date_input = True
131

132
    # Check all the data is entered or not
133
    if entry_cur_tz.get() == 'Eg. Asia/Kolkata' or entry_cnv_tz.get() == 'Eg. Australia/Sydney' or entry_cur_tm.get() == 'Eg. 2023-06-02 20:01' or entry_cnv_tm == 'Click convert button':
134
        tkinter.messagebox.showerror(title="Error", message="Invalid inputs")
135
    # Check the date input format
136
    elif entry_cur_tm.get() != 'Eg. 2023-06-02 20:01':
137
        try:
138
            my_timestamp = datetime.strptime(
139
                entry_cur_tm.get(), '%Y-%m-%d %H:%M')
140
        except ValueError:
141
            date_input = False
142
            tkinter.messagebox.showerror(
143
                title="Error", message="Invalid Date input")
144
    # Check if timezone entered is right or wrong and convert the date
145
    if entry_cur_tz != 'Eg. Asia/Kolkata' and entry_cnv_tz != 'Eg. Australia/Sydney':
146
        try:
147
            if date_input == True:
148
                date_time = datetime.strptime(
149
                    entry_cur_tm.get(), '%Y-%m-%d %H:%M')
150
                org_timezone = pytz.timezone(entry_cur_tz.get())
151
                new_timezone = pytz.timezone(entry_cnv_tz.get())
152
                org_timestamp = org_timezone.localize(date_time)
153
                new_timestamp = org_timestamp.astimezone(new_timezone)
154
                entry_cnv_tm.delete(0, "end")
155
                entry_cnv_tm.config(fg='black')
156
                entry_cnv_tm.insert(0, new_timestamp.strftime(format))
157
        except pytz.exceptions.UnknownTimeZoneError:
158
            tkinter.messagebox.showerror(
159
                title="Error", message="Invalid timezone input")
160

161

162
# Convert Button
163
button_cnv = tk.Button(window, text="Convert", width=10, command=cnv_time)
164
button_cnv.place(x=20, y=210)
165

166
window.resizable(False, False)
167
window.mainloop()
168

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.