diff --git a/Pipfile b/Pipfile index 72b70b6f..f65c8985 100644 --- a/Pipfile +++ b/Pipfile @@ -5,11 +5,16 @@ verify_ssl = true [dev-packages] flake8 = "*" +yapf = "*" +vim-vint = "*" +pycodestyle = "*" +neovim = "*" [packages] +pygame = "*" [requires] python_version = "3.7" [scripts] -lint = "python -m flake8" \ No newline at end of file +lint = "python -m flake8" diff --git a/Pipfile.lock b/Pipfile.lock index 79354a3c..46e54b0b 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "a376db0bd471e38a7080cd854c46349b46922db98afeaf83d17b84923fbe9710" + "sha256": "24ae0b970d6ae3717ea2ca30ffeae536cbe45486d0998bcf21d3f7f28883476c" }, "pipfile-spec": 6, "requires": { @@ -15,8 +15,53 @@ } ] }, - "default": {}, + "default": { + "pygame": { + "hashes": [ + "sha256:06dc92ccfea33b85f209db3d49f99a2a30c88fe9fb80fa2564cee443ece787b5", + "sha256:0919a2ec5fcb0d00518c2a5fa99858ccf22d7fbcc0e12818b317062d11386984", + "sha256:0a8c92e700e0042faefa998fa064616f330201890d6ea1c993eb3ff30ab53e99", + "sha256:220a1048ebb3d11a4d48cc4219ec8f65ca62fcafd255239478677625e8ead2e9", + "sha256:315861d2b8428f7b4d56d2c98d6c1acc18f08c77af4b129211bc036774f64be2", + "sha256:3469e87867832fe5226396626a8a6a9dac9b2e21a7819dd8cd96cf0e08bbcd41", + "sha256:54c19960180626165512d596235d75dc022d38844467cec769a8d8153fd66645", + "sha256:5ba598736ab9716f53dc943a659a9578f62acfe00c0c9c5490f3aca61d078f75", + "sha256:60ddc4f361babb30ff2d554132b1f3296490f3149d6c1c77682213563f59937a", + "sha256:6a49ab8616a9de534f1bf62c98beabf0e0bb0b6ff8917576bba22820bba3fdad", + "sha256:6d4966eeba652df2fd9a757b3fc5b29b578b47b58f991ad714471661ea2141cb", + "sha256:700d1781c999af25d11bfd1f3e158ebb660f72ebccb2040ecafe5069d0b2c0b6", + "sha256:73f4c28e894e76797b8ccaf6eb1205b433efdb803c70f489ebc3db6ac9c097e6", + "sha256:786eca2bea11abd924f3f67eb2483bcb22acff08f28dbdbf67130abe54b23797", + "sha256:7bcf586a1c51a735361ca03561979eea3180de45e6165bcdfa12878b752544af", + "sha256:82a1e93d82c1babceeb278c55012a9f5140e77665d372a6d97ec67786856d254", + "sha256:9e03589bc80a21ae951fca7659a767b7cac668289937e3756c0ab3d753cf6d24", + "sha256:aa8926a4e34fb0943abe1a8bb04a0ad82265341bf20064c0862db0a521100dfc", + "sha256:aa90689b889c417d2ac571ef2bbb5f7e735ae30c7553c60fae7508404f46c101", + "sha256:c9f8cdefee267a2e690bf17d61a8f5670b620f25a981f24781b034363a8eedc9", + "sha256:d9177afb2f46103bfc28a51fbc49ce18987a857e5c934db47b4a7030cb30fbd0", + "sha256:deb0551d4bbfb8131e2463a7fe1943bfcec5beb11acdf9c4bfa27fa5a9758d62", + "sha256:e7edfe57a5972aa9130ce9a186020a0f097e7a8e4c25e292109bdae1432b77f9", + "sha256:f0ad32efb9e26160645d62ba6cf3e5a5828dc4e82e8f41f9badfe7b685b07295" + ], + "index": "pypi", + "version": "==1.9.4" + } + }, "develop": { + "ansicolor": { + "hashes": [ + "sha256:313b217a7abd29c8560f1b5a20fe40ec61e84cfddc514602d544159f49bfa342", + "sha256:d17e1b07b9dd7ded31699fbca53ae6cd373584f9b6dcbc124d1f321ebad31f1d" + ], + "version": "==0.2.6" + }, + "chardet": { + "hashes": [ + "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", + "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + ], + "version": "==3.0.4" + }, "entrypoints": { "hashes": [ "sha256:589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19", @@ -26,11 +71,35 @@ }, "flake8": { "hashes": [ - "sha256:6d8c66a65635d46d54de59b027a1dda40abbe2275b3164b634835ac9c13fd048", - "sha256:6eab21c6e34df2c05416faa40d0c59963008fff29b6f0ccfe8fa28152ab3e383" + "sha256:859996073f341f2670741b51ec1e67a01da142831aa1fdc6242dbf88dffbe661", + "sha256:a796a115208f5c03b18f332f7c11729812c8c3ded6c46319c59b53efd3819da8" ], "index": "pypi", - "version": "==3.7.6" + "version": "==3.7.7" + }, + "greenlet": { + "hashes": [ + "sha256:000546ad01e6389e98626c1367be58efa613fa82a1be98b0c6fc24b563acc6d0", + "sha256:0d48200bc50cbf498716712129eef819b1729339e34c3ae71656964dac907c28", + "sha256:23d12eacffa9d0f290c0fe0c4e81ba6d5f3a5b7ac3c30a5eaf0126bf4deda5c8", + "sha256:37c9ba82bd82eb6a23c2e5acc03055c0e45697253b2393c9a50cef76a3985304", + "sha256:51503524dd6f152ab4ad1fbd168fc6c30b5795e8c70be4410a64940b3abb55c0", + "sha256:8041e2de00e745c0e05a502d6e6db310db7faa7c979b3a5877123548a4c0b214", + "sha256:81fcd96a275209ef117e9ec91f75c731fa18dcfd9ffaa1c0adbdaa3616a86043", + "sha256:853da4f9563d982e4121fed8c92eea1a4594a2299037b3034c3c898cb8e933d6", + "sha256:8b4572c334593d449113f9dc8d19b93b7b271bdbe90ba7509eb178923327b625", + "sha256:9416443e219356e3c31f1f918a91badf2e37acf297e2fa13d24d1cc2380f8fbc", + "sha256:9854f612e1b59ec66804931df5add3b2d5ef0067748ea29dc60f0efdcda9a638", + "sha256:99a26afdb82ea83a265137a398f570402aa1f2b5dfb4ac3300c026931817b163", + "sha256:a19bf883b3384957e4a4a13e6bd1ae3d85ae87f4beb5957e35b0be287f12f4e4", + "sha256:a9f145660588187ff835c55a7d2ddf6abfc570c2651c276d3d4be8a2766db490", + "sha256:ac57fcdcfb0b73bb3203b58a14501abb7e5ff9ea5e2edfa06bb03035f0cff248", + "sha256:bcb530089ff24f6458a81ac3fa699e8c00194208a724b644ecc68422e1111939", + "sha256:beeabe25c3b704f7d56b573f7d2ff88fc99f0138e43480cecdfcaa3b87fe4f87", + "sha256:d634a7ea1fc3380ff96f9e44d8d22f38418c1c381d5fac680b272d7d90883720", + "sha256:d97b0661e1aead761f0ded3b769044bb00ed5d33e1ec865e891a8b128bf7c656" + ], + "version": "==0.4.15" }, "mccabe": { "hashes": [ @@ -39,11 +108,41 @@ ], "version": "==0.6.1" }, + "msgpack": { + "hashes": [ + "sha256:26cb40116111c232bc235ce131cc3b4e76549088cb154e66a2eb8ff6fcc907ec", + "sha256:300fd3f2c664a3bf473d6a952f843b4a71454f4c592ed7e74a36b205c1782d28", + "sha256:3129c355342853007de4a2a86e75eab966119733eb15748819b6554363d4e85c", + "sha256:31f6d645ee5a97d59d3263fab9e6be76f69fa131cddc0d94091a3c8aca30d67a", + "sha256:3ce7ef7ee2546c3903ca8c934d09250531b80c6127e6478781ae31ed835aac4c", + "sha256:4008c72f5ef2b7936447dcb83db41d97e9791c83221be13d5e19db0796df1972", + "sha256:62bd8e43d204580308d477a157b78d3fee2fb4c15d32578108dc5d89866036c8", + "sha256:70cebfe08fb32f83051971264466eadf183101e335d8107b80002e632f425511", + "sha256:72cb7cf85e9df5251abd7b61a1af1fb77add15f40fa7328e924a9c0b6bc7a533", + "sha256:7c55649965c35eb32c499d17dadfb8f53358b961582846e1bc06f66b9bccc556", + "sha256:86b963a5de11336ec26bc4f839327673c9796b398b9f1fe6bb6150c2a5d00f0f", + "sha256:8c73c9bcdfb526247c5e4f4f6cf581b9bb86b388df82cfcaffde0a6e7bf3b43a", + "sha256:8e68c76c6aff4849089962d25346d6784d38e02baa23ffa513cf46be72e3a540", + "sha256:97ac6b867a8f63debc64f44efdc695109d541ecc361ee2dce2c8884ab37360a1", + "sha256:9d4f546af72aa001241d74a79caec278bcc007b4bcde4099994732e98012c858", + "sha256:a28e69fe5468c9f5251c7e4e7232286d71b7dfadc74f312006ebe984433e9746", + "sha256:fd509d4aa95404ce8d86b4e32ce66d5d706fd6646c205e1c2a715d87078683a2" + ], + "version": "==0.6.1" + }, + "neovim": { + "hashes": [ + "sha256:a6a0e7a5b4433bf4e6ddcbc5c5ff44170be7d84259d002b8e8d8fb4ee78af60f" + ], + "index": "pypi", + "version": "==0.3.1" + }, "pycodestyle": { "hashes": [ "sha256:95a2219d12372f05704562a14ec30bc76b05a5b297b21a5dfe3f6fac3491ae56", "sha256:e40a936c9a450ad81df37f549d676d127b1b66000a6c500caa2b085bc0ca976c" ], + "index": "pypi", "version": "==2.5.0" }, "pyflakes": { @@ -52,6 +151,44 @@ "sha256:f277f9ca3e55de669fba45b7393a1449009cff5a37d1af10ebb76c52765269cd" ], "version": "==2.1.0" + }, + "pynvim": { + "hashes": [ + "sha256:cf6490c4e586c9da01a32f3e0ae21c61342d7ea171e06025bda210bdc95cbe05" + ], + "version": "==0.3.2" + }, + "pyyaml": { + "hashes": [ + "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", + "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", + "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", + "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", + "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", + "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", + "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", + "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", + "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", + "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", + "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" + ], + "version": "==3.13" + }, + "vim-vint": { + "hashes": [ + "sha256:8824c619857eb6e729d177363116e4f9845d19708ed832da92b0a6f96d7079ce", + "sha256:aba8938f4c720e5c70a25f4dc7d845c5ce87aba0b778d1686f18b8da0c88f234" + ], + "index": "pypi", + "version": "==0.3.19" + }, + "yapf": { + "hashes": [ + "sha256:edb47be90a56ca6f3075fe24f119a22225fbd62c66777b5d3916a7e9e793891b", + "sha256:f58069d5e0df60c078f3f986b8a63acfda73aa6ebb7cd423f6eabd1cb06420ba" + ], + "index": "pypi", + "version": "==0.26.0" } } } diff --git a/README.md b/README.md index 697c2bf7..93848742 100644 --- a/README.md +++ b/README.md @@ -30,8 +30,11 @@ You should be using [Pipenv](https://pipenv.readthedocs.io/en/latest/). Take a l # Project Information +## TEAM: Alphabetic Aerobics `# TODO` + + ## Description `# TODO` diff --git a/project/tk_main.py b/project/tk_main.py new file mode 100644 index 00000000..e5df860e --- /dev/null +++ b/project/tk_main.py @@ -0,0 +1,93 @@ +import tkinter as tk + + +class alph_aerobics (tk.Frame): + def __init__(self, master=None): + super().__init__(master) + self.master = master + self.pack() + + self.characters = { + 'punctuation': list(map(chr, range(32, 47))), + 'numbers': list(map(chr, range(48, 58))), + 'special': list(map(chr, range(58, 65))), + 'upper': list(map(chr, range(65, 91))), + 'lower': list(map(chr, range(97, 123))), + } + + self.text_box = None + self.text = "Sample_text" + self.create_window() + b = tk.Button( + self, + text="For testing features", + command=lambda: print(self.text_box.config(state="disabled")), + background="black", + foreground="white", + ) + b.grid(row=15, columnspan=3, sticky="w") + + def create_window(self): + """Creates the main app window""" + self.text_box = tk.Text(self, state="disabled") + self.text_box.grid(row=10, columnspan=9) + self.switch_keyboard("upper") + + # keyboard_select is a list of the keyboard buttons, so that these + # buttons can be made toggleable. + keyboard_select = [] + idx = 0 + for keyboard in self.characters.keys(): + b = self.create_keyboard_button(16, idx, keyboard) + keyboard_select.append(b) + idx += 1 + + def switch_keyboard(self, which_keyboard, num_columns=9): + """Replaces current keyboard with which_keyboard. + num_columns specifies the width of the keyboard - defaults to 9. + """ + for r in range(20, 24): + keys = self.grid_slaves(row=r) + for key in keys: + key.destroy() + + index = 20 * num_columns + for key in self.characters[which_keyboard]: + self.create_key(key, int(index % num_columns), + int(index / num_columns)) + index += 1 + + def create_key(self, char, c, r): + """Helper method that creates a button at (c, r). + When pressed, the button appends char to the text_box""" + b = tk.Button( + self, + text=str(char), + command=lambda: self.insert_character(char), + width=6, + background="#23D085", + ) + b.grid(column=c, row=r, sticky="nsew") + + def create_keyboard_button(self, r, c, kboard): + """Helper method that creates buttons that switch the keyboard""" + b = tk.Button( + self, + text=str(kboard), + command=lambda: self.switch_keyboard(kboard), + background="gray", + foreground="black" + ) + b.grid(row=r, column=c, sticky="nsew") + return b + + def insert_character(self, char): + """Inserts char to the textbox""" + self.text_box.config(state="normal") + self.text_box.insert(tk.CURRENT, str(char)) + self.text_box.config(state="disabled") + + +root = tk.Tk() +app = alph_aerobics(master=root) +app.mainloop()