├── .python-version ├── CTK_Buttons ├── CTK_Buttons_templates_4_styles.py └── README.md ├── CTK_Entrys └── CTK_Entry_2_styles_templates.py ├── LICENSE ├── README.md ├── app-EXAMPLES ├── Contacts-List.py ├── Dollar-To-Euro-Conversor.py ├── PasswordGenerator.py └── video-downloader-app │ ├── gotchatube.py │ └── logo.png ├── pyproject.toml └── uv.lock /.python-version: -------------------------------------------------------------------------------- 1 | 3.10 2 | -------------------------------------------------------------------------------- /CTK_Buttons/CTK_Buttons_templates_4_styles.py: -------------------------------------------------------------------------------- 1 | #libraries import 2 | from tkinter import * 3 | import customtkinter 4 | 5 | #command function 6 | def Click(): 7 | pass 8 | 9 | #Main Window properties 10 | window = Tk() 11 | window.title("ButtonsTemplates") 12 | window.geometry("1030x300") 13 | window.configure(bg="#262626") 14 | 15 | #font definition 16 | main_font = customtkinter.CTkFont(family="Helvetica", size=12) 17 | 18 | #Creating the buttons 19 | #STYLE ONE BUTTONS (FIRST ROW) 20 | #=============================================================================== 21 | Button_StyleOne_1 = customtkinter.CTkButton( 22 | master= window, 23 | command= Click, 24 | text= "Click Me", 25 | font= main_font, 26 | text_color="#363636", 27 | hover= True, 28 | hover_color= "#f2f2f2", 29 | height=40, 30 | width= 120, 31 | border_width=2, 32 | corner_radius=5, 33 | border_color= "#d3d3d3", 34 | bg_color="#262626", 35 | fg_color= "#fafafa") 36 | 37 | Button_StyleOne_2 = customtkinter.CTkButton( 38 | master= window, 39 | command= Click, 40 | text= "Click Me", 41 | font= main_font, 42 | text_color="white", 43 | hover= True, 44 | hover_color= "#3f98d7", 45 | height=40, 46 | width= 120, 47 | border_width=2, 48 | corner_radius=5, 49 | border_color= "#2d6f9e", 50 | bg_color="#262626", 51 | fg_color= "#3b8cc6") 52 | 53 | Button_StyleOne_3 = customtkinter.CTkButton( 54 | master= window, 55 | command= Click, 56 | text= "Click Me", 57 | font= main_font, 58 | text_color= "white", 59 | hover= True, 60 | hover_color= "#6fb9d5", 61 | height=40, 62 | width= 120, 63 | border_width=2, 64 | corner_radius=5, 65 | border_color= "#528aa0", 66 | bg_color="#262626", 67 | fg_color= "#68aec9") 68 | 69 | Button_StyleOne_4 = customtkinter.CTkButton( 70 | master= window, 71 | command= Click, 72 | text= "Click Me", 73 | font= main_font, 74 | text_color="white", 75 | hover= True, 76 | hover_color= "#81b867", 77 | height=40, 78 | width= 120, 79 | border_width=2, 80 | corner_radius=5, 81 | border_color= "#608a4d", 82 | bg_color="#262626", 83 | fg_color= "#79ae61") 84 | 85 | Button_StyleOne_5 = customtkinter.CTkButton( 86 | master= window, 87 | command= Click, 88 | text= "Click Me", 89 | font= main_font, 90 | text_color="white", 91 | hover= True, 92 | hover_color= "#ffb557", 93 | height=40, 94 | width= 120, 95 | border_width=2, 96 | corner_radius=5, 97 | border_color= "#bc863f", 98 | bg_color="#262626", 99 | fg_color= "#eda850") 100 | 101 | Button_StyleOne_6 = customtkinter.CTkButton( 102 | master= window, 103 | command= Click, 104 | text= "Click Me", 105 | font= main_font, 106 | text_color="white", 107 | hover= True, 108 | hover_color= "#e06a61", 109 | height=40, 110 | width= 120, 111 | border_width=2, 112 | corner_radius=5, 113 | border_color= "#9e4a43", 114 | bg_color="#262626", 115 | fg_color= "#c75d55") 116 | 117 | Button_StyleOne_7 = customtkinter.CTkButton( 118 | master= window, 119 | command= Click, 120 | text= "Click Me", 121 | font= main_font, 122 | text_color="white", 123 | hover= True, 124 | hover_color= "#454545", 125 | height=40, 126 | width= 120, 127 | border_width=2, 128 | corner_radius=5, 129 | border_color= "#161616", 130 | bg_color="#262626", 131 | fg_color= "#363636") 132 | 133 | 134 | #STYLE TWO BUTTONS (SECOND ROW) 135 | #=============================================================================== 136 | Button_StyleTwo_1 = customtkinter.CTkButton( 137 | master= window, 138 | command= Click, 139 | text= "Click Me", 140 | font= main_font, 141 | text_color="white", 142 | hover= True, 143 | hover_color= "black", 144 | height=40, 145 | width= 120, 146 | border_width=2, 147 | corner_radius=3, 148 | border_color= "#d3d3d3", 149 | bg_color="#262626", 150 | fg_color= "#262626") 151 | 152 | Button_StyleTwo_2 = customtkinter.CTkButton( 153 | master= window, 154 | command= Click, 155 | text= "Click Me", 156 | font= main_font, 157 | text_color="#3b8cc6", 158 | hover= True, 159 | hover_color= "black", 160 | height=40, 161 | width= 120, 162 | border_width=2, 163 | corner_radius=3, 164 | border_color= "#3b8cc6", 165 | bg_color="#262626", 166 | fg_color= "#262626") 167 | 168 | Button_StyleTwo_3 = customtkinter.CTkButton( 169 | master= window, 170 | command= Click, 171 | text= "Click Me", 172 | font= main_font, 173 | text_color="#68aec9", 174 | hover= True, 175 | hover_color= "black", 176 | height=40, 177 | width= 120, 178 | border_width=2, 179 | corner_radius=3, 180 | border_color= "#68aec9", 181 | bg_color="#262626", 182 | fg_color= "#262626") 183 | 184 | Button_StyleTwo_4 = customtkinter.CTkButton( 185 | master= window, 186 | command= Click, 187 | text= "Click Me", 188 | font= main_font, 189 | text_color="#79ae61", 190 | hover= True, 191 | hover_color= "black", 192 | height=40, 193 | width= 120, 194 | border_width=2, 195 | corner_radius=3, 196 | border_color= "#79ae61", 197 | bg_color="#262626", 198 | fg_color= "#262626") 199 | 200 | Button_StyleTwo_5 = customtkinter.CTkButton( 201 | master= window, 202 | command= Click, 203 | text= "Click Me", 204 | font= main_font, 205 | text_color="#eda850", 206 | hover= True, 207 | hover_color= "black", 208 | height=40, 209 | width= 120, 210 | border_width=2, 211 | corner_radius=3, 212 | border_color= "#eda850", 213 | bg_color="#262626", 214 | fg_color= "#262626") 215 | 216 | Button_StyleTwo_6 = customtkinter.CTkButton( 217 | master= window, 218 | command= Click, 219 | text= "Click Me", 220 | font= main_font, 221 | text_color="#c75d55", 222 | hover= True, 223 | hover_color= "black", 224 | height=40, 225 | width= 120, 226 | border_width=2, 227 | corner_radius=3, 228 | border_color= "#c75d55", 229 | bg_color="#262626", 230 | fg_color= "#262626") 231 | 232 | Button_StyleTwo_7 = customtkinter.CTkButton( 233 | master= window, 234 | command= Click, 235 | text= "Click Me", 236 | font= main_font, 237 | text_color="white", 238 | hover= True, 239 | hover_color= "black", 240 | height=40, 241 | width= 120, 242 | border_width=2, 243 | corner_radius=3, 244 | border_color= "black", 245 | bg_color="#262626", 246 | fg_color= "#262626") 247 | 248 | 249 | #STYLE THREE BUTTONS (THIRD ROW) 250 | #=============================================================================== 251 | Button_StyleThree_1 = customtkinter.CTkButton( 252 | master= window, 253 | command= Click, 254 | text= "Click Me", 255 | font= main_font, 256 | text_color="white", 257 | hover= True, 258 | hover_color= "black", 259 | height=40, 260 | width= 120, 261 | border_width=2, 262 | corner_radius=20, 263 | border_color= "#d3d3d3", 264 | bg_color="#262626", 265 | fg_color= "#262626") 266 | 267 | Button_StyleThree_2 = customtkinter.CTkButton( 268 | master= window, 269 | command= Click, 270 | text= "Click Me", 271 | font= main_font, 272 | text_color="#3b8cc6", 273 | hover= True, 274 | hover_color= "black", 275 | height=40, 276 | width= 120, 277 | border_width=2, 278 | corner_radius=20, 279 | border_color= "#3b8cc6", 280 | bg_color="#262626", 281 | fg_color= "#262626") 282 | 283 | Button_StyleThree_3 = customtkinter.CTkButton( 284 | master= window, 285 | command= Click, 286 | text= "Click Me", 287 | font= main_font, 288 | text_color="#68aec9", 289 | hover= True, 290 | hover_color= "black", 291 | height=40, 292 | width= 120, 293 | border_width=2, 294 | corner_radius=20, 295 | border_color= "#68aec9", 296 | bg_color="#262626", 297 | fg_color= "#262626") 298 | 299 | Button_StyleThree_4 = customtkinter.CTkButton( 300 | master= window, 301 | command= Click, 302 | text= "Click Me", 303 | font= main_font, 304 | text_color="#79ae61", 305 | hover= True, 306 | hover_color= "black", 307 | height=40, 308 | width= 120, 309 | border_width=2, 310 | corner_radius=20, 311 | border_color= "#79ae61", 312 | bg_color="#262626", 313 | fg_color= "#262626") 314 | 315 | Button_StyleThree_5 = customtkinter.CTkButton( 316 | master= window, 317 | command= Click, 318 | text= "Click Me", 319 | font= main_font, 320 | text_color="#eda850", 321 | hover= True, 322 | hover_color= "black", 323 | height=40, 324 | width= 120, 325 | border_width=2, 326 | corner_radius=20, 327 | border_color= "#eda850", 328 | bg_color="#262626", 329 | fg_color= "#262626") 330 | 331 | Button_StyleThree_6 = customtkinter.CTkButton( 332 | master= window, 333 | command= Click, 334 | text= "Click Me", 335 | font= main_font, 336 | text_color="#c75d55", 337 | hover= True, 338 | hover_color= "black", 339 | height=40, 340 | width= 120, 341 | border_width=2, 342 | corner_radius=20, 343 | border_color= "#c75d55", 344 | bg_color="#262626", 345 | fg_color= "#262626") 346 | 347 | Button_StyleThree_7 = customtkinter.CTkButton( 348 | master= window, 349 | command= Click, 350 | text= "Click Me", 351 | font= main_font, 352 | text_color="white", 353 | hover= True, 354 | hover_color= "black", 355 | height=40, 356 | width= 120, 357 | border_width=2, 358 | corner_radius=20, 359 | border_color= "black", 360 | bg_color="#262626", 361 | fg_color= "#262626") 362 | 363 | 364 | #STYLE FOUR BUTTONS (FOUTH ROW) 365 | #=============================================================================== 366 | Button_StyleFour_1 = customtkinter.CTkButton( 367 | master= window, 368 | command= Click, 369 | text= "Click Me", 370 | font= main_font, 371 | text_color="#363636", 372 | hover= True, 373 | hover_color= "#f2f2f2", 374 | height=40, 375 | width= 120, 376 | border_width=2, 377 | corner_radius=20, 378 | border_color= "#d3d3d3", 379 | bg_color="#262626", 380 | fg_color= "#fafafa") 381 | 382 | Button_StyleFour_2 = customtkinter.CTkButton( 383 | master= window, 384 | command= Click, 385 | text= "Click Me", 386 | font= main_font, 387 | text_color="white", 388 | hover= True, 389 | hover_color= "#3f98d7", 390 | height=40, 391 | width= 120, 392 | border_width=2, 393 | corner_radius=20, 394 | border_color= "#2d6f9e", 395 | bg_color="#262626", 396 | fg_color= "#3b8cc6") 397 | 398 | Button_StyleFour_3 = customtkinter.CTkButton( 399 | master= window, 400 | command= Click, 401 | text= "Click Me", 402 | font= main_font, 403 | text_color= "white", 404 | hover= True, 405 | hover_color= "#6fb9d5", 406 | height=40, 407 | width= 120, 408 | border_width=2, 409 | corner_radius=20, 410 | border_color= "#528aa0", 411 | bg_color="#262626", 412 | fg_color= "#68aec9") 413 | 414 | Button_StyleFour_4 = customtkinter.CTkButton( 415 | master= window, 416 | command= Click, 417 | text= "Click Me", 418 | font= main_font, 419 | text_color="white", 420 | hover= True, 421 | hover_color= "#81b867", 422 | height=40, 423 | width= 120, 424 | border_width=2, 425 | corner_radius=20, 426 | border_color= "#608a4d", 427 | bg_color="#262626", 428 | fg_color= "#79ae61") 429 | 430 | Button_StyleFour_5 = customtkinter.CTkButton( 431 | master= window, 432 | command= Click, 433 | text= "Click Me", 434 | font= main_font, 435 | text_color="white", 436 | hover= True, 437 | hover_color= "#ffb557", 438 | height=40, 439 | width= 120, 440 | border_width=2, 441 | corner_radius=20, 442 | border_color= "#bc863f", 443 | bg_color="#262626", 444 | fg_color= "#eda850") 445 | 446 | Button_StyleFour_6 = customtkinter.CTkButton( 447 | master= window, 448 | command= Click, 449 | text= "Click Me", 450 | font= main_font, 451 | text_color="white", 452 | hover= True, 453 | hover_color= "#e06a61", 454 | height=40, 455 | width= 120, 456 | border_width=2, 457 | corner_radius=20, 458 | border_color= "#9e4a43", 459 | bg_color="#262626", 460 | fg_color= "#c75d55") 461 | 462 | Button_StyleFour_7 = customtkinter.CTkButton( 463 | master= window, 464 | command= Click, 465 | text= "Click Me", 466 | font= main_font, 467 | text_color="white", 468 | hover= True, 469 | hover_color= "#454545", 470 | height=40, 471 | width= 120, 472 | border_width=2, 473 | corner_radius=20, 474 | border_color= "#161616", 475 | bg_color="#262626", 476 | fg_color= "#363636") 477 | 478 | 479 | #placing the buttons 480 | #=================================================================== 481 | #FIRST ROW 482 | Button_StyleOne_1.place(x= 15, y= 15) 483 | Button_StyleOne_2.place(x= 160, y= 15) 484 | Button_StyleOne_3.place(x= 305, y= 15) 485 | Button_StyleOne_4.place(x= 450, y= 15) 486 | Button_StyleOne_5.place(x= 595, y= 15) 487 | Button_StyleOne_6.place(x= 740, y= 15) 488 | Button_StyleOne_7.place(x= 885, y= 15) 489 | #SECOND ROW 490 | Button_StyleTwo_1.place(x= 15, y= 90) 491 | Button_StyleTwo_2.place(x= 160, y= 90) 492 | Button_StyleTwo_3.place(x= 305, y= 90) 493 | Button_StyleTwo_4.place(x= 450, y= 90) 494 | Button_StyleTwo_5.place(x= 595, y= 90) 495 | Button_StyleTwo_6.place(x= 740, y= 90) 496 | Button_StyleTwo_7.place(x= 885, y= 90) 497 | #THIRD ROW 498 | Button_StyleThree_1.place(x= 15, y= 165) 499 | Button_StyleThree_2.place(x= 160, y= 165) 500 | Button_StyleThree_3.place(x= 305, y= 165) 501 | Button_StyleThree_4.place(x= 450, y= 165) 502 | Button_StyleThree_5.place(x= 595, y= 165) 503 | Button_StyleThree_6.place(x= 740, y= 165) 504 | Button_StyleThree_7.place(x= 885, y= 165) 505 | #FOUTH ROW 506 | Button_StyleFour_1.place(x= 15, y= 240) 507 | Button_StyleFour_2.place(x= 160, y= 240) 508 | Button_StyleFour_3.place(x= 305, y= 240) 509 | Button_StyleFour_4.place(x= 450, y= 240) 510 | Button_StyleFour_5.place(x= 595, y= 240) 511 | Button_StyleFour_6.place(x= 740, y= 240) 512 | Button_StyleFour_7.place(x= 885, y= 240) 513 | 514 | #run the main loop 515 | window.mainloop() -------------------------------------------------------------------------------- /CTK_Buttons/README.md: -------------------------------------------------------------------------------- 1 | # CTK_Buttons Templates 2 | 3 | These are the .py archives of this folder and theirs buttons, respectively: 4 | 5 | ___ 6 | * CTK_Buttons_templates_4_styles.py 7 | 8 | ![Screenshot_1](https://user-images.githubusercontent.com/97618574/175050413-e106f7a7-e208-4f60-9b00-427e68b8b924.png) 9 | -------------------------------------------------------------------------------- /CTK_Entrys/CTK_Entry_2_styles_templates.py: -------------------------------------------------------------------------------- 1 | #custom buttons templates 2 | from tkinter import * 3 | import customtkinter 4 | 5 | #command function 6 | def Click(): 7 | pass 8 | 9 | #Main Window properties 10 | window = Tk() 11 | window.title("EntrysTemplates") 12 | window.geometry("280x515") 13 | window.configure(bg="#262626") 14 | 15 | #font definition 16 | main_font = customtkinter.CTkFont(family="Helvetica", size=12) 17 | 18 | #Creating the entrys 19 | #style 1 20 | entry_1 = customtkinter.CTkEntry(master=window, 21 | placeholder_text="CTkEntry", 22 | placeholder_text_color="#cccccc", 23 | 24 | font= main_font, 25 | text_color="white", 26 | 27 | width=220, 28 | height=30, 29 | border_width=2, 30 | border_color= "#d3d3d3", 31 | bg_color="#262626", 32 | fg_color= "#262626", 33 | 34 | corner_radius=5) 35 | entry_2 = customtkinter.CTkEntry(master=window, 36 | placeholder_text="CTkEntry", 37 | placeholder_text_color="#3b8cc6", 38 | 39 | font= main_font, 40 | text_color="#3b8cc6", 41 | 42 | width=220, 43 | height=30, 44 | border_width=2, 45 | border_color= "#3b8cc6", 46 | bg_color="#262626", 47 | fg_color= "#262626", 48 | 49 | corner_radius=5) 50 | entry_3 = customtkinter.CTkEntry(master=window, 51 | placeholder_text="CTkEntry", 52 | placeholder_text_color="#79ae61", 53 | 54 | font= main_font, 55 | text_color="#79ae61", 56 | 57 | width=220, 58 | height=30, 59 | border_width=2, 60 | border_color= "#79ae61", 61 | bg_color="#262626", 62 | fg_color= "#262626", 63 | 64 | corner_radius=5) 65 | entry_4 = customtkinter.CTkEntry(master=window, 66 | placeholder_text="CTkEntry", 67 | placeholder_text_color="#eda850", 68 | 69 | font= main_font, 70 | text_color="#eda850", 71 | 72 | width=220, 73 | height=30, 74 | border_width=2, 75 | border_color= "#eda850", 76 | bg_color="#262626", 77 | fg_color= "#262626", 78 | 79 | corner_radius=5) 80 | entry_5 = customtkinter.CTkEntry(master=window, 81 | placeholder_text="CTkEntry", 82 | placeholder_text_color="#c75d55", 83 | 84 | font= main_font, 85 | text_color="#c75d55", 86 | 87 | width=220, 88 | height=30, 89 | border_width=2, 90 | border_color= "#c75d55", 91 | bg_color="#262626", 92 | fg_color= "#262626", 93 | 94 | corner_radius=5) 95 | 96 | #style 2 97 | entry_6 = customtkinter.CTkEntry(master=window, 98 | placeholder_text="CTkEntry", 99 | placeholder_text_color="black", 100 | 101 | font= main_font, 102 | text_color="black", 103 | 104 | width=220, 105 | height=30, 106 | border_width=2, 107 | border_color= "black", 108 | bg_color="#262626", 109 | fg_color= "#EEEEEE", 110 | 111 | corner_radius=5) 112 | entry_7 = customtkinter.CTkEntry(master=window, 113 | placeholder_text="CTkEntry", 114 | placeholder_text_color="black", 115 | 116 | font= main_font, 117 | text_color="black", 118 | 119 | width=220, 120 | height=30, 121 | border_width=2, 122 | border_color= "black", 123 | bg_color="#262626", 124 | fg_color= "#2E8BC0", 125 | 126 | corner_radius=5) 127 | entry_8 = customtkinter.CTkEntry(master=window, 128 | placeholder_text="CTkEntry", 129 | placeholder_text_color="black", 130 | 131 | font= main_font, 132 | text_color="black", 133 | 134 | width=220, 135 | height=30, 136 | border_width=2, 137 | border_color= "black", 138 | bg_color="#262626", 139 | fg_color= "#79ae61", 140 | 141 | corner_radius=5) 142 | entry_9 = customtkinter.CTkEntry(master=window, 143 | placeholder_text="CTkEntry", 144 | placeholder_text_color="black", 145 | 146 | font= main_font, 147 | text_color="black", 148 | 149 | width=220, 150 | height=30, 151 | border_width=2, 152 | border_color= "black", 153 | bg_color="#262626", 154 | fg_color= "#eda850", 155 | 156 | corner_radius=5) 157 | entry_10 = customtkinter.CTkEntry(master=window, 158 | placeholder_text="CTkEntry", 159 | placeholder_text_color="black", 160 | 161 | font= main_font, 162 | text_color="black", 163 | 164 | width=220, 165 | height=30, 166 | border_width=2, 167 | border_color= "black", 168 | bg_color="#262626", 169 | fg_color= "#c75d55", 170 | 171 | corner_radius=5) 172 | 173 | 174 | #placing the resources 175 | entry_1.place(x= 30, y= 30) 176 | entry_2.place(x= 30, y= 75) 177 | entry_3.place(x= 30, y= 120) 178 | entry_4.place(x= 30, y= 165) 179 | entry_5.place(x= 30, y= 210) 180 | 181 | entry_6.place(x= 30, y= 280) 182 | entry_7.place(x= 30, y= 325) 183 | entry_8.place(x= 30, y= 370) 184 | entry_9.place(x= 30, y= 415) 185 | entry_10.place(x= 30, y= 460) 186 | 187 | 188 | #run the main loop 189 | window.mainloop() -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 ArthurDEKA 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![GitHub contributors](https://img.shields.io/github/contributors/arthurdeka/CustomTkinter-Templates?style=for-the-badge) 2 | ![GitHub forks](https://img.shields.io/github/forks/arthurdeka/CustomTkinter-Templates?style=for-the-badge) 3 | ![GitHub Repo stars](https://img.shields.io/github/stars/arthurdeka/CustomTkinter-Templates?style=for-the-badge) 4 | ![GitHub Issues or Pull Requests](https://img.shields.io/github/issues/arthurdeka/CustomTkinter-Templates?style=for-the-badge) 5 | ![GitHub License](https://img.shields.io/github/license/arthurdeka/CustomTkinter-Templates?style=for-the-badge) 6 | [![LinkedIn](https://img.shields.io/badge/linkedin-%230077B5.svg?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/arthur-w-a-rodrigues-23416b293/) 7 | 8 | 9 |
10 |
11 | 12 | Logo 13 | 14 | 15 |

CustomTkinter Templates

16 | 17 |

18 | A collection of Python CustomTkinter templates for various types of widgets and simple example projects 19 |
20 |
21 | Report Bug 22 | · 23 | Request Feature 24 |

25 |
26 | 27 | > ## Important 28 | > This code requires CustomTkinter, install the module with pip: 29 | > ``` 30 | > pip install customtkinter 31 | > ``` 32 | 33 | ## About The Project 34 | 35 | * Uses CustomTkinter 36 | * Has templates for various types of widgets 37 | * Has simple example projects 38 | 39 |
40 | 41 | 42 | ## Built With 43 | 44 | * ![Python](https://img.shields.io/badge/python-3670A0?style=for-the-badge&logo=python&logoColor=ffdd54) 45 | 46 |
47 | 48 | 49 | ## Prerequisites To Run Locally 50 | * Recommended UV for package resolver 51 | * Meant to be run in Python 3.10 52 | 53 | 54 |
55 | 56 | ## Project's templates 57 | 58 |
59 | 60 | * **--> [Contacts List](https://github.com/arthurdeka/CustomTkinter-Templates/blob/main/app-EXAMPLES/Contacts-List.py)** 61 | 62 | ![contacts-lista](https://user-images.githubusercontent.com/97618574/217103307-72e63e50-99fc-46f2-af67-4046039280d4.png) 63 | 64 | --- 65 | * **--> [Video Downloader App](https://github.com/arthurdeka/CustomTkinter-Templates/tree/main/app-EXAMPLES/video-downloader-app)** 66 | 67 | ![image](https://user-images.githubusercontent.com/97618574/231630467-abcf28d0-413e-4b80-922c-9e12071d9c5c.png) 68 | 69 | --- 70 | * **--> [Dollar To Euro Conversor](https://github.com/arthurdeka/CustomTkinter-Templates/blob/main/app-EXAMPLES/Dollar-To-Euro-Conversor.py)** 71 | 72 | ![Captura de tela 2024-07-30 123405](https://github.com/user-attachments/assets/d291b0bf-46ef-430a-ab1a-04c87e3348e5) 73 | 74 | --- 75 | * **--> [Password Generator](https://github.com/arthurdeka/CustomTkinter-Templates/blob/main/app-EXAMPLES/PasswordGenerator.py)** 76 | 77 | ![Captura de tela 2024-08-04 115142](https://github.com/user-attachments/assets/3dda3027-8fac-4cb0-b37c-2a9a6529bfdf) 78 | 79 |
80 | 81 | ## Create Tkinter Interfaces Easily With CustomTkBuilder! 82 |
83 | 84 | Banner 85 | 86 |
87 | -------------------------------------------------------------------------------- /app-EXAMPLES/Contacts-List.py: -------------------------------------------------------------------------------- 1 | import tkinter 2 | import customtkinter 3 | 4 | #function to add the contact 5 | def add_contact(): 6 | nome = name_entry.get() 7 | telefone = tel_entry.get() 8 | 9 | #Adds contact data to listbox 10 | contacts_listbox.insert(tkinter.END, nome + " - " + telefone) 11 | 12 | #Clears entries data 13 | name_entry.delete(0, tkinter.END) 14 | tel_entry.delete(0, tkinter.END) 15 | 16 | #creates the main window 17 | window = tkinter.Tk() 18 | window.configure(bg='#262626') 19 | window.title("Contact List") 20 | 21 | #Creates a frame to hold the widgets 22 | frame = tkinter.Frame(window, background='#262626') 23 | frame.pack() 24 | 25 | #Creates labels for name and tel 26 | name_label = customtkinter.CTkLabel( 27 | master=frame, 28 | text="Name:", 29 | text_color= "black", 30 | width=120, 31 | height=25, 32 | fg_color=("white", "gray75"), 33 | bg_color="#262626", 34 | corner_radius=8) 35 | name_label.grid(row=0, column=0, padx=7, pady=10) 36 | 37 | 38 | tel_label = customtkinter.CTkLabel( 39 | master=frame, 40 | text="Tel:", 41 | text_color= "black", 42 | width=120, 43 | height=25, 44 | fg_color=("white", "gray75"), 45 | bg_color="#262626", 46 | corner_radius=8) 47 | tel_label.grid(row=1, column=0) 48 | 49 | #Creates entries for name and phone 50 | name_entry = customtkinter.CTkEntry( 51 | master=frame, 52 | text_color="white", 53 | 54 | border_width=2, 55 | border_color= "#d3d3d3", 56 | bg_color="#262626", 57 | fg_color= "#262626", 58 | 59 | corner_radius=5) 60 | name_entry.grid(row=0, column=1, padx=7) 61 | 62 | 63 | tel_entry = customtkinter.CTkEntry( 64 | master=frame, 65 | text_color="white", 66 | 67 | border_width=2, 68 | border_color= "#d3d3d3", 69 | bg_color="#262626", 70 | fg_color= "#262626", 71 | 72 | corner_radius=5) 73 | tel_entry.grid(row=1, column=1) 74 | 75 | #Creates a button to add a new contact 76 | add_button = customtkinter.CTkButton( 77 | master= frame, 78 | command= add_contact, 79 | text= "Add", 80 | text_color="white", 81 | hover= True, 82 | hover_color= "black", 83 | height=40, 84 | width= 120, 85 | border_width=2, 86 | corner_radius=20, 87 | border_color= "black", 88 | bg_color="#262626", 89 | fg_color= "#262626", 90 | ) 91 | add_button.grid(row=2, column=0, columnspan=2, pady=15) 92 | 93 | 94 | # Creates a listbox to show contacts 95 | contacts_listbox = tkinter.Listbox(window, bg="#262626", fg="white") 96 | contacts_listbox.pack() 97 | 98 | 99 | window.mainloop() 100 | -------------------------------------------------------------------------------- /app-EXAMPLES/Dollar-To-Euro-Conversor.py: -------------------------------------------------------------------------------- 1 | # libraries Import 2 | from tkinter import * 3 | import customtkinter 4 | import requests 5 | 6 | # Function to get the exchange rate USD to EUR 7 | def get_exchange_rate(): 8 | url = "https://api.exchangerate-api.com/v4/latest/USD" 9 | response = requests.get(url) 10 | data = response.json() 11 | return data['rates']['EUR'] 12 | 13 | # Function to convert dollars to euros 14 | def convert_dollar_to_euro(): 15 | dollar_amount = float(Entry_id1.get()) 16 | rate = get_exchange_rate() 17 | euro_amount = dollar_amount * rate 18 | Label_id5.configure(text=f"{euro_amount:.2f} EUR") 19 | 20 | # Main Window Properties 21 | window = Tk() 22 | window.title("Tkinter") 23 | window.geometry("290x234") 24 | window.configure(bg="#0f0f0f") 25 | 26 | Entry_id1 = customtkinter.CTkEntry( 27 | master=window, 28 | placeholder_text="Value in Dollars $", 29 | placeholder_text_color="#fdba00", 30 | font=("Arial", 14), 31 | text_color="#000000", 32 | height=30, 33 | width=220, 34 | border_width=2, 35 | corner_radius=6, 36 | border_color="#ffbb00", 37 | bg_color="#0f0f0f", 38 | fg_color="#404040", 39 | ) 40 | Entry_id1.place(x=30, y=120) 41 | 42 | Label_id5 = customtkinter.CTkLabel( 43 | master=window, 44 | text="=", 45 | font=("Arial", 14), 46 | text_color="#ffffff", 47 | height=30, 48 | width=220, 49 | corner_radius=0, 50 | bg_color="#0f0f0f", 51 | fg_color="#0f0f0f", 52 | ) 53 | Label_id5.place(x=40, y=160) 54 | 55 | Button_id4 = customtkinter.CTkButton( 56 | master=window, 57 | text="Convert", 58 | font=("undefined", 12), 59 | text_color="#000000", 60 | hover=True, 61 | hover_color="#949494", 62 | height=24, 63 | width=220, 64 | border_width=2, 65 | corner_radius=12, 66 | border_color="#000000", 67 | bg_color="#0f0f0f", 68 | fg_color="#F0F0F0", 69 | command=convert_dollar_to_euro 70 | ) 71 | Button_id4.place(x=30, y=200) 72 | 73 | Label_id6 = customtkinter.CTkLabel( 74 | master=window, 75 | text="Dollar / Euro", 76 | font=("Impact", 24), 77 | text_color="#ffbb00", 78 | height=30, 79 | width=126, 80 | corner_radius=0, 81 | bg_color="#0f0f0f", 82 | fg_color="#0f0f0f", 83 | ) 84 | Label_id6.place(x=80, y=30) 85 | 86 | Label_id8 = customtkinter.CTkLabel( 87 | master=window, 88 | text="Euro €", 89 | font=("Arial", 14), 90 | text_color="#ffbb00", 91 | height=30, 92 | width=49, 93 | corner_radius=0, 94 | bg_color="#0f0f0f", 95 | fg_color="#0f0f0f", 96 | ) 97 | Label_id8.place(x=30, y=160) 98 | 99 | Label_id7 = customtkinter.CTkLabel( 100 | master=window, 101 | text="Conversor", 102 | font=("Courier New", 18), 103 | text_color="#a3a3a3", 104 | height=14, 105 | width=83, 106 | corner_radius=0, 107 | bg_color="#0f0f0f", 108 | fg_color="#0f0f0f", 109 | ) 110 | Label_id7.place(x=100, y=70) 111 | 112 | # Run the main loop 113 | window.mainloop() 114 | -------------------------------------------------------------------------------- /app-EXAMPLES/PasswordGenerator.py: -------------------------------------------------------------------------------- 1 | # libraries Import 2 | from tkinter import * 3 | import customtkinter 4 | import random 5 | import string 6 | 7 | # Function to generate password 8 | def generate_password(): 9 | length = 12 # Define the length of the password 10 | characters = string.ascii_letters + string.digits + string.punctuation 11 | password = ''.join(random.choice(characters) for i in range(length)) 12 | Entry_id2.delete(0, END) # Clear the entry field 13 | Entry_id2.insert(0, password) # Insert the new password 14 | 15 | # Main Window Properties 16 | window = Tk() 17 | window.title("Calculator") 18 | window.geometry("400x150") 19 | window.configure(bg="#212121") 20 | 21 | Entry_id2 = customtkinter.CTkEntry( 22 | master=window, 23 | placeholder_text="Generated Password", 24 | placeholder_text_color="#0084ff", 25 | font=("Arial", 14), 26 | text_color="#0084ff", 27 | height=30, 28 | width=360, 29 | border_width=2, 30 | corner_radius=6, 31 | border_color="#0084ff", 32 | bg_color="#212121", 33 | fg_color="#404040", 34 | ) 35 | Entry_id2.place(x=20, y=110) 36 | 37 | Button_id1 = customtkinter.CTkButton( 38 | master=window, 39 | text="Generate Password", 40 | font=("Arial", 14), 41 | text_color="#000000", 42 | hover=True, 43 | hover_color="#949494", 44 | height=30, 45 | width=195, 46 | border_width=2, 47 | corner_radius=6, 48 | border_color="#000000", 49 | bg_color="#212121", 50 | fg_color="#F0F0F0", 51 | command=generate_password # Link the function to the button 52 | ) 53 | Button_id1.place(x=110, y=20) 54 | 55 | Label_id3 = customtkinter.CTkLabel( 56 | master=window, 57 | text="Generated Password:", 58 | font=("Arial", 14), 59 | text_color="#00ccff", 60 | height=25, 61 | width=143, 62 | corner_radius=0, 63 | bg_color="#212121", 64 | fg_color="#212121", 65 | ) 66 | Label_id3.place(x=20, y=80) 67 | 68 | # Run the main loop 69 | window.mainloop() 70 | -------------------------------------------------------------------------------- /app-EXAMPLES/video-downloader-app/gotchatube.py: -------------------------------------------------------------------------------- 1 | import tkinter 2 | import customtkinter 3 | #video downloader library 4 | from pytube import YouTube 5 | 6 | 7 | #video download function 8 | def downloadVideo(): 9 | url = customtkinter.CTkEntry.get(videoURL) 10 | exit_dir = customtkinter.CTkEntry.get(exitPath) 11 | 12 | video = YouTube(url) 13 | stream = video.streams.get_highest_resolution() 14 | stream.download(output_path = exit_dir) 15 | 16 | 17 | #creates the main window 18 | window = tkinter.Tk() 19 | window.title("GotchaTube!") 20 | window.geometry("530x165") 21 | window.resizable(width = False ,height = False) 22 | window.configure(bg='#252525') 23 | 24 | 25 | #creating the widgets 26 | logo = tkinter.PhotoImage(file="logo.png") 27 | label_logo = tkinter.Label(window, image=logo, bd=0) 28 | 29 | videoURL = customtkinter.CTkEntry( 30 | master=window, 31 | placeholder_text='Enter video URL here', 32 | width= 345, 33 | height=35, 34 | ) 35 | exitPath = customtkinter.CTkEntry( 36 | master=window, 37 | placeholder_text='File exit path', 38 | width= 345, 39 | height=35, 40 | ) 41 | 42 | downloadButton = customtkinter.CTkButton( 43 | master=window, 44 | command=downloadVideo, 45 | text="Download", 46 | text_color="white", 47 | hover= True, 48 | hover_color= "black", 49 | height=35, 50 | width= 120, 51 | border_width=2, 52 | corner_radius=4, 53 | border_color= "#5d6266", 54 | bg_color="#262626", 55 | fg_color= "#262626", 56 | ) 57 | 58 | 59 | #placing the widgets 60 | label_logo.place(x= 22, y= 18) 61 | videoURL.place(x= 18, y= 65) 62 | exitPath.place(x= 18, y= 110) 63 | downloadButton.place(x= 380, y= 110) 64 | 65 | 66 | #running the app 67 | window.mainloop() -------------------------------------------------------------------------------- /app-EXAMPLES/video-downloader-app/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arthurdeka/CustomTkinter-Templates/c0fa200979b7a867092e721a70a3b106877c21db/app-EXAMPLES/video-downloader-app/logo.png -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "customtkinter-templates" 3 | version = "0.1.0" 4 | description = "Add your description here" 5 | readme = "README.md" 6 | requires-python = ">=3.10" 7 | dependencies = [ 8 | "customtkinter>=5.2.2", 9 | "requests>=2.32.3", 10 | ] 11 | -------------------------------------------------------------------------------- /uv.lock: -------------------------------------------------------------------------------- 1 | version = 1 2 | requires-python = ">=3.10" 3 | 4 | [[package]] 5 | name = "certifi" 6 | version = "2024.12.14" 7 | source = { registry = "https://pypi.org/simple" } 8 | sdist = { url = "https://files.pythonhosted.org/packages/0f/bd/1d41ee578ce09523c81a15426705dd20969f5abf006d1afe8aeff0dd776a/certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db", size = 166010 } 9 | wheels = [ 10 | { url = "https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56", size = 164927 }, 11 | ] 12 | 13 | [[package]] 14 | name = "charset-normalizer" 15 | version = "3.4.1" 16 | source = { registry = "https://pypi.org/simple" } 17 | sdist = { url = "https://files.pythonhosted.org/packages/16/b0/572805e227f01586461c80e0fd25d65a2115599cc9dad142fee4b747c357/charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3", size = 123188 } 18 | wheels = [ 19 | { url = "https://files.pythonhosted.org/packages/0d/58/5580c1716040bc89206c77d8f74418caf82ce519aae06450393ca73475d1/charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de", size = 198013 }, 20 | { url = "https://files.pythonhosted.org/packages/d0/11/00341177ae71c6f5159a08168bcb98c6e6d196d372c94511f9f6c9afe0c6/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176", size = 141285 }, 21 | { url = "https://files.pythonhosted.org/packages/01/09/11d684ea5819e5a8f5100fb0b38cf8d02b514746607934134d31233e02c8/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037", size = 151449 }, 22 | { url = "https://files.pythonhosted.org/packages/08/06/9f5a12939db324d905dc1f70591ae7d7898d030d7662f0d426e2286f68c9/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f", size = 143892 }, 23 | { url = "https://files.pythonhosted.org/packages/93/62/5e89cdfe04584cb7f4d36003ffa2936681b03ecc0754f8e969c2becb7e24/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a", size = 146123 }, 24 | { url = "https://files.pythonhosted.org/packages/a9/ac/ab729a15c516da2ab70a05f8722ecfccc3f04ed7a18e45c75bbbaa347d61/charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a", size = 147943 }, 25 | { url = "https://files.pythonhosted.org/packages/03/d2/3f392f23f042615689456e9a274640c1d2e5dd1d52de36ab8f7955f8f050/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247", size = 142063 }, 26 | { url = "https://files.pythonhosted.org/packages/f2/e3/e20aae5e1039a2cd9b08d9205f52142329f887f8cf70da3650326670bddf/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408", size = 150578 }, 27 | { url = "https://files.pythonhosted.org/packages/8d/af/779ad72a4da0aed925e1139d458adc486e61076d7ecdcc09e610ea8678db/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb", size = 153629 }, 28 | { url = "https://files.pythonhosted.org/packages/c2/b6/7aa450b278e7aa92cf7732140bfd8be21f5f29d5bf334ae987c945276639/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d", size = 150778 }, 29 | { url = "https://files.pythonhosted.org/packages/39/f4/d9f4f712d0951dcbfd42920d3db81b00dd23b6ab520419626f4023334056/charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807", size = 146453 }, 30 | { url = "https://files.pythonhosted.org/packages/49/2b/999d0314e4ee0cff3cb83e6bc9aeddd397eeed693edb4facb901eb8fbb69/charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f", size = 95479 }, 31 | { url = "https://files.pythonhosted.org/packages/2d/ce/3cbed41cff67e455a386fb5e5dd8906cdda2ed92fbc6297921f2e4419309/charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f", size = 102790 }, 32 | { url = "https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125", size = 194995 }, 33 | { url = "https://files.pythonhosted.org/packages/7a/28/0b9fefa7b8b080ec492110af6d88aa3dea91c464b17d53474b6e9ba5d2c5/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1", size = 139471 }, 34 | { url = "https://files.pythonhosted.org/packages/71/64/d24ab1a997efb06402e3fc07317e94da358e2585165930d9d59ad45fcae2/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3", size = 149831 }, 35 | { url = "https://files.pythonhosted.org/packages/37/ed/be39e5258e198655240db5e19e0b11379163ad7070962d6b0c87ed2c4d39/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd", size = 142335 }, 36 | { url = "https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00", size = 143862 }, 37 | { url = "https://files.pythonhosted.org/packages/c6/c7/32da20821cf387b759ad24627a9aca289d2822de929b8a41b6241767b461/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12", size = 145673 }, 38 | { url = "https://files.pythonhosted.org/packages/68/85/f4288e96039abdd5aeb5c546fa20a37b50da71b5cf01e75e87f16cd43304/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77", size = 140211 }, 39 | { url = "https://files.pythonhosted.org/packages/28/a3/a42e70d03cbdabc18997baf4f0227c73591a08041c149e710045c281f97b/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146", size = 148039 }, 40 | { url = "https://files.pythonhosted.org/packages/85/e4/65699e8ab3014ecbe6f5c71d1a55d810fb716bbfd74f6283d5c2aa87febf/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd", size = 151939 }, 41 | { url = "https://files.pythonhosted.org/packages/b1/82/8e9fe624cc5374193de6860aba3ea8070f584c8565ee77c168ec13274bd2/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6", size = 149075 }, 42 | { url = "https://files.pythonhosted.org/packages/3d/7b/82865ba54c765560c8433f65e8acb9217cb839a9e32b42af4aa8e945870f/charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8", size = 144340 }, 43 | { url = "https://files.pythonhosted.org/packages/b5/b6/9674a4b7d4d99a0d2df9b215da766ee682718f88055751e1e5e753c82db0/charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b", size = 95205 }, 44 | { url = "https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76", size = 102441 }, 45 | { url = "https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545", size = 196105 }, 46 | { url = "https://files.pythonhosted.org/packages/d3/8c/90bfabf8c4809ecb648f39794cf2a84ff2e7d2a6cf159fe68d9a26160467/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7", size = 140404 }, 47 | { url = "https://files.pythonhosted.org/packages/ad/8f/e410d57c721945ea3b4f1a04b74f70ce8fa800d393d72899f0a40526401f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757", size = 150423 }, 48 | { url = "https://files.pythonhosted.org/packages/f0/b8/e6825e25deb691ff98cf5c9072ee0605dc2acfca98af70c2d1b1bc75190d/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa", size = 143184 }, 49 | { url = "https://files.pythonhosted.org/packages/3e/a2/513f6cbe752421f16d969e32f3583762bfd583848b763913ddab8d9bfd4f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d", size = 145268 }, 50 | { url = "https://files.pythonhosted.org/packages/74/94/8a5277664f27c3c438546f3eb53b33f5b19568eb7424736bdc440a88a31f/charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616", size = 147601 }, 51 | { url = "https://files.pythonhosted.org/packages/7c/5f/6d352c51ee763623a98e31194823518e09bfa48be2a7e8383cf691bbb3d0/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b", size = 141098 }, 52 | { url = "https://files.pythonhosted.org/packages/78/d4/f5704cb629ba5ab16d1d3d741396aec6dc3ca2b67757c45b0599bb010478/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d", size = 149520 }, 53 | { url = "https://files.pythonhosted.org/packages/c5/96/64120b1d02b81785f222b976c0fb79a35875457fa9bb40827678e54d1bc8/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a", size = 152852 }, 54 | { url = "https://files.pythonhosted.org/packages/84/c9/98e3732278a99f47d487fd3468bc60b882920cef29d1fa6ca460a1fdf4e6/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9", size = 150488 }, 55 | { url = "https://files.pythonhosted.org/packages/13/0e/9c8d4cb99c98c1007cc11eda969ebfe837bbbd0acdb4736d228ccaabcd22/charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1", size = 146192 }, 56 | { url = "https://files.pythonhosted.org/packages/b2/21/2b6b5b860781a0b49427309cb8670785aa543fb2178de875b87b9cc97746/charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35", size = 95550 }, 57 | { url = "https://files.pythonhosted.org/packages/21/5b/1b390b03b1d16c7e382b561c5329f83cc06623916aab983e8ab9239c7d5c/charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f", size = 102785 }, 58 | { url = "https://files.pythonhosted.org/packages/38/94/ce8e6f63d18049672c76d07d119304e1e2d7c6098f0841b51c666e9f44a0/charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda", size = 195698 }, 59 | { url = "https://files.pythonhosted.org/packages/24/2e/dfdd9770664aae179a96561cc6952ff08f9a8cd09a908f259a9dfa063568/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313", size = 140162 }, 60 | { url = "https://files.pythonhosted.org/packages/24/4e/f646b9093cff8fc86f2d60af2de4dc17c759de9d554f130b140ea4738ca6/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9", size = 150263 }, 61 | { url = "https://files.pythonhosted.org/packages/5e/67/2937f8d548c3ef6e2f9aab0f6e21001056f692d43282b165e7c56023e6dd/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b", size = 142966 }, 62 | { url = "https://files.pythonhosted.org/packages/52/ed/b7f4f07de100bdb95c1756d3a4d17b90c1a3c53715c1a476f8738058e0fa/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11", size = 144992 }, 63 | { url = "https://files.pythonhosted.org/packages/96/2c/d49710a6dbcd3776265f4c923bb73ebe83933dfbaa841c5da850fe0fd20b/charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f", size = 147162 }, 64 | { url = "https://files.pythonhosted.org/packages/b4/41/35ff1f9a6bd380303dea55e44c4933b4cc3c4850988927d4082ada230273/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd", size = 140972 }, 65 | { url = "https://files.pythonhosted.org/packages/fb/43/c6a0b685fe6910d08ba971f62cd9c3e862a85770395ba5d9cad4fede33ab/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2", size = 149095 }, 66 | { url = "https://files.pythonhosted.org/packages/4c/ff/a9a504662452e2d2878512115638966e75633519ec11f25fca3d2049a94a/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886", size = 152668 }, 67 | { url = "https://files.pythonhosted.org/packages/6c/71/189996b6d9a4b932564701628af5cee6716733e9165af1d5e1b285c530ed/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601", size = 150073 }, 68 | { url = "https://files.pythonhosted.org/packages/e4/93/946a86ce20790e11312c87c75ba68d5f6ad2208cfb52b2d6a2c32840d922/charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd", size = 145732 }, 69 | { url = "https://files.pythonhosted.org/packages/cd/e5/131d2fb1b0dddafc37be4f3a2fa79aa4c037368be9423061dccadfd90091/charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407", size = 95391 }, 70 | { url = "https://files.pythonhosted.org/packages/27/f2/4f9a69cc7712b9b5ad8fdb87039fd89abba997ad5cbe690d1835d40405b0/charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971", size = 102702 }, 71 | { url = "https://files.pythonhosted.org/packages/0e/f6/65ecc6878a89bb1c23a086ea335ad4bf21a588990c3f535a227b9eea9108/charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85", size = 49767 }, 72 | ] 73 | 74 | [[package]] 75 | name = "customtkinter" 76 | version = "5.2.2" 77 | source = { registry = "https://pypi.org/simple" } 78 | dependencies = [ 79 | { name = "darkdetect" }, 80 | { name = "packaging" }, 81 | ] 82 | sdist = { url = "https://files.pythonhosted.org/packages/cf/48/c5a9d44188c44702e1e3db493c741e9c779596835a761b819fe15431d163/customtkinter-5.2.2.tar.gz", hash = "sha256:fd8db3bafa961c982ee6030dba80b4c2e25858630756b513986db19113d8d207", size = 261999 } 83 | wheels = [ 84 | { url = "https://files.pythonhosted.org/packages/3b/b1/b43b33001a77256b335511e75f257d001082350b8506c8807f30c98db052/customtkinter-5.2.2-py3-none-any.whl", hash = "sha256:14ad3e7cd3cb3b9eb642b9d4e8711ae80d3f79fb82545ad11258eeffb2e6b37c", size = 296062 }, 85 | ] 86 | 87 | [[package]] 88 | name = "customtkinter-templates" 89 | version = "0.1.0" 90 | source = { virtual = "." } 91 | dependencies = [ 92 | { name = "customtkinter" }, 93 | { name = "requests" }, 94 | ] 95 | 96 | [package.metadata] 97 | requires-dist = [ 98 | { name = "customtkinter", specifier = ">=5.2.2" }, 99 | { name = "requests", specifier = ">=2.32.3" }, 100 | ] 101 | 102 | [[package]] 103 | name = "darkdetect" 104 | version = "0.8.0" 105 | source = { registry = "https://pypi.org/simple" } 106 | sdist = { url = "https://files.pythonhosted.org/packages/45/77/7575be73bf12dee231d0c6e60ce7fb7a7be4fcd58823374fc59a6e48262e/darkdetect-0.8.0.tar.gz", hash = "sha256:b5428e1170263eb5dea44c25dc3895edd75e6f52300986353cd63533fe7df8b1", size = 7681 } 107 | wheels = [ 108 | { url = "https://files.pythonhosted.org/packages/f2/f2/728f041460f1b9739b85ee23b45fa5a505962ea11fd85bdbe2a02b021373/darkdetect-0.8.0-py3-none-any.whl", hash = "sha256:a7509ccf517eaad92b31c214f593dbcf138ea8a43b2935406bbd565e15527a85", size = 8955 }, 109 | ] 110 | 111 | [[package]] 112 | name = "idna" 113 | version = "3.10" 114 | source = { registry = "https://pypi.org/simple" } 115 | sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490 } 116 | wheels = [ 117 | { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, 118 | ] 119 | 120 | [[package]] 121 | name = "packaging" 122 | version = "24.2" 123 | source = { registry = "https://pypi.org/simple" } 124 | sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } 125 | wheels = [ 126 | { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, 127 | ] 128 | 129 | [[package]] 130 | name = "requests" 131 | version = "2.32.3" 132 | source = { registry = "https://pypi.org/simple" } 133 | dependencies = [ 134 | { name = "certifi" }, 135 | { name = "charset-normalizer" }, 136 | { name = "idna" }, 137 | { name = "urllib3" }, 138 | ] 139 | sdist = { url = "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", size = 131218 } 140 | wheels = [ 141 | { url = "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", size = 64928 }, 142 | ] 143 | 144 | [[package]] 145 | name = "urllib3" 146 | version = "2.3.0" 147 | source = { registry = "https://pypi.org/simple" } 148 | sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268 } 149 | wheels = [ 150 | { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369 }, 151 | ] 152 | --------------------------------------------------------------------------------