From 2109bdbc97a464c123e0721c26741e35dd56592e Mon Sep 17 00:00:00 2001 From: MikeTheWatchGuy Date: Wed, 25 Jul 2018 06:40:14 -0400 Subject: [PATCH] Renamed demo files, new demo of tabbed forms Changed filenames to remove spaces so will be easier to work with on Linux. --- Demo_Color.py | 1729 +++++++++++++++++++++++++++++++++++ Demo_Compare_Files.py | 33 + Demo_DisplayHash1and256.py | 123 +++ Demo_DuplicateFileFinder.py | 57 ++ Demo_GoodColors.py | 50 + Demo_HowDoI.py | 55 ++ Demo_Media_Player.py | 64 ++ Demo_NonBlocking_Form.py | 59 ++ Demo_Recipes.py | 168 ++++ Demo_Tabbed_Form.py | 89 ++ 10 files changed, 2427 insertions(+) create mode 100644 Demo_Color.py create mode 100644 Demo_Compare_Files.py create mode 100644 Demo_DisplayHash1and256.py create mode 100644 Demo_DuplicateFileFinder.py create mode 100644 Demo_GoodColors.py create mode 100644 Demo_HowDoI.py create mode 100644 Demo_Media_Player.py create mode 100644 Demo_NonBlocking_Form.py create mode 100644 Demo_Recipes.py create mode 100644 Demo_Tabbed_Form.py diff --git a/Demo_Color.py b/Demo_Color.py new file mode 100644 index 00000000..142b19cb --- /dev/null +++ b/Demo_Color.py @@ -0,0 +1,1729 @@ +import PySimpleGUI as g + +MY_WINDOW_ICON = 'E:\\TheRealMyDocs\\Icons\\The Planets\\jupiter.ico' +reverse = {} +colorhex = {} + +colors = { + "abbey" : ( 76, 79, 86), + "acadia" : ( 27, 20, 4), + "acapulco" : (124, 176, 161), + "aero blue" : (201, 255, 229), + "affair" : (113, 70, 147), + "akaroa" : (212, 196, 168), + "alabaster" : (250, 250, 250), + "albescent white" : (245, 233, 211), + "algae green" : (147, 223, 184), + "alice blue" : (240, 248, 255), + "alizarin crimson" : (227, 38, 54), + "allports" : ( 0, 118, 163), + "almond" : (238, 217, 196), + "almond frost" : (144, 123, 113), + "alpine" : (175, 143, 44), + "alto" : (219, 219, 219), + "aluminium" : (169, 172, 182), + "amaranth" : (229, 43, 80), + "amazon" : ( 59, 122, 87), + "amber" : (255, 191, 0), + "americano" : (135, 117, 110), + "amethyst" : (153, 102, 204), + "amethyst smoke" : (163, 151, 180), + "amour" : (249, 234, 243), + "amulet" : (123, 159, 128), + "anakiwa" : (157, 229, 255), + "antique brass" : (200, 138, 101), + "antique bronze" : (112, 74, 7), + "anzac" : (224, 182, 70), + "apache" : (223, 190, 111), + "apple" : ( 79, 168, 61), + "apple blossom" : (175, 77, 67), + "apple green" : (226, 243, 236), + "apricot" : (235, 147, 115), + "apricot peach" : (251, 206, 177), + "apricot white" : (255, 254, 236), + "aqua deep" : ( 1, 75, 67), + "aqua forest" : ( 95, 167, 119), + "aqua haze" : (237, 245, 245), + "aqua island" : (161, 218, 215), + "aqua spring" : (234, 249, 245), + "aqua squeeze" : (232, 245, 242), + "aquamarine" : (127, 255, 212), + "aquamarine blue" : (113, 217, 226), + "arapawa" : ( 17, 12, 108), + "armadillo" : ( 67, 62, 55), + "arrowtown" : (148, 135, 113), + "ash" : (198, 195, 181), + "asparagus" : (123, 160, 91), + "asphalt" : ( 19, 10, 6), + "astra" : (250, 234, 185), + "astral" : ( 50, 125, 160), + "astronaut" : ( 40, 58, 119), + "astronaut blue" : ( 1, 62, 98), + "athens gray" : (238, 240, 243), + "aths special" : (236, 235, 206), + "atlantis" : (151, 205, 45), + "atoll" : ( 10, 111, 117), + "atomic tangerine" : (255, 153, 102), + "au chico" : (151, 96, 93), + "aubergine" : ( 59, 9, 16), + "australian mint" : (245, 255, 190), + "avocado" : (136, 141, 101), + "axolotl" : ( 78, 102, 73), + "azalea" : (247, 200, 218), + "aztec" : ( 13, 28, 25), + "azure" : ( 49, 91, 161), + "azure radiance" : ( 0, 127, 255), + "baby blue" : (224, 255, 255), + "bahama blue" : ( 2, 99, 149), + "bahia" : (165, 203, 12), + "baja white" : (255, 248, 209), + "bali hai" : (133, 159, 175), + "baltic sea" : ( 42, 38, 48), + "bamboo" : (218, 99, 4), + "banana mania" : (251, 231, 178), + "bandicoot" : (133, 132, 112), + "barberry" : (222, 215, 23), + "barley corn" : (166, 139, 91), + "barley white" : (255, 244, 206), + "barossa" : ( 68, 1, 45), + "bastille" : ( 41, 33, 48), + "battleship gray" : (130, 143, 114), + "bay leaf" : (125, 169, 141), + "bay of many" : ( 39, 58, 129), + "bazaar" : (152, 119, 123), + "bean " : ( 61, 12, 2), + "beauty bush" : (238, 193, 190), + "beaver" : (146, 111, 91), + "beeswax" : (254, 242, 199), + "beige" : (245, 245, 220), + "bermuda" : (125, 216, 198), + "bermuda gray" : (107, 139, 162), + "beryl green" : (222, 229, 192), + "bianca" : (252, 251, 243), + "big stone" : ( 22, 42, 64), + "bilbao" : ( 50, 124, 20), + "biloba flower" : (178, 161, 234), + "birch" : ( 55, 48, 33), + "bird flower" : (212, 205, 22), + "biscay" : ( 27, 49, 98), + "bismark" : ( 73, 113, 131), + "bison hide" : (193, 183, 164), + "bistre" : ( 61, 43, 31), + "bitter" : (134, 137, 116), + "bitter lemon" : (202, 224, 13), + "bittersweet" : (254, 111, 94), + "bizarre" : (238, 222, 218), + "black" : ( 0, 0, 0), + "black bean" : ( 8, 25, 16), + "black forest" : ( 11, 19, 4), + "black haze" : (246, 247, 247), + "black marlin" : ( 62, 44, 28), + "black olive" : ( 36, 46, 22), + "black pearl" : ( 4, 19, 34), + "black rock" : ( 13, 3, 50), + "black rose" : (103, 3, 45), + "black russian" : ( 10, 0, 28), + "black squeeze" : (242, 250, 250), + "black white" : (255, 254, 246), + "blackberry" : ( 77, 1, 53), + "blackcurrant" : ( 50, 41, 58), + "blaze orange" : (255, 102, 0), + "bleach white" : (254, 243, 216), + "bleached cedar" : ( 44, 33, 51), + "blizzard blue" : (163, 227, 237), + "blossom" : (220, 180, 188), + "blue" : ( 0, 0, 255), + "blue bayoux" : ( 73, 102, 121), + "blue bell" : (153, 153, 204), + "blue chalk" : (241, 233, 255), + "blue charcoal" : ( 1, 13, 26), + "blue chill" : ( 12, 137, 144), + "blue diamond" : ( 56, 4, 116), + "blue dianne" : ( 32, 72, 82), + "blue gem" : ( 44, 14, 140), + "blue haze" : (191, 190, 216), + "blue lagoon" : ( 1, 121, 135), + "blue marguerite" : (118, 102, 198), + "blue ribbon" : ( 0, 102, 255), + "blue romance" : (210, 246, 222), + "blue smoke" : (116, 136, 129), + "blue stone" : ( 1, 97, 98), + "blue violet" : (100, 86, 183), + "blue whale" : ( 4, 46, 76), + "blue zodiac" : ( 19, 38, 77), + "blumine" : ( 24, 88, 122), + "blush" : (180, 70, 104), + "blush pink" : (255, 111, 255), + "bombay" : (175, 177, 184), + "bon jour" : (229, 224, 225), + "bondi blue" : ( 0, 149, 182), + "bone" : (228, 209, 192), + "bordeaux" : ( 92, 1, 32), + "bossanova" : ( 78, 42, 90), + "boston blue" : ( 59, 145, 180), + "botticelli" : (199, 221, 229), + "bottle green" : ( 9, 54, 36), + "boulder" : (122, 122, 122), + "bouquet" : (174, 128, 158), + "bourbon" : (186, 111, 30), + "bracken" : ( 74, 42, 4), + "brandy" : (222, 193, 150), + "brandy punch" : (205, 132, 41), + "brandy rose" : (187, 137, 131), + "breaker bay" : ( 93, 161, 159), + "brick red" : (198, 45, 66), + "bridal heath" : (255, 250, 244), + "bridesmaid" : (254, 240, 236), + "bright gray" : ( 60, 65, 81), + "bright green" : (102, 255, 0), + "bright red" : (177, 0, 0), + "bright sun" : (254, 211, 60), + "bright turquoise" : ( 8, 232, 222), + "brilliant rose" : (246, 83, 166), + "brink pink" : (251, 96, 127), + "bronco" : (171, 161, 150), + "bronze" : ( 63, 33, 9), + "bronze olive" : ( 78, 66, 12), + "bronzetone" : ( 77, 64, 15), + "broom" : (255, 236, 19), + "brown" : (150, 75, 0), + "brown bramble" : ( 89, 40, 4), + "brown derby" : ( 73, 38, 21), + "brown pod" : ( 64, 24, 1), + "brown rust" : (175, 89, 62), + "brown tumbleweed" : ( 55, 41, 14), + "bubbles" : (231, 254, 255), + "buccaneer" : ( 98, 47, 48), + "bud" : (168, 174, 156), + "buddha gold" : (193, 160, 4), + "buff" : (240, 220, 130), + "bulgarian rose" : ( 72, 6, 7), + "bull shot" : (134, 77, 30), + "bunker" : ( 13, 17, 23), + "bunting" : ( 21, 31, 76), + "burgundy" : (144, 0, 32), + "burnham" : ( 0, 46, 32), + "burning orange" : (255, 112, 52), + "burning sand" : (217, 147, 118), + "burnt maroon" : ( 66, 3, 3), + "burnt orange" : (204, 85, 0), + "burnt sienna" : (233, 116, 81), + "burnt umber" : (138, 51, 36), + "bush" : ( 13, 46, 28), + "buttercup" : (243, 173, 22), + "buttered rum" : (161, 117, 13), + "butterfly bush" : ( 98, 78, 154), + "buttermilk" : (255, 241, 181), + "buttery white" : (255, 252, 234), + "cab sav" : ( 77, 10, 24), + "cabaret" : (217, 73, 114), + "cabbage pont" : ( 63, 76, 58), + "cactus" : ( 88, 113, 86), + "cadet blue" : (169, 178, 195), + "cadillac" : (176, 76, 106), + "cafe royale" : (111, 68, 12), + "calico" : (224, 192, 149), + "california" : (254, 157, 4), + "calypso" : ( 49, 114, 141), + "camarone" : ( 0, 88, 26), + "camelot" : (137, 52, 86), + "cameo" : (217, 185, 155), + "camouflage" : ( 60, 57, 16), + "camouflage green" : (120, 134, 107), + "can can" : (213, 145, 164), + "canary" : (243, 251, 98), + "candlelight" : (252, 217, 23), + "candy corn" : (251, 236, 93), + "cannon black" : ( 37, 23, 6), + "cannon pink" : (137, 67, 103), + "cape cod" : ( 60, 68, 67), + "cape honey" : (254, 229, 172), + "cape palliser" : (162, 102, 69), + "caper" : (220, 237, 180), + "caramel" : (255, 221, 175), + "cararra" : (238, 238, 232), + "cardin green" : ( 1, 54, 28), + "cardinal" : (196, 30, 58), + "cardinal pink" : (140, 5, 94), + "careys pink" : (210, 158, 170), + "caribbean green" : ( 0, 204, 153), + "carissma" : (234, 136, 168), + "carla" : (243, 255, 216), + "carmine" : (150, 0, 24), + "carnaby tan" : ( 92, 46, 1), + "carnation" : (249, 90, 97), + "carnation pink" : (255, 166, 201), + "carousel pink" : (249, 224, 237), + "carrot orange" : (237, 145, 33), + "casablanca" : (248, 184, 83), + "casal" : ( 47, 97, 104), + "cascade" : (139, 169, 165), + "cashmere" : (230, 190, 165), + "casper" : (173, 190, 209), + "castro" : ( 82, 0, 31), + "catalina blue" : ( 6, 42, 120), + "catskill white" : (238, 246, 247), + "cavern pink" : (227, 190, 190), + "cedar" : ( 62, 28, 20), + "cedar wood finish" : (113, 26, 0), + "celadon" : (172, 225, 175), + "celery" : (184, 194, 93), + "celeste" : (209, 210, 202), + "cello" : ( 30, 56, 91), + "celtic" : ( 22, 50, 34), + "cement" : (141, 118, 98), + "ceramic" : (252, 255, 249), + "cerise" : (218, 50, 135), + "cerise red" : (222, 49, 99), + "cerulean" : ( 2, 164, 211), + "cerulean blue" : ( 42, 82, 190), + "chablis" : (255, 244, 243), + "chalet green" : ( 81, 110, 61), + "chalky" : (238, 215, 148), + "chambray" : ( 53, 78, 140), + "chamois" : (237, 220, 177), + "champagne" : (250, 236, 204), + "chantilly" : (248, 195, 223), + "charade" : ( 41, 41, 55), + "chardon" : (255, 243, 241), + "chardonnay" : (255, 205, 140), + "charlotte" : (186, 238, 249), + "charm" : (212, 116, 148), + "chartreuse" : (127, 255, 0), + "chartreuse yellow" : (223, 255, 0), + "chateau green" : ( 64, 168, 96), + "chatelle" : (189, 179, 199), + "chathams blue" : ( 23, 85, 121), + "chelsea cucumber" : (131, 170, 93), + "chelsea gem" : (158, 83, 2), + "chenin" : (223, 205, 111), + "cherokee" : (252, 218, 152), + "cherry pie" : ( 42, 3, 89), + "cherrywood" : (101, 26, 20), + "cherub" : (248, 217, 233), + "chestnut" : (185, 78, 72), + "chestnut rose" : (205, 92, 92), + "chetwode blue" : (133, 129, 217), + "chicago" : ( 93, 92, 88), + "chiffon" : (241, 255, 200), + "chilean fire" : (247, 119, 3), + "chilean heath" : (255, 253, 230), + "china ivory" : (252, 255, 231), + "chino" : (206, 199, 167), + "chinook" : (168, 227, 189), + "chocolate" : ( 55, 2, 2), + "christalle" : ( 51, 3, 107), + "christi" : (103, 167, 18), + "christine" : (231, 115, 10), + "chrome white" : (232, 241, 212), + "cinder" : ( 14, 14, 24), + "cinderella" : (253, 225, 220), + "cinnabar" : (227, 66, 52), + "cinnamon" : (123, 63, 0), + "cioccolato" : ( 85, 40, 12), + "citrine white" : (250, 247, 214), + "citron" : (158, 169, 31), + "citrus" : (161, 197, 10), + "clairvoyant" : ( 72, 6, 86), + "clam shell" : (212, 182, 175), + "claret" : (127, 23, 52), + "classic rose" : (251, 204, 231), + "clay ash" : (189, 200, 179), + "clay creek" : (138, 131, 96), + "clear day" : (233, 255, 253), + "clementine" : (233, 110, 0), + "clinker" : ( 55, 29, 9), + "cloud" : (199, 196, 191), + "cloud burst" : ( 32, 46, 84), + "cloudy" : (172, 165, 159), + "clover" : ( 56, 73, 16), + "cobalt" : ( 0, 71, 171), + "cocoa bean" : ( 72, 28, 28), + "cocoa brown" : ( 48, 31, 30), + "coconut cream" : (248, 247, 220), + "cod gray" : ( 11, 11, 11), + "coffee" : (112, 101, 85), + "coffee bean" : ( 42, 20, 14), + "cognac" : (159, 56, 29), + "cola" : ( 63, 37, 0), + "cold purple" : (171, 160, 217), + "cold turkey" : (206, 186, 186), + "colonial white" : (255, 237, 188), + "comet" : ( 92, 93, 117), + "como" : ( 81, 124, 102), + "conch" : (201, 217, 210), + "concord" : (124, 123, 122), + "concrete" : (242, 242, 242), + "confetti" : (233, 215, 90), + "congo brown" : ( 89, 55, 55), + "congress blue" : ( 2, 71, 142), + "conifer" : (172, 221, 77), + "contessa" : (198, 114, 107), + "copper" : (184, 115, 51), + "copper canyon" : (126, 58, 21), + "copper rose" : (153, 102, 102), + "copper rust" : (148, 71, 71), + "copperfield" : (218, 138, 103), + "coral" : (255, 127, 80), + "coral red" : (255, 64, 64), + "coral reef" : (199, 188, 162), + "coral tree" : (168, 107, 107), + "corduroy" : ( 96, 110, 104), + "coriander" : (196, 208, 176), + "cork" : ( 64, 41, 29), + "corn" : (231, 191, 5), + "corn field" : (248, 250, 205), + "corn harvest" : (139, 107, 11), + "cornflower" : (147, 204, 234), + "cornflower blue" : (100, 149, 237), + "cornflower lilac" : (255, 176, 172), + "corvette" : (250, 211, 162), + "cosmic" : (118, 57, 93), + "cosmos" : (255, 216, 217), + "costa del sol" : ( 97, 93, 48), + "cotton candy" : (255, 183, 213), + "cotton seed" : (194, 189, 182), + "county green" : ( 1, 55, 26), + "cowboy" : ( 77, 40, 45), + "crail" : (185, 81, 64), + "cranberry" : (219, 80, 121), + "crater brown" : ( 70, 36, 37), + "cream" : (255, 253, 208), + "cream brulee" : (255, 229, 160), + "cream can" : (245, 200, 92), + "creole" : ( 30, 15, 4), + "crete" : (115, 120, 41), + "crimson" : (220, 20, 60), + "crocodile" : (115, 109, 88), + "crown of thorns" : (119, 31, 31), + "crowshead" : ( 28, 18, 8), + "cruise" : (181, 236, 223), + "crusoe" : ( 0, 72, 22), + "crusta" : (253, 123, 51), + "cumin" : (146, 67, 33), + "cumulus" : (253, 255, 213), + "cupid" : (251, 190, 218), + "curious blue" : ( 37, 150, 209), + "cutty sark" : ( 80, 118, 114), + "cyan / aqua" : ( 0, 255, 255), + "cyprus" : ( 0, 62, 64), + "daintree" : ( 1, 39, 49), + "dairy cream" : (249, 228, 188), + "daisy bush" : ( 79, 35, 152), + "dallas" : (110, 75, 38), + "dandelion" : (254, 216, 93), + "danube" : ( 96, 147, 209), + "dark blue" : ( 0, 0, 200), + "dark burgundy" : (119, 15, 5), + "dark ebony" : ( 60, 32, 5), + "dark fern" : ( 10, 72, 13), + "dark tan" : (102, 16, 16), + "dawn" : (166, 162, 154), + "dawn pink" : (243, 233, 229), + "de york" : (122, 196, 136), + "deco" : (210, 218, 151), + "deep blue" : ( 34, 8, 120), + "deep blush" : (228, 118, 152), + "deep bronze" : ( 74, 48, 4), + "deep cerulean" : ( 0, 123, 167), + "deep cove" : ( 5, 16, 64), + "deep fir" : ( 0, 41, 0), + "deep forest green" : ( 24, 45, 9), + "deep koamaru" : ( 27, 18, 123), + "deep oak" : ( 65, 32, 16), + "deep sapphire" : ( 8, 37, 103), + "deep sea" : ( 1, 130, 107), + "deep sea green" : ( 9, 88, 89), + "deep teal" : ( 0, 53, 50), + "del rio" : (176, 154, 149), + "dell" : ( 57, 100, 19), + "delta" : (164, 164, 157), + "deluge" : (117, 99, 168), + "denim" : ( 21, 96, 189), + "derby" : (255, 238, 216), + "desert" : (174, 96, 32), + "desert sand" : (237, 201, 175), + "desert storm" : (248, 248, 247), + "dew" : (234, 255, 254), + "di serria" : (219, 153, 94), + "diesel" : ( 19, 0, 0), + "dingley" : ( 93, 119, 71), + "disco" : (135, 21, 80), + "dixie" : (226, 148, 24), + "dodger blue" : ( 30, 144, 255), + "dolly" : (249, 255, 139), + "dolphin" : (100, 96, 119), + "domino" : (142, 119, 94), + "don juan" : ( 93, 76, 81), + "donkey brown" : (166, 146, 121), + "dorado" : (107, 87, 85), + "double colonial white" : (238, 227, 173), + "double pearl lusta" : (252, 244, 208), + "double spanish white" : (230, 215, 185), + "dove gray" : (109, 108, 108), + "downriver" : ( 9, 34, 86), + "downy" : (111, 208, 197), + "driftwood" : (175, 135, 81), + "drover" : (253, 247, 173), + "dull lavender" : (168, 153, 230), + "dune" : ( 56, 53, 51), + "dust storm" : (229, 204, 201), + "dusty gray" : (168, 152, 155), + "eagle" : (182, 186, 164), + "earls green" : (201, 185, 59), + "early dawn" : (255, 249, 230), + "east bay" : ( 65, 76, 125), + "east side" : (172, 145, 206), + "eastern blue" : ( 30, 154, 176), + "ebb" : (233, 227, 227), + "ebony" : ( 12, 11, 29), + "ebony clay" : ( 38, 40, 59), + "eclipse" : ( 49, 28, 23), + "ecru white" : (245, 243, 229), + "ecstasy" : (250, 120, 20), + "eden" : ( 16, 88, 82), + "edgewater" : (200, 227, 215), + "edward" : (162, 174, 171), + "egg sour" : (255, 244, 221), + "egg white" : (255, 239, 193), + "eggplant" : ( 97, 64, 81), + "el paso" : ( 30, 23, 8), + "el salva" : (143, 62, 51), + "electric lime" : (204, 255, 0), + "electric violet" : (139, 0, 255), + "elephant" : ( 18, 52, 71), + "elf green" : ( 8, 131, 112), + "elm" : ( 28, 124, 125), + "emerald" : ( 80, 200, 120), + "eminence" : (108, 48, 130), + "emperor" : ( 81, 70, 73), + "empress" : (129, 115, 119), + "endeavour" : ( 0, 86, 167), + "energy yellow" : (248, 221, 92), + "english holly" : ( 2, 45, 21), + "english walnut" : ( 62, 43, 35), + "envy" : (139, 166, 144), + "equator" : (225, 188, 100), + "espresso" : ( 97, 39, 24), + "eternity" : ( 33, 26, 14), + "eucalyptus" : ( 39, 138, 91), + "eunry" : (207, 163, 157), + "evening sea" : ( 2, 78, 70), + "everglade" : ( 28, 64, 46), + "faded jade" : ( 66, 121, 119), + "fair pink" : (255, 239, 236), + "falcon" : (127, 98, 109), + "fall green" : (236, 235, 189), + "falu red" : (128, 24, 24), + "fantasy" : (250, 243, 240), + "fedora" : (121, 106, 120), + "feijoa" : (159, 221, 140), + "fern" : ( 99, 183, 108), + "fern frond" : (101, 114, 32), + "fern green" : ( 79, 121, 66), + "ferra" : (112, 79, 80), + "festival" : (251, 233, 108), + "feta" : (240, 252, 234), + "fiery orange" : (179, 82, 19), + "finch" : ( 98, 102, 73), + "finlandia" : ( 85, 109, 86), + "finn" : (105, 45, 84), + "fiord" : ( 64, 81, 105), + "fire" : (170, 66, 3), + "fire bush" : (232, 153, 40), + "firefly" : ( 14, 42, 48), + "flame pea" : (218, 91, 56), + "flamenco" : (255, 125, 7), + "flamingo" : (242, 85, 42), + "flax" : (238, 220, 130), + "flax smoke" : (123, 130, 101), + "flesh" : (255, 203, 164), + "flint" : (111, 106, 97), + "flirt" : (162, 0, 109), + "flush mahogany" : (202, 52, 53), + "flush orange" : (255, 127, 0), + "foam" : (216, 252, 250), + "fog" : (215, 208, 255), + "foggy gray" : (203, 202, 182), + "forest green" : ( 34, 139, 34), + "forget me not" : (255, 241, 238), + "fountain blue" : ( 86, 180, 190), + "frangipani" : (255, 222, 179), + "french gray" : (189, 189, 198), + "french lilac" : (236, 199, 238), + "french pass" : (189, 237, 253), + "french rose" : (246, 74, 138), + "fresh eggplant" : (153, 0, 102), + "friar gray" : (128, 126, 121), + "fringy flower" : (177, 226, 193), + "froly" : (245, 117, 132), + "frost" : (237, 245, 221), + "frosted mint" : (219, 255, 248), + "frostee" : (228, 246, 231), + "fruit salad" : ( 79, 157, 93), + "fuchsia blue" : (122, 88, 193), + "fuchsia pink" : (193, 84, 193), + "fuego" : (190, 222, 13), + "fuel yellow" : (236, 169, 39), + "fun blue" : ( 25, 89, 168), + "fun green" : ( 1, 109, 57), + "fuscous gray" : ( 84, 83, 77), + "fuzzy wuzzy brown" : (196, 86, 85), + "gable green" : ( 22, 53, 49), + "gallery" : (239, 239, 239), + "galliano" : (220, 178, 12), + "gamboge" : (228, 155, 15), + "geebung" : (209, 143, 27), + "genoa" : ( 21, 115, 107), + "geraldine" : (251, 137, 137), + "geyser" : (212, 223, 226), + "ghost" : (199, 201, 213), + "gigas" : ( 82, 60, 148), + "gimblet" : (184, 181, 106), + "gin" : (232, 242, 235), + "gin fizz" : (255, 249, 226), + "givry" : (248, 228, 191), + "glacier" : (128, 179, 196), + "glade green" : ( 97, 132, 95), + "go ben" : (114, 109, 78), + "goblin" : ( 61, 125, 82), + "gold" : (255, 215, 0), + "gold drop" : (241, 130, 0), + "gold sand" : (230, 190, 138), + "gold tips" : (222, 186, 19), + "golden bell" : (226, 137, 19), + "golden dream" : (240, 213, 45), + "golden fizz" : (245, 251, 61), + "golden glow" : (253, 226, 149), + "golden grass" : (218, 165, 32), + "golden sand" : (240, 219, 125), + "golden tainoi" : (255, 204, 92), + "goldenrod" : (252, 214, 103), + "gondola" : ( 38, 20, 20), + "gordons green" : ( 11, 17, 7), + "gorse" : (255, 241, 79), + "gossamer" : ( 6, 155, 129), + "gossip" : (210, 248, 176), + "gothic" : (109, 146, 161), + "governor bay" : ( 47, 60, 179), + "grain brown" : (228, 213, 183), + "grandis" : (255, 211, 140), + "granite green" : (141, 137, 116), + "granny apple" : (213, 246, 227), + "granny smith" : (132, 160, 160), + "granny smith apple" : (157, 224, 147), + "grape" : ( 56, 26, 81), + "graphite" : ( 37, 22, 7), + "gravel" : ( 74, 68, 75), + "gray" : (128, 128, 128), + "gray asparagus" : ( 70, 89, 69), + "gray chateau" : (162, 170, 179), + "gray nickel" : (195, 195, 189), + "gray nurse" : (231, 236, 230), + "gray olive" : (169, 164, 145), + "gray suit" : (193, 190, 205), + "green" : ( 0, 255, 0), + "green haze" : ( 1, 163, 104), + "green house" : ( 36, 80, 15), + "green kelp" : ( 37, 49, 28), + "green leaf" : ( 67, 106, 13), + "green mist" : (203, 211, 176), + "green pea" : ( 29, 97, 66), + "green smoke" : (164, 175, 110), + "green spring" : (184, 193, 177), + "green vogue" : ( 3, 43, 82), + "green waterloo" : ( 16, 20, 5), + "green white" : (232, 235, 224), + "green yellow" : (173, 255, 47), + "grenadier" : (213, 70, 0), + "guardsman red" : (186, 1, 1), + "gulf blue" : ( 5, 22, 87), + "gulf stream" : (128, 179, 174), + "gull gray" : (157, 172, 183), + "gum leaf" : (182, 211, 191), + "gumbo" : (124, 161, 166), + "gun powder" : ( 65, 66, 87), + "gunsmoke" : (130, 134, 133), + "gurkha" : (154, 149, 119), + "hacienda" : (152, 129, 27), + "hairy heath" : (107, 42, 20), + "haiti" : ( 27, 16, 53), + "half baked" : (133, 196, 204), + "half colonial white" : (253, 246, 211), + "half dutch white" : (254, 247, 222), + "half spanish white" : (254, 244, 219), + "half and half" : (255, 254, 225), + "hampton" : (229, 216, 175), + "harlequin" : ( 63, 255, 0), + "harp" : (230, 242, 234), + "harvest gold" : (224, 185, 116), + "havelock blue" : ( 85, 144, 217), + "hawaiian tan" : (157, 86, 22), + "hawkes blue" : (212, 226, 252), + "heath" : ( 84, 16, 18), + "heather" : (183, 195, 208), + "heathered gray" : (182, 176, 149), + "heavy metal" : ( 43, 50, 40), + "heliotrope" : (223, 115, 255), + "hemlock" : ( 94, 93, 59), + "hemp" : (144, 120, 116), + "hibiscus" : (182, 49, 108), + "highland" : (111, 142, 99), + "hillary" : (172, 165, 134), + "himalaya" : (106, 93, 27), + "hint of green" : (230, 255, 233), + "hint of red" : (251, 249, 249), + "hint of yellow" : (250, 253, 228), + "hippie blue" : ( 88, 154, 175), + "hippie green" : ( 83, 130, 75), + "hippie pink" : (174, 69, 96), + "hit gray" : (161, 173, 181), + "hit pink" : (255, 171, 129), + "hokey pokey" : (200, 165, 40), + "hoki" : (101, 134, 159), + "holly" : ( 1, 29, 19), + "hollywood cerise" : (244, 0, 161), + "honey flower" : ( 79, 28, 112), + "honeysuckle" : (237, 252, 132), + "hopbush" : (208, 109, 161), + "horizon" : ( 90, 135, 160), + "horses neck" : ( 96, 73, 19), + "hot cinnamon" : (210, 105, 30), + "hot pink" : (255, 105, 180), + "hot toddy" : (179, 128, 7), + "humming bird" : (207, 249, 243), + "hunter green" : ( 22, 29, 16), + "hurricane" : (135, 124, 123), + "husk" : (183, 164, 88), + "ice cold" : (177, 244, 231), + "iceberg" : (218, 244, 240), + "illusion" : (246, 164, 201), + "inch worm" : (176, 227, 19), + "indian khaki" : (195, 176, 145), + "indian tan" : ( 77, 30, 1), + "indigo" : ( 79, 105, 198), + "indochine" : (194, 107, 3), + "international klein blue" : ( 0, 47, 167), + "international orange" : (255, 79, 0), + "irish coffee" : ( 95, 61, 38), + "iroko" : ( 67, 49, 32), + "iron" : (212, 215, 217), + "ironside gray" : (103, 102, 98), + "ironstone" : (134, 72, 60), + "island spice" : (255, 252, 238), + "ivory" : (255, 255, 240), + "jacaranda" : ( 46, 3, 41), + "jacarta" : ( 58, 42, 106), + "jacko bean" : ( 46, 25, 5), + "jacksons purple" : ( 32, 32, 141), + "jade" : ( 0, 168, 107), + "jaffa" : (239, 134, 63), + "jagged ice" : (194, 232, 229), + "jagger" : ( 53, 14, 87), + "jaguar" : ( 8, 1, 16), + "jambalaya" : ( 91, 48, 19), + "janna" : (244, 235, 211), + "japanese laurel" : ( 10, 105, 6), + "japanese maple" : (120, 1, 9), + "japonica" : (216, 124, 99), + "java" : ( 31, 194, 194), + "jazzberry jam" : (165, 11, 94), + "jelly bean" : ( 41, 123, 154), + "jet stream" : (181, 210, 206), + "jewel" : ( 18, 107, 64), + "jon" : ( 59, 31, 31), + "jonquil" : (238, 255, 154), + "jordy blue" : (138, 185, 241), + "judge gray" : ( 84, 67, 51), + "jumbo" : (124, 123, 130), + "jungle green" : ( 41, 171, 135), + "jungle mist" : (180, 207, 211), + "juniper" : (109, 146, 146), + "just right" : (236, 205, 185), + "kabul" : ( 94, 72, 62), + "kaitoke green" : ( 0, 70, 32), + "kangaroo" : (198, 200, 189), + "karaka" : ( 30, 22, 9), + "karry" : (255, 234, 212), + "kashmir blue" : ( 80, 112, 150), + "kelp" : ( 69, 73, 54), + "kenyan copper" : (124, 28, 5), + "keppel" : ( 58, 176, 158), + "key lime pie" : (191, 201, 33), + "khaki" : (240, 230, 140), + "kidnapper" : (225, 234, 212), + "kilamanjaro" : ( 36, 12, 2), + "killarney" : ( 58, 106, 71), + "kimberly" : (115, 108, 159), + "kingfisher daisy" : ( 62, 4, 128), + "kobi" : (231, 159, 196), + "kokoda" : (110, 109, 87), + "korma" : (143, 75, 14), + "koromiko" : (255, 189, 95), + "kournikova" : (255, 231, 114), + "kumera" : (136, 98, 33), + "la palma" : ( 54, 135, 22), + "la rioja" : (179, 193, 16), + "las palmas" : (198, 230, 16), + "laser" : (200, 181, 104), + "laser lemon" : (255, 255, 102), + "laurel" : (116, 147, 120), + "lavender" : (181, 126, 220), + "lavender gray" : (189, 187, 215), + "lavender magenta" : (238, 130, 238), + "lavender pink" : (251, 174, 210), + "lavender purple" : (150, 123, 182), + "lavender rose" : (251, 160, 227), + "lavender blush" : (255, 240, 245), + "leather" : (150, 112, 89), + "lemon" : (253, 233, 16), + "lemon chiffon" : (255, 250, 205), + "lemon ginger" : (172, 158, 34), + "lemon grass" : (155, 158, 143), + "light apricot" : (253, 213, 177), + "light orchid" : (226, 156, 210), + "light wisteria" : (201, 160, 220), + "lightning yellow" : (252, 192, 30), + "lilac" : (200, 162, 200), + "lilac bush" : (152, 116, 211), + "lily" : (200, 170, 191), + "lily white" : (231, 248, 255), + "lima" : (118, 189, 23), + "lime" : (191, 255, 0), + "limeade" : (111, 157, 2), + "limed ash" : (116, 125, 99), + "limed oak" : (172, 138, 86), + "limed spruce" : ( 57, 72, 81), + "linen" : (250, 240, 230), + "link water" : (217, 228, 245), + "lipstick" : (171, 5, 99), + "lisbon brown" : ( 66, 57, 33), + "livid brown" : ( 77, 40, 46), + "loafer" : (238, 244, 222), + "loblolly" : (189, 201, 206), + "lochinvar" : ( 44, 140, 132), + "lochmara" : ( 0, 126, 199), + "locust" : (168, 175, 142), + "log cabin" : ( 36, 42, 29), + "logan" : (170, 169, 205), + "lola" : (223, 207, 219), + "london hue" : (190, 166, 195), + "lonestar" : (109, 1, 1), + "lotus" : (134, 60, 60), + "loulou" : ( 70, 11, 65), + "lucky" : (175, 159, 28), + "lucky point" : ( 26, 26, 104), + "lunar green" : ( 60, 73, 58), + "luxor gold" : (167, 136, 44), + "lynch" : (105, 126, 154), + "mabel" : (217, 247, 255), + "macaroni and cheese" : (255, 185, 123), + "madang" : (183, 240, 190), + "madison" : ( 9, 37, 93), + "madras" : ( 63, 48, 2), + "magenta / fuchsia" : (255, 0, 255), + "magic mint" : (170, 240, 209), + "magnolia" : (248, 244, 255), + "mahogany" : ( 78, 6, 6), + "mai tai" : (176, 102, 8), + "maize" : (245, 213, 160), + "makara" : (137, 125, 109), + "mako" : ( 68, 73, 84), + "malachite" : ( 11, 218, 81), + "malibu" : (125, 200, 247), + "mallard" : ( 35, 52, 24), + "malta" : (189, 178, 161), + "mamba" : (142, 129, 144), + "manatee" : (141, 144, 161), + "mandalay" : (173, 120, 27), + "mandy" : (226, 84, 101), + "mandys pink" : (242, 195, 178), + "mango tango" : (231, 114, 0), + "manhattan" : (245, 201, 153), + "mantis" : (116, 195, 101), + "mantle" : (139, 156, 144), + "manz" : (238, 239, 120), + "mardi gras" : ( 53, 0, 54), + "marigold" : (185, 141, 40), + "marigold yellow" : (251, 232, 112), + "mariner" : ( 40, 106, 205), + "maroon" : (128, 0, 0), + "maroon flush" : (195, 33, 72), + "maroon oak" : ( 82, 12, 23), + "marshland" : ( 11, 15, 8), + "martini" : (175, 160, 158), + "martinique" : ( 54, 48, 80), + "marzipan" : (248, 219, 157), + "masala" : ( 64, 59, 56), + "matisse" : ( 27, 101, 157), + "matrix" : (176, 93, 84), + "matterhorn" : ( 78, 59, 65), + "mauve" : (224, 176, 255), + "mauvelous" : (240, 145, 169), + "maverick" : (216, 194, 213), + "medium carmine" : (175, 64, 53), + "medium purple" : (147, 112, 219), + "medium red violet" : (187, 51, 133), + "melanie" : (228, 194, 213), + "melanzane" : ( 48, 5, 41), + "melon" : (254, 186, 173), + "melrose" : (199, 193, 255), + "mercury" : (229, 229, 229), + "merino" : (246, 240, 230), + "merlin" : ( 65, 60, 55), + "merlot" : (131, 25, 35), + "metallic bronze" : ( 73, 55, 27), + "metallic copper" : (113, 41, 29), + "meteor" : (208, 125, 18), + "meteorite" : ( 60, 31, 118), + "mexican red" : (167, 37, 37), + "mid gray" : ( 95, 95, 110), + "midnight" : ( 1, 22, 53), + "midnight blue" : ( 0, 51, 102), + "midnight moss" : ( 4, 16, 4), + "mikado" : ( 45, 37, 16), + "milan" : (250, 255, 164), + "milano red" : (184, 17, 4), + "milk punch" : (255, 246, 212), + "millbrook" : ( 89, 68, 51), + "mimosa" : (248, 253, 211), + "mindaro" : (227, 249, 136), + "mine shaft" : ( 50, 50, 50), + "mineral green" : ( 63, 93, 83), + "ming" : ( 54, 116, 125), + "minsk" : ( 63, 48, 127), + "mint green" : (152, 255, 152), + "mint julep" : (241, 238, 193), + "mint tulip" : (196, 244, 235), + "mirage" : ( 22, 25, 40), + "mischka" : (209, 210, 221), + "mist gray" : (196, 196, 188), + "mobster" : (127, 117, 137), + "moccaccino" : (110, 29, 20), + "mocha" : (120, 45, 25), + "mojo" : (192, 71, 55), + "mona lisa" : (255, 161, 148), + "monarch" : (139, 7, 35), + "mondo" : ( 74, 60, 48), + "mongoose" : (181, 162, 127), + "monsoon" : (138, 131, 137), + "monte carlo" : (131, 208, 198), + "monza" : (199, 3, 30), + "moody blue" : (127, 118, 211), + "moon glow" : (252, 254, 218), + "moon mist" : (220, 221, 204), + "moon raker" : (214, 206, 246), + "morning glory" : (158, 222, 224), + "morocco brown" : ( 68, 29, 0), + "mortar" : ( 80, 67, 81), + "mosque" : ( 3, 106, 110), + "moss green" : (173, 223, 173), + "mountain meadow" : ( 26, 179, 133), + "mountain mist" : (149, 147, 150), + "mountbatten pink" : (153, 122, 141), + "muddy waters" : (183, 142, 92), + "muesli" : (170, 139, 91), + "mulberry" : (197, 75, 140), + "mulberry wood" : ( 92, 5, 54), + "mule fawn" : (140, 71, 47), + "mulled wine" : ( 78, 69, 98), + "mustard" : (255, 219, 88), + "my pink" : (214, 145, 136), + "my sin" : (255, 179, 31), + "mystic" : (226, 235, 237), + "nandor" : ( 75, 93, 82), + "napa" : (172, 164, 148), + "narvik" : (237, 249, 241), + "natural gray" : (139, 134, 128), + "navajo white" : (255, 222, 173), + "navy blue" : ( 0, 0, 128), + "nebula" : (203, 219, 214), + "negroni" : (255, 226, 197), + "neon carrot" : (255, 153, 51), + "nepal" : (142, 171, 193), + "neptune" : (124, 183, 187), + "nero" : ( 20, 6, 0), + "nevada" : (100, 110, 117), + "new orleans" : (243, 214, 157), + "new york pink" : (215, 131, 127), + "niagara" : ( 6, 161, 137), + "night rider" : ( 31, 18, 15), + "night shadz" : (170, 55, 90), + "nile blue" : ( 25, 55, 81), + "nobel" : (183, 177, 177), + "nomad" : (186, 177, 162), + "norway" : (168, 189, 159), + "nugget" : (197, 153, 34), + "nutmeg" : (129, 66, 44), + "nutmeg wood finish" : (104, 54, 0), + "oasis" : (254, 239, 206), + "observatory" : ( 2, 134, 111), + "ocean green" : ( 65, 170, 120), + "ochre" : (204, 119, 34), + "off green" : (230, 248, 243), + "off yellow" : (254, 249, 227), + "oil" : ( 40, 30, 21), + "old brick" : (144, 30, 30), + "old copper" : (114, 74, 47), + "old gold" : (207, 181, 59), + "old lace" : (253, 245, 230), + "old lavender" : (121, 104, 120), + "old rose" : (192, 128, 129), + "olive" : (128, 128, 0), + "olive drab" : (107, 142, 35), + "olive green" : (181, 179, 92), + "olive haze" : (139, 132, 112), + "olivetone" : (113, 110, 16), + "olivine" : (154, 185, 115), + "onahau" : (205, 244, 255), + "onion" : ( 47, 39, 14), + "opal" : (169, 198, 194), + "opium" : (142, 111, 112), + "oracle" : ( 55, 116, 117), + "orange" : (255, 104, 31), + "orange peel" : (255, 160, 0), + "orange roughy" : (196, 87, 25), + "orange white" : (254, 252, 237), + "orchid" : (218, 112, 214), + "orchid white" : (255, 253, 243), + "oregon" : (155, 71, 3), + "orient" : ( 1, 94, 133), + "oriental pink" : (198, 145, 145), + "orinoco" : (243, 251, 212), + "oslo gray" : (135, 141, 145), + "ottoman" : (233, 248, 237), + "outer space" : ( 45, 56, 58), + "outrageous orange" : (255, 96, 55), + "oxford blue" : ( 56, 69, 85), + "oxley" : (119, 158, 134), + "oyster bay" : (218, 250, 255), + "oyster pink" : (233, 206, 205), + "paarl" : (166, 85, 41), + "pablo" : (119, 111, 97), + "pacific blue" : ( 0, 157, 196), + "pacifika" : (119, 129, 32), + "paco" : ( 65, 31, 16), + "padua" : (173, 230, 196), + "pale canary" : (255, 255, 153), + "pale leaf" : (192, 211, 185), + "pale oyster" : (152, 141, 119), + "pale prim" : (253, 254, 184), + "pale rose" : (255, 225, 242), + "pale sky" : (110, 119, 131), + "pale slate" : (195, 191, 193), + "palm green" : ( 9, 35, 15), + "palm leaf" : ( 25, 51, 14), + "pampas" : (244, 242, 238), + "panache" : (234, 246, 238), + "pancho" : (237, 205, 171), + "papaya whip" : (255, 239, 213), + "paprika" : (141, 2, 38), + "paradiso" : ( 49, 125, 130), + "parchment" : (241, 233, 210), + "paris daisy" : (255, 244, 110), + "paris m" : ( 38, 5, 106), + "paris white" : (202, 220, 212), + "parsley" : ( 19, 79, 25), + "pastel green" : (119, 221, 119), + "pastel pink" : (255, 209, 220), + "patina" : ( 99, 154, 143), + "pattens blue" : (222, 245, 255), + "paua" : ( 38, 3, 104), + "pavlova" : (215, 196, 152), + "peach" : (255, 229, 180), + "peach cream" : (255, 240, 219), + "peach orange" : (255, 204, 153), + "peach schnapps" : (255, 220, 214), + "peach yellow" : (250, 223, 173), + "peanut" : (120, 47, 22), + "pear" : (209, 226, 49), + "pearl bush" : (232, 224, 213), + "pearl lusta" : (252, 244, 220), + "peat" : (113, 107, 86), + "pelorous" : ( 62, 171, 191), + "peppermint" : (227, 245, 225), + "perano" : (169, 190, 242), + "perfume" : (208, 190, 248), + "periglacial blue" : (225, 230, 214), + "periwinkle" : (204, 204, 255), + "periwinkle gray" : (195, 205, 230), + "persian blue" : ( 28, 57, 187), + "persian green" : ( 0, 166, 147), + "persian indigo" : ( 50, 18, 122), + "persian pink" : (247, 127, 190), + "persian plum" : (112, 28, 28), + "persian red" : (204, 51, 51), + "persian rose" : (254, 40, 162), + "persimmon" : (255, 107, 83), + "peru tan" : (127, 58, 2), + "pesto" : (124, 118, 49), + "petite orchid" : (219, 150, 144), + "pewter" : (150, 168, 161), + "pharlap" : (163, 128, 123), + "picasso" : (255, 243, 157), + "pickled bean" : (110, 72, 38), + "pickled bluewood" : ( 49, 68, 89), + "picton blue" : ( 69, 177, 232), + "pig pink" : (253, 215, 228), + "pigeon post" : (175, 189, 217), + "pigment indigo" : ( 75, 0, 130), + "pine cone" : (109, 94, 84), + "pine glade" : (199, 205, 144), + "pine green" : ( 1, 121, 111), + "pine tree" : ( 23, 31, 4), + "pink" : (255, 192, 203), + "pink flamingo" : (255, 102, 255), + "pink flare" : (225, 192, 200), + "pink lace" : (255, 221, 244), + "pink lady" : (255, 241, 216), + "pink salmon" : (255, 145, 164), + "pink swan" : (190, 181, 183), + "piper" : (201, 99, 35), + "pipi" : (254, 244, 204), + "pippin" : (255, 225, 223), + "pirate gold" : (186, 127, 3), + "pistachio" : (157, 194, 9), + "pixie green" : (192, 216, 182), + "pizazz" : (255, 144, 0), + "pizza" : (201, 148, 21), + "plantation" : ( 39, 80, 75), + "plum" : (132, 49, 121), + "pohutukawa" : (143, 2, 28), + "polar" : (229, 249, 246), + "polo blue" : (141, 168, 204), + "pomegranate" : (243, 71, 35), + "pompadour" : (102, 0, 69), + "porcelain" : (239, 242, 243), + "porsche" : (234, 174, 105), + "port gore" : ( 37, 31, 79), + "portafino" : (255, 255, 180), + "portage" : (139, 159, 238), + "portica" : (249, 230, 99), + "pot pourri" : (245, 231, 226), + "potters clay" : (140, 87, 56), + "powder ash" : (188, 201, 194), + "powder blue" : (176, 224, 230), + "prairie sand" : (154, 56, 32), + "prelude" : (208, 192, 229), + "prim" : (240, 226, 236), + "primrose" : (237, 234, 153), + "provincial pink" : (254, 245, 241), + "prussian blue" : ( 0, 49, 83), + "puce" : (204, 136, 153), + "pueblo" : (125, 44, 20), + "puerto rico" : ( 63, 193, 170), + "pumice" : (194, 202, 196), + "pumpkin" : (255, 117, 24), + "pumpkin skin" : (177, 97, 11), + "punch" : (220, 67, 51), + "punga" : ( 77, 61, 20), + "purple" : (102, 0, 153), + "purple heart" : (101, 45, 193), + "purple mountain's majesty" : (150, 120, 182), + "purple pizzazz" : (255, 0, 204), + "putty" : (231, 205, 140), + "quarter pearl lusta" : (255, 253, 244), + "quarter spanish white" : (247, 242, 225), + "quicksand" : (189, 151, 142), + "quill gray" : (214, 214, 209), + "quincy" : ( 98, 63, 45), + "racing green" : ( 12, 25, 17), + "radical red" : (255, 53, 94), + "raffia" : (234, 218, 184), + "rainee" : (185, 200, 172), + "rajah" : (247, 182, 104), + "rangitoto" : ( 46, 50, 34), + "rangoon green" : ( 28, 30, 19), + "raven" : (114, 123, 137), + "raw sienna" : (210, 125, 70), + "raw umber" : (115, 74, 18), + "razzle dazzle rose" : (255, 51, 204), + "razzmatazz" : (227, 11, 92), + "rebel" : ( 60, 18, 6), + "red" : (255, 0, 0), + "red beech" : (123, 56, 1), + "red berry" : (142, 0, 0), + "red damask" : (218, 106, 65), + "red devil" : (134, 1, 17), + "red orange" : (255, 63, 52), + "red oxide" : (110, 9, 2), + "red ribbon" : (237, 10, 63), + "red robin" : (128, 52, 31), + "red stage" : (208, 95, 4), + "red violet" : (199, 21, 133), + "redwood" : ( 93, 30, 15), + "reef" : (201, 255, 162), + "reef gold" : (159, 130, 28), + "regal blue" : ( 1, 63, 106), + "regent gray" : (134, 148, 159), + "regent st blue" : (170, 214, 230), + "remy" : (254, 235, 243), + "reno sand" : (168, 101, 21), + "resolution blue" : ( 0, 35, 135), + "revolver" : ( 44, 22, 50), + "rhino" : ( 46, 63, 98), + "rice cake" : (255, 254, 240), + "rice flower" : (238, 255, 226), + "rich gold" : (168, 83, 7), + "rio grande" : (187, 208, 9), + "ripe lemon" : (244, 216, 28), + "ripe plum" : ( 65, 0, 86), + "riptide" : (139, 230, 216), + "river bed" : ( 67, 76, 89), + "rob roy" : (234, 198, 116), + "robin's egg blue" : ( 0, 204, 204), + "rock" : ( 77, 56, 51), + "rock blue" : (158, 177, 205), + "rock spray" : (186, 69, 12), + "rodeo dust" : (201, 178, 155), + "rolling stone" : (116, 125, 131), + "roman" : (222, 99, 96), + "roman coffee" : (121, 93, 76), + "romance" : (255, 254, 253), + "romantic" : (255, 210, 183), + "ronchi" : (236, 197, 78), + "roof terracotta" : (166, 47, 32), + "rope" : (142, 77, 30), + "rose" : (255, 0, 127), + "rose bud" : (251, 178, 163), + "rose bud cherry" : (128, 11, 71), + "rose fog" : (231, 188, 180), + "rose white" : (255, 246, 245), + "rose of sharon" : (191, 85, 0), + "rosewood" : (101, 0, 11), + "roti" : (198, 168, 75), + "rouge" : (162, 59, 108), + "royal blue" : ( 65, 105, 225), + "royal heath" : (171, 52, 114), + "royal purple" : (107, 63, 160), + "rum" : (121, 105, 137), + "rum swizzle" : (249, 248, 228), + "russet" : (128, 70, 27), + "russett" : (117, 90, 87), + "rust" : (183, 65, 14), + "rustic red" : ( 72, 4, 4), + "rusty nail" : (134, 86, 10), + "saddle" : ( 76, 48, 36), + "saddle brown" : ( 88, 52, 1), + "saffron" : (244, 196, 48), + "saffron mango" : (249, 191, 88), + "sage" : (158, 165, 135), + "sahara" : (183, 162, 20), + "sahara sand" : (241, 231, 136), + "sail" : (184, 224, 249), + "salem" : ( 9, 127, 75), + "salmon" : (255, 140, 105), + "salomie" : (254, 219, 141), + "salt box" : (104, 94, 110), + "saltpan" : (241, 247, 242), + "sambuca" : ( 58, 32, 16), + "san felix" : ( 11, 98, 7), + "san juan" : ( 48, 75, 106), + "san marino" : ( 69, 108, 172), + "sand dune" : (130, 111, 101), + "sandal" : (170, 141, 111), + "sandrift" : (171, 145, 122), + "sandstone" : (121, 109, 98), + "sandwisp" : (245, 231, 162), + "sandy beach" : (255, 234, 200), + "sandy brown" : (244, 164, 96), + "sangria" : (146, 0, 10), + "sanguine brown" : (141, 61, 56), + "santa fe" : (177, 109, 82), + "santas gray" : (159, 160, 177), + "sapling" : (222, 212, 164), + "sapphire" : ( 47, 81, 158), + "saratoga" : ( 85, 91, 16), + "satin linen" : (230, 228, 212), + "sauvignon" : (255, 245, 243), + "sazerac" : (255, 244, 224), + "scampi" : (103, 95, 166), + "scandal" : (207, 250, 244), + "scarlet" : (255, 36, 0), + "scarlet gum" : ( 67, 21, 96), + "scarlett" : (149, 0, 21), + "scarpa flow" : ( 88, 85, 98), + "schist" : (169, 180, 151), + "school bus yellow" : (255, 216, 0), + "schooner" : (139, 132, 126), + "science blue" : ( 0, 102, 204), + "scooter" : ( 46, 191, 212), + "scorpion" : (105, 95, 98), + "scotch mist" : (255, 251, 220), + "screamin' green" : (102, 255, 102), + "sea buckthorn" : (251, 161, 41), + "sea green" : ( 46, 139, 87), + "sea mist" : (197, 219, 202), + "sea nymph" : (120, 163, 156), + "sea pink" : (237, 152, 158), + "seagull" : (128, 204, 234), + "seance" : (115, 30, 143), + "seashell" : (241, 241, 241), + "seashell peach" : (255, 245, 238), + "seaweed" : ( 27, 47, 17), + "selago" : (240, 238, 253), + "selective yellow" : (255, 186, 0), + "sepia" : (112, 66, 20), + "sepia black" : ( 43, 2, 2), + "sepia skin" : (158, 91, 64), + "serenade" : (255, 244, 232), + "shadow" : (131, 112, 80), + "shadow green" : (154, 194, 184), + "shady lady" : (170, 165, 169), + "shakespeare" : ( 78, 171, 209), + "shalimar" : (251, 255, 186), + "shamrock" : ( 51, 204, 153), + "shark" : ( 37, 39, 44), + "sherpa blue" : ( 0, 73, 80), + "sherwood green" : ( 2, 64, 44), + "shilo" : (232, 185, 179), + "shingle fawn" : (107, 78, 49), + "ship cove" : (120, 139, 186), + "ship gray" : ( 62, 58, 68), + "shiraz" : (178, 9, 49), + "shocking" : (226, 146, 192), + "shocking pink" : (252, 15, 192), + "shuttle gray" : ( 95, 102, 114), + "siam" : (100, 106, 84), + "sidecar" : (243, 231, 187), + "silk" : (189, 177, 168), + "silver" : (192, 192, 192), + "silver chalice" : (172, 172, 172), + "silver rust" : (201, 192, 187), + "silver sand" : (191, 193, 194), + "silver tree" : (102, 181, 143), + "sinbad" : (159, 215, 211), + "siren" : (122, 1, 58), + "sirocco" : (113, 128, 128), + "sisal" : (211, 203, 186), + "skeptic" : (202, 230, 218), + "sky blue" : (118, 215, 234), + "slate gray" : (112, 128, 144), + "smalt" : ( 0, 51, 153), + "smalt blue" : ( 81, 128, 143), + "smoky" : ( 96, 91, 115), + "snow drift" : (247, 250, 247), + "snow flurry" : (228, 255, 209), + "snowy mint" : (214, 255, 219), + "snuff" : (226, 216, 237), + "soapstone" : (255, 251, 249), + "soft amber" : (209, 198, 180), + "soft peach" : (245, 237, 239), + "solid pink" : (137, 56, 67), + "solitaire" : (254, 248, 226), + "solitude" : (234, 246, 255), + "sorbus" : (253, 124, 7), + "sorrell brown" : (206, 185, 143), + "soya bean" : (106, 96, 81), + "spanish green" : (129, 152, 133), + "spectra" : ( 47, 90, 87), + "spice" : (106, 68, 46), + "spicy mix" : (136, 83, 66), + "spicy mustard" : (116, 100, 13), + "spicy pink" : (129, 110, 113), + "spindle" : (182, 209, 234), + "spray" : (121, 222, 236), + "spring green" : ( 0, 255, 127), + "spring leaves" : ( 87, 131, 99), + "spring rain" : (172, 203, 177), + "spring sun" : (246, 255, 220), + "spring wood" : (248, 246, 241), + "sprout" : (193, 215, 176), + "spun pearl" : (170, 171, 183), + "squirrel" : (143, 129, 118), + "st tropaz" : ( 45, 86, 155), + "stack" : (138, 143, 138), + "star dust" : (159, 159, 156), + "stark white" : (229, 215, 189), + "starship" : (236, 242, 69), + "steel blue" : ( 70, 130, 180), + "steel gray" : ( 38, 35, 53), + "stiletto" : (156, 51, 54), + "stonewall" : (146, 133, 115), + "storm dust" : (100, 100, 99), + "storm gray" : (113, 116, 134), + "stratos" : ( 0, 7, 65), + "straw" : (212, 191, 141), + "strikemaster" : (149, 99, 135), + "stromboli" : ( 50, 93, 82), + "studio" : (113, 74, 178), + "submarine" : (186, 199, 201), + "sugar cane" : (249, 255, 246), + "sulu" : (193, 240, 124), + "summer green" : (150, 187, 171), + "sun" : (251, 172, 19), + "sundance" : (201, 179, 91), + "sundown" : (255, 177, 179), + "sunflower" : (228, 212, 34), + "sunglo" : (225, 104, 101), + "sunglow" : (255, 204, 51), + "sunset orange" : (254, 76, 64), + "sunshade" : (255, 158, 44), + "supernova" : (255, 201, 1), + "surf" : (187, 215, 193), + "surf crest" : (207, 229, 210), + "surfie green" : ( 12, 122, 121), + "sushi" : (135, 171, 57), + "suva gray" : (136, 131, 135), + "swamp" : ( 0, 27, 28), + "swamp green" : (172, 183, 142), + "swans down" : (220, 240, 234), + "sweet corn" : (251, 234, 140), + "sweet pink" : (253, 159, 162), + "swirl" : (211, 205, 197), + "swiss coffee" : (221, 214, 213), + "sycamore" : (144, 141, 57), + "tabasco" : (160, 39, 18), + "tacao" : (237, 179, 129), + "tacha" : (214, 197, 98), + "tahiti gold" : (233, 124, 7), + "tahuna sands" : (238, 240, 200), + "tall poppy" : (179, 45, 41), + "tallow" : (168, 165, 137), + "tamarillo" : (153, 22, 19), + "tamarind" : ( 52, 21, 21), + "tan" : (210, 180, 140), + "tan hide" : (250, 157, 90), + "tana" : (217, 220, 193), + "tangaroa" : ( 3, 22, 60), + "tangerine" : (242, 133, 0), + "tango" : (237, 122, 28), + "tapa" : (123, 120, 116), + "tapestry" : (176, 94, 129), + "tara" : (225, 246, 232), + "tarawera" : ( 7, 58, 80), + "tasman" : (207, 220, 207), + "taupe" : ( 72, 60, 50), + "taupe gray" : (179, 175, 149), + "tawny port" : (105, 37, 69), + "te papa green" : ( 30, 67, 60), + "tea" : (193, 186, 176), + "tea green" : (208, 240, 192), + "teak" : (177, 148, 97), + "teal" : ( 0, 128, 128), + "teal blue" : ( 4, 66, 89), + "temptress" : ( 59, 0, 11), + "tenn" : (205, 87, 0), + "tequila" : (255, 230, 199), + "terracotta" : (226, 114, 91), + "texas" : (248, 249, 156), + "texas rose" : (255, 181, 85), + "thatch" : (182, 157, 152), + "thatch green" : ( 64, 61, 25), + "thistle" : (216, 191, 216), + "thistle green" : (204, 202, 168), + "thunder" : ( 51, 41, 47), + "thunderbird" : (192, 43, 24), + "tia maria" : (193, 68, 14), + "tiara" : (195, 209, 209), + "tiber" : ( 6, 53, 55), + "tickle me pink" : (252, 128, 165), + "tidal" : (241, 255, 173), + "tide" : (191, 184, 176), + "timber green" : ( 22, 50, 44), + "timberwolf" : (217, 214, 207), + "titan white" : (240, 238, 255), + "toast" : (154, 110, 97), + "tobacco brown" : (113, 93, 71), + "toledo" : ( 58, 0, 32), + "tolopea" : ( 27, 2, 69), + "tom thumb" : ( 63, 88, 59), + "tonys pink" : (231, 159, 140), + "topaz" : (124, 119, 138), + "torch red" : (253, 14, 53), + "torea bay" : ( 15, 45, 158), + "tory blue" : ( 20, 80, 170), + "tosca" : (141, 63, 63), + "totem pole" : (153, 27, 7), + "tower gray" : (169, 189, 191), + "tradewind" : ( 95, 179, 172), + "tranquil" : (230, 255, 255), + "travertine" : (255, 253, 232), + "tree poppy" : (252, 156, 29), + "treehouse" : ( 59, 40, 32), + "trendy green" : (124, 136, 26), + "trendy pink" : (140, 100, 149), + "trinidad" : (230, 78, 3), + "tropical blue" : (195, 221, 249), + "tropical rain forest" : ( 0, 117, 94), + "trout" : ( 74, 78, 90), + "true v" : (138, 115, 214), + "tuatara" : ( 54, 53, 52), + "tuft bush" : (255, 221, 205), + "tulip tree" : (234, 179, 59), + "tumbleweed" : (222, 166, 129), + "tuna" : ( 53, 53, 66), + "tundora" : ( 74, 66, 68), + "turbo" : (250, 230, 0), + "turkish rose" : (181, 114, 129), + "turmeric" : (202, 187, 72), + "turquoise" : ( 48, 213, 200), + "turquoise blue" : (108, 218, 231), + "turtle green" : ( 42, 56, 11), + "tuscany" : (189, 94, 46), + "tusk" : (238, 243, 195), + "tussock" : (197, 153, 75), + "tutu" : (255, 241, 249), + "twilight" : (228, 207, 222), + "twilight blue" : (238, 253, 255), + "twine" : (194, 149, 93), + "tyrian purple" : (102, 2, 60), + "ultramarine" : ( 18, 10, 143), + "valencia" : (216, 68, 55), + "valentino" : ( 53, 14, 66), + "valhalla" : ( 43, 25, 79), + "van cleef" : ( 73, 23, 12), + "vanilla" : (209, 190, 168), + "vanilla ice" : (243, 217, 223), + "varden" : (255, 246, 223), + "venetian red" : (114, 1, 15), + "venice blue" : ( 5, 89, 137), + "venus" : (146, 133, 144), + "verdigris" : ( 93, 94, 55), + "verdun green" : ( 73, 84, 0), + "vermilion" : (255, 77, 0), + "vesuvius" : (177, 74, 11), + "victoria" : ( 83, 68, 145), + "vida loca" : ( 84, 144, 25), + "viking" : (100, 204, 219), + "vin rouge" : (152, 61, 97), + "viola" : (203, 143, 169), + "violent violet" : ( 41, 12, 94), + "violet" : ( 36, 10, 64), + "violet eggplant" : (153, 17, 153), + "violet red" : (247, 70, 138), + "viridian" : ( 64, 130, 109), + "viridian green" : (103, 137, 117), + "vis vis" : (255, 239, 161), + "vista blue" : (143, 214, 180), + "vista white" : (252, 248, 247), + "vivid tangerine" : (255, 153, 128), + "vivid violet" : (128, 55, 144), + "voodoo" : ( 83, 52, 85), + "vulcan" : ( 16, 18, 29), + "wafer" : (222, 203, 198), + "waikawa gray" : ( 90, 110, 156), + "waiouru" : ( 54, 60, 13), + "walnut" : (119, 63, 26), + "wasabi" : (120, 138, 37), + "water leaf" : (161, 233, 222), + "watercourse" : ( 5, 111, 87), + "waterloo " : (123, 124, 148), + "wattle" : (220, 215, 71), + "watusi" : (255, 221, 207), + "wax flower" : (255, 192, 168), + "we peep" : (247, 219, 230), + "web orange" : (255, 165, 0), + "wedgewood" : ( 78, 127, 158), + "well read" : (180, 51, 50), + "west coast" : ( 98, 81, 25), + "west side" : (255, 145, 15), + "westar" : (220, 217, 210), + "wewak" : (241, 155, 171), + "wheat" : (245, 222, 179), + "wheatfield" : (243, 237, 207), + "whiskey" : (213, 154, 111), + "whisper" : (247, 245, 250), + "white" : (255, 255, 255), + "white ice" : (221, 249, 241), + "white lilac" : (248, 247, 252), + "white linen" : (248, 240, 232), + "white pointer" : (254, 248, 255), + "white rock" : (234, 232, 212), + "wild blue yonder" : (122, 137, 184), + "wild rice" : (236, 224, 144), + "wild sand" : (244, 244, 244), + "wild strawberry" : (255, 51, 153), + "wild watermelon" : (253, 91, 120), + "wild willow" : (185, 196, 106), + "william" : ( 58, 104, 108), + "willow brook" : (223, 236, 218), + "willow grove" : (101, 116, 93), + "windsor" : ( 60, 8, 120), + "wine berry" : ( 89, 29, 53), + "winter hazel" : (213, 209, 149), + "wisp pink" : (254, 244, 248), + "wisteria" : (151, 113, 181), + "wistful" : (164, 166, 211), + "witch haze" : (255, 252, 153), + "wood bark" : ( 38, 17, 5), + "woodland" : ( 77, 83, 40), + "woodrush" : ( 48, 42, 15), + "woodsmoke" : ( 12, 13, 15), + "woody brown" : ( 72, 49, 49), + "xanadu" : (115, 134, 120), + "yellow" : (255, 255, 0), + "yellow green" : (197, 225, 122), + "yellow metal" : (113, 99, 56), + "yellow orange" : (255, 174, 66), + "yellow sea" : (254, 169, 4), + "your pink" : (255, 195, 192), + "yukon gold" : (123, 102, 8), + "yuma" : (206, 194, 145), + "zambezi" : (104, 85, 88), + "zanah" : (218, 236, 214), + "zest" : (229, 132, 27), + "zeus" : ( 41, 35, 25), + "ziggurat" : (191, 219, 226), + "zinnwaldite" : (235, 194, 175), + "zircon" : (244, 248, 255), + "zombie" : (228, 214, 155), + "zorba" : (165, 155, 145), + "zuccini" : ( 4, 64, 34), + "zumthor" : (237, 246, 255)} + +def build_reverse_dict(): + global reverse + global colorhex + global colors + for color in colors: + rgb = colors[color] + hex = '#%02X%02X%02X' % (rgb) + reverse[hex] = color + colorhex[color] = hex + return + + +def get_complementary_hex(color): + # strip the # from the beginning + color = color[1:] + # convert the string into hex + color = int(color, 16) + # invert the three bytes + # as good as substracting each of RGB component by 255(FF) + comp_color = 0xFFFFFF ^ color + # convert the color back to hex by prefixing a # + comp_color = "#%06X" % comp_color + # return the result + return comp_color + +def get_complementary_rgb(red, green, blue): + color_string = '#%02X%02X%02X' % (red, green, blue) + # strip the # from the beginning + color = color_string[1:] + # convert the string into hex + color = int(color, 16) + # invert the three bytes + # as good as substracting each of RGB component by 255(FF) + comp_color = 0xFFFFFF ^ color + # convert the color back to hex by prefixing a # + comp_color = "#%06X" % comp_color + # return the result + return comp_color + +def get_name_from_hex(hex): + global reverse + global colorhex + global colors + + hex = hex.upper() + try: + name = reverse[hex] + except: + name = 'No Hex For Name' + return name + +def get_hex_from_name(name): + global reverse + global colorhex + global colors + + name = name.lower() + try: + hex = colorhex[name] + except: + hex = '#000000' + return hex + +def show_all_colors_on_buttons(): + global reverse + global colorhex + global colors + form = g.FlexForm('Colors on Buttons Demo', default_element_size=(3,1), location=(0,0), icon=MY_WINDOW_ICON, font=("Helvetica", 7)) + row = [] + row_len = 20 + for i, c in enumerate(colors): + hex = get_hex_from_name(c) + button1 = g.Button(button_text=c, button_color=(get_complementary_hex(hex), hex), size=(8,1)) + button2 = g.Button(button_text=c, button_color=(hex,get_complementary_hex(hex)), size=(8,1)) + row.append(button1) + row.append(button2) + if (i+1) % row_len == 0: + form.AddRow(*row) + row = [] + if row != []: + form.AddRow(*row) + form.Show() + + +GoodColors = [('#0e6251',g.RGB(255,246,122) ), + ('white', g.RGB(0,74,60)), + (g.RGB(0,210,124),g.RGB(0,74,60) ), + (g.RGB(0,210,87),g.RGB(0,74,60) ), + (g.RGB(0,164,73),g.RGB(0,74,60) ), + (g.RGB(0,74,60),g.RGB(0,74,60) ), + + ] + + +def main(): + global colors + global reverse + + build_reverse_dict() + list_of_colors = [c for c in colors] + printable = '\n'.join(map(str, list_of_colors)) + # show_all_colors_on_buttons() + while True: + # ------- Form show ------- # + layout = [[g.Text('Find color')], + [g.Text('Demonstration of colors')], + [g.Text('Enter a color name in text or hex #RRGGBB format')], + [g.InputText()], + [g.Listbox(list_of_colors, size=(20,30)), g.T('Or choose from list')], + [g.Submit(), g.Quit(), g.SimpleButton('Show me lots of colors!', button_color=('white','#0e6251'))], + ] + # [g.Multiline(DefaultText=str(printable), Size=(30,20))]] + (button, (hex_input, drop_down_value)) = g.FlexForm('Color Demo', auto_size_text=True, icon=MY_WINDOW_ICON).LayoutAndShow(layout) + + drop_down_value = drop_down_value[0] + + # ------- Form show ------- # + # layout = [[g.Text('Find color')], + # [g.Text('Demonstration of colors')], + # [g.Text('Enter a color name in text or hex #RRGGBB format')], + # [g.InputText()], + # [g.InputCombo(list_of_colors, size=(20,6)), g.T('Or choose from list')], + # [g.Submit(), g.Quit(), g.SimpleButton('Show me lots of colors!', button_color=('white','#0e6251'))], + # ] + # # [g.Multiline(DefaultText=str(printable), Size=(30,20))]] + # (button, (hex_input, drop_down_value)) = g.FlexForm('Color Demo', auto_size_text=True, icon=MY_WINDOW_ICON).LayoutAndShow(layout) + + + # ------- OUTPUT results portion ------- # + if button == '' or button == 'Quit' or button is None: + exit(0) + elif button == 'Show me lots of colors!': + show_all_colors_on_buttons() + + if hex_input is not '' and hex_input[0] == '#': + color_hex = hex_input.upper() + color_name = get_name_from_hex(hex_input) + else: + color_name = drop_down_value + color_hex = get_hex_from_name(color_name) + + complementary_hex = get_complementary_hex(color_hex) + complementary_color = get_name_from_hex(complementary_hex) + + # g.MsgBox('Colors', 'The RBG value is', rgb, 'color and comp are', color_string, compl) + layout = [[g.Text('That color and it\'s compliment are shown on these buttons. This form auto-closes')], + [g.Button(button_text=color_name, button_color=(color_hex, complementary_hex))], + [g.Button(button_text=complementary_hex + ' ' + complementary_color, button_color=(complementary_hex , color_hex), size=(30,1))], + ] + g.FlexForm('Color demo', default_element_size=(100,1), auto_size_text=True, auto_close=True, auto_close_duration=5, icon=MY_WINDOW_ICON).LayoutAndShow(layout) + + + +if __name__ == '__main__': + main() diff --git a/Demo_Compare_Files.py b/Demo_Compare_Files.py new file mode 100644 index 00000000..25077a9a --- /dev/null +++ b/Demo_Compare_Files.py @@ -0,0 +1,33 @@ +import PySimpleGUI as sg + +def GetFilesToCompare(): + with sg.FlexForm('File Compare', auto_size_text=True) as form: + form_rows = [[sg.Text('Enter 2 files to comare')], + [sg.Text('File 1', size=(15, 1)), sg.InputText(), sg.FileBrowse()], + [sg.Text('File 2', size=(15, 1)), sg.InputText(), sg.FileBrowse()], + [sg.Submit(), sg.Cancel()]] + rc = form.LayoutAndShow(form_rows) + return rc + +def main(): + button, (f1, f2) = GetFilesToCompare() + if any((button != 'Submit', f1 =='', f2 == '')): + sg.MsgBoxError('Operation cancelled') + exit(69) + + with open(f1, 'rb') as file1: + with open(f2, 'rb') as file2: + a = file1.read() + b = file2.read() + + for i, x in enumerate(a): + if x != b[i]: + sg.MsgBox('Compare results for files', f1, f2, '**** Mismatch at offset {} ****'.format(i)) + break + else: + if len(a) == len(b): + sg.MsgBox('**** The files are IDENTICAL ****') + + +if __name__ == '__main__': + main() diff --git a/Demo_DisplayHash1and256.py b/Demo_DisplayHash1and256.py new file mode 100644 index 00000000..4aa3db1d --- /dev/null +++ b/Demo_DisplayHash1and256.py @@ -0,0 +1,123 @@ +#!Python 3 +import hashlib +import PySimpleGUI as SG + + ######################################################################### +# DisplayHash # +# A PySimpleGUI demo app that displays SHA1 hash for user browsed file # +# Useful and a recipe for GUI success # + ######################################################################### + +# ====____====____==== FUNCTION compute_hash_for_file(filename) ====____====____==== # +# Reads a file, computes the Hash # +# ---------------------------------------------------------------------------------- # +def compute_sha1_hash_for_file(filename): + try: + x = open(filename, "rb").read() + except: + return 0 + + m = hashlib.sha1() + m.update(x) + f_sha = m.hexdigest() + + return f_sha + + +# ====____====____==== FUNCTION compute_hash_for_file(filename) ====____====____==== # +# Reads a file, computes the Hash # +# ---------------------------------------------------------------------------------- # +def compute_sha256_hash_for_file(filename): + try: + f = open(filename, "rb") + x = f.read() + except: + return 0 + + m = hashlib.sha256() + m.update(x) + f_sha = m.hexdigest() + + return f_sha + + + # ====____====____==== Uses A GooeyGUI GUI ====____====____== # +# Get the filename, display the hash, dirt simple all around # + # ----------------------------------------------------------- # + +# ---------------------------------------------------------------------- # +# Compute and display SHA1 hash # +# Builds and displays the form using the most basic building blocks # +# ---------------------------------------------------------------------- # +def HashManuallyBuiltGUI(): + # ------- Form design ------- # + with SG.FlexForm('SHA-1 & 256 Hash', auto_size_text=True) as form: + form_rows = [[SG.Text('SHA-1 and SHA-256 Hashes for the file')], + [SG.InputText(), SG.FileBrowse()], + [SG.Submit(), SG.Cancel()]] + (button, (source_filename, )) = form.LayoutAndShow(form_rows) + + if button == 'Submit': + if source_filename != '': + hash_sha1 = compute_sha1_hash_for_file(source_filename).upper() + hash_sha256 = compute_sha256_hash_for_file(source_filename).upper() + SG.MsgBox( 'Display A Hash in PySimpleGUI', 'The SHA-1 Hash for the file\n', source_filename, hash_sha1, 'SHA-256 is', hash_sha256, line_width=75) + else: SG.MsgBoxError('Display A Hash in PySimpleGUI', 'Illegal filename') + else: + SG.MsgBoxError('Display A Hash in PySimpleGUI', '* Cancelled *') + +def HashManuallyBuiltGUINonContext(): + # ------- Form design ------- # + form = SG.FlexForm('SHA-1 & 256 Hash', auto_size_text=True) + form_rows = [[SG.Text('SHA-1 and SHA-256 Hashes for the file')], + [SG.InputText(), SG.FileBrowse()], + [SG.Submit(), SG.Cancel()]] + button, (source_filename, ) = form.LayoutAndShow(form_rows) + + if button == 'Submit': + if source_filename != '': + hash_sha1 = compute_sha1_hash_for_file(source_filename).upper() + hash_sha256 = compute_sha256_hash_for_file(source_filename).upper() + SG.MsgBox( 'Display A Hash in PySimpleGUI', 'The SHA-1 Hash for the file\n', source_filename, hash_sha1, 'SHA-256 is', hash_sha256, line_width=75) + else: SG.MsgBoxError('Display A Hash in PySimpleGUI', 'Illegal filename') + else: + SG.MsgBoxError('Display A Hash in PySimpleGUI', '* Cancelled *') + + + + +# ---------------------------------------------------------------------- # +# Compute and display SHA1 hash # +# This one cheats and uses the higher-level Get A File pre-made func # +# Hey, it's a really common operation so why not? # +# ---------------------------------------------------------------------- # +def HashMostCompactGUI(): + # ------- INPUT GUI portion ------- # + + rc, source_filename = SG.GetFileBox('Display A Hash Using PySimpleGUI', + 'Display a Hash code for file of your choice') + + # ------- OUTPUT GUI results portion ------- # + if rc == True: + hash = compute_sha1_hash_for_file(source_filename) + SG.MsgBox('Display Hash - Compact GUI', 'The SHA-1 Hash for the file\n', source_filename, hash) + else: + SG.MsgBox('Display Hash - Compact GUI', '* Cancelled *') + + +# ---------------------------------------------------------------------- # +# Our main calls two GUIs that act identically but use different calls # +# ---------------------------------------------------------------------- # +def main(): + HashManuallyBuiltGUINonContext() + HashMostCompactGUI() + + +# ====____====____==== Pseudo-MAIN program ====____====____==== # +# This is our main-alike piece of code # +# + Starts up the GUI # +# + Gets values from GUI # +# + Runs DeDupe_folder based on GUI inputs # +# ------------------------------------------------------------- # +if __name__ == '__main__': + main() diff --git a/Demo_DuplicateFileFinder.py b/Demo_DuplicateFileFinder.py new file mode 100644 index 00000000..40cef699 --- /dev/null +++ b/Demo_DuplicateFileFinder.py @@ -0,0 +1,57 @@ +import hashlib +import os +import PySimpleGUI as sg + + +# ====____====____==== FUNCTION DeDuplicate_folder(path) ====____====____==== # +# Function to de-duplicate the folder passed in # +# --------------------------------------------------------------------------- # +def FindDuplicatesFilesInFolder(path): + shatab = [] + total = 0 + small_count, dup_count, error_count = 0,0,0 + pngdir = path + if not os.path.exists(path): + sg.MsgBox('Duplicate Finder', '** Folder doesn\'t exist***', path) + return + pngfiles = os.listdir(pngdir) + total_files = len(pngfiles) + for idx, f in enumerate(pngfiles): + if not sg.EasyProgressMeter('Counting Duplicates', idx + 1, total_files, 'Counting Duplicate Files'): + break + total += 1 + fname = os.path.join(pngdir, f) + if os.path.isdir(fname): + continue + x = open(fname, "rb").read() + + m = hashlib.sha256() + m.update(x) + f_sha = m.digest() + if f_sha in shatab: + # uncomment next line to remove duplicate files + # os.remove(fname) + dup_count += 1 + # sg.Print(f'Duplicate file - {f}') # cannot current use sg.Print with Progress Meter + continue + shatab.append(f_sha) + + msg = f'{total} Files processed\n'\ + f'{dup_count} Duplicates found\n' + sg.MsgBox('Duplicate Finder Ended', msg) + +# ====____====____==== Pseudo-MAIN program ====____====____==== # +# This is our main-alike piece of code # +# + Starts up the GUI # +# + Gets values from GUI # +# + Runs DeDupe_folder based on GUI inputs # +# ------------------------------------------------------------- # +if __name__ == '__main__': + + source_folder = None + rc, source_folder = sg.GetPathBox('Duplicate Finder - Count number of duplicate files', 'Enter path to folder you wish to find duplicates in') + if rc is True and source_folder is not None: + FindDuplicatesFilesInFolder(source_folder) + else: + sg.MsgBoxCancel('Cancelling', '*** Cancelling ***') + exit(0) diff --git a/Demo_GoodColors.py b/Demo_GoodColors.py new file mode 100644 index 00000000..7d0402f8 --- /dev/null +++ b/Demo_GoodColors.py @@ -0,0 +1,50 @@ +import PySimpleGUI as gg +import time + +def main(): + # ------- Make a new FlexForm ------- # + form = gg.FlexForm('GoodColors', auto_size_text=True, default_element_size=(30,2)) + form.AddRow(gg.Text('Having trouble picking good colors? Try one of the colors defined by PySimpleGUI')) + form.AddRow(gg.Text('Here come the good colors as defined by PySimpleGUI')) + + #===== Show some nice BLUE colors with yellow text ===== ===== ===== ===== ===== ===== =====# + text_color = gg.YELLOWS[0] + buttons = (gg.SimpleButton(f'BLUES[{j}]\n{c}', button_color=(text_color, c), size=(10,2)) for j, c in enumerate(gg.BLUES)) + form.AddRow(gg.T('Button Colors Using PySimpleGUI.BLUES')) + form.AddRow(*buttons) + form.AddRow(gg.Text('_' * 100, size=(65, 1))) + + #===== Show some nice PURPLE colors with yellow text ===== ===== ===== ===== ===== ===== =====# + buttons = (gg.SimpleButton(f'PURPLES[{j}]\n{c}', button_color=(text_color, c), size=(10,2)) for j, c in enumerate(gg.PURPLES)) + form.AddRow(gg.T('Button Colors Using PySimpleGUI.PURPLES')) + form.AddRow(*buttons) + form.AddRow(gg.Text('_' * 100, size=(65, 1))) + + #===== Show some nice GREEN colors with yellow text ===== ===== ===== ===== ===== ===== =====# + buttons = (gg.SimpleButton(f'GREENS[{j}]\n{c}', button_color=(text_color, c), size=(10,2)) for j, c in enumerate(gg.GREENS)) + form.AddRow(gg.T('Button Colors Using PySimpleGUI.GREENS')) + form.AddRow(*buttons) + form.AddRow(gg.Text('_' * 100, size=(65, 1))) + + #===== Show some nice TAN colors with yellow text ===== ===== ===== ===== ===== ===== =====# + text_color = gg.GREENS[0] # let's use GREEN text on the tan + buttons = (gg.SimpleButton(f'TANS[{j}]\n{c}', button_color=(text_color, c), size=(10,2)) for j, c in enumerate(gg.TANS)) + form.AddRow(gg.T('Button Colors Using PySimpleGUI.TANS')) + form.AddRow(*buttons) + form.AddRow(gg.Text('_' * 100, size=(65, 1))) + + #===== Show some nice YELLOWS colors with black text ===== ===== ===== ===== ===== ===== =====# + text_color = 'black' # let's use black text on the tan + buttons = (gg.SimpleButton(f'YELLOWS[{j}]\n{c}', button_color=(text_color, c), size=(10,2)) for j, c in enumerate(gg.YELLOWS)) + form.AddRow(gg.T('Button Colors Using PySimpleGUI.YELLOWS')) + form.AddRow(*buttons) + form.AddRow(gg.Text('_' * 100, size=(65, 1))) + + + #===== Add a click me button for fun and SHOW the form ===== ===== ===== ===== ===== ===== =====# + form.AddRow(gg.SimpleButton('Click ME!')) + (button, value) = form.Show() # show it! + + +if __name__ == '__main__': + main() diff --git a/Demo_HowDoI.py b/Demo_HowDoI.py new file mode 100644 index 00000000..e7385bfd --- /dev/null +++ b/Demo_HowDoI.py @@ -0,0 +1,55 @@ +import PySimpleGUI as SG +import subprocess +import howdoi + +# Test this command in a dos window if you are having trouble. +HOW_DO_I_COMMAND = 'python -m howdoi.howdoi' + +# if you want an icon on your taskbar for this gui, then change this line of code to point to the ICO file +DEFAULT_ICON = 'E:\\TheRealMyDocs\\Icons\\QuestionMark.ico' + +def HowDoI(): + ''' + Make and show a window (PySimpleGUI form) that takes user input and sends to the HowDoI web oracle + Excellent example of 2 GUI concepts + 1. Output Element that will show text in a scrolled window + 2. Non-Window-Closing Buttons - These buttons will cause the form to return with the form's values, but doesn't close the form + :return: never returns + ''' + # ------- Make a new FlexForm ------- # + SG.SetOptions(border_width=1) + form = SG.FlexForm('How Do I ??', auto_size_text=True, default_element_size=(30, 2), icon=DEFAULT_ICON) + form.AddRow(SG.Text('Ask and your answer will appear here....', size=(40, 1))) + form.AddRow(SG.Output(size=(90, 20))) + form.AddRow(SG.Multiline(size=(85, 5), enter_submits=True), + SG.ReadFormButton('SEND', button_color=(SG.YELLOWS[0], SG.BLUES[0])), + SG.SimpleButton('EXIT', button_color=(SG.YELLOWS[0], SG.GREENS[0]))) + + # ---===--- Loop taking in user input and using it to query HowDoI --- # + while True: + (button, value) = form.Read() + if button == 'SEND': + QueryHowDoI(value[0][:-1]) # send string without carriage return on end + else: + break # exit button clicked + + exit(69) + +def QueryHowDoI(Query): + ''' + Kicks off a subprocess to send the 'Query' to HowDoI + Prints the result, which in this program will route to a gooeyGUI window + :param Query: text english question to ask the HowDoI web engine + :return: nothing + ''' + howdoi_command = HOW_DO_I_COMMAND + t = subprocess.Popen(howdoi_command + ' '+ Query, stdout=subprocess.PIPE) + (output, err) = t.communicate() + print('You asked: '+ Query) + print('_______________________________________') + print(output.decode("utf-8") ) + exit_code = t.wait() + +if __name__ == '__main__': + HowDoI() + diff --git a/Demo_Media_Player.py b/Demo_Media_Player.py new file mode 100644 index 00000000..fdc01434 --- /dev/null +++ b/Demo_Media_Player.py @@ -0,0 +1,64 @@ +import PySimpleGUI as sg + +# +# An Async Demonstration of a media player +# Uses button images for a super snazzy look +# See how it looks here: +# https://user-images.githubusercontent.com/13696193/43159403-45c9726e-8f50-11e8-9da0-0d272e20c579.jpg +# +def MediaPlayerGUI(): + + # Images are located in a subfolder in the Demo Media Player.py folder + image_pause = './ButtonGraphics/Pause.png' + image_restart = './ButtonGraphics/Restart.png' + image_next = './ButtonGraphics/Next.png' + image_exit = './ButtonGraphics/Exit.png' + + # A text element that will be changed to display messages in the GUI + TextElem = sg.Text('', size=(15, 2), font=("Helvetica", 14)) + + # Open a form, note that context manager can't be used generally speaking for async forms + form = sg.FlexForm('Media File Player', auto_size_text=True, default_element_size=(20, 1), + font=("Helvetica", 25)) + # define layout of the rows + layout= [[sg.Text('Media File Player',size=(17,1), font=("Helvetica", 25))], + [TextElem], + [sg.ReadFormButton('Restart Song', button_color=sg.TRANSPARENT_BUTTON, + image_filename=image_restart, image_size=(50, 50), image_subsample=2, border_width=0), + sg.Text(' ' * 2), + sg.ReadFormButton('Pause', button_color=sg.TRANSPARENT_BUTTON, + image_filename=image_pause, image_size=(50, 50), image_subsample=2, border_width=0), + sg.Text(' ' * 2), + sg.ReadFormButton('Next', button_color=sg.TRANSPARENT_BUTTON, + image_filename=image_next, image_size=(50, 50), image_subsample=2, border_width=0), + sg.Text(' ' * 2), + sg.Text(' ' * 2), sg.SimpleButton('Exit', button_color=sg.TRANSPARENT_BUTTON, + image_filename=image_exit, image_size=(50, 50), image_subsample=2, border_width=0)], + [sg.Text('_'*30)], + [sg.Text(' '*30)], + [ + sg.Slider(range=(-10, 10), default_value=0, size=(10, 20), orientation='vertical', font=("Helvetica", 15)), + sg.Text(' ' * 2), + sg.Slider(range=(-10, 10), default_value=0, size=(10, 20), orientation='vertical', font=("Helvetica", 15)), + sg.Text(' ' * 8), + sg.Slider(range=(-10, 10), default_value=0, size=(10, 20), orientation='vertical', font=("Helvetica", 15))], + [sg.Text('Bass', font=("Helvetica", 15), size=(6, 1)), + sg.Text('Treble', font=("Helvetica", 15), size=(10, 1)), + sg.Text('Volume', font=("Helvetica", 15), size=(7, 1))] + + ] + + # Call the same LayoutAndRead but indicate the form is non-blocking + form.LayoutAndRead(layout, non_blocking=True) + # Our event loop + while(True): + # Read the form (this call will not block) + button, values = form.ReadNonBlocking() + if button == 'Exit': + break + # If a button was pressed, display it on the GUI by updating the text element + if button: + TextElem.Update(button) + +MediaPlayerGUI() + diff --git a/Demo_NonBlocking_Form.py b/Demo_NonBlocking_Form.py new file mode 100644 index 00000000..8e43d6dd --- /dev/null +++ b/Demo_NonBlocking_Form.py @@ -0,0 +1,59 @@ +import PySimpleGUI as sg +import time + +def main(): + StatusOutputExample() + +# form that doen't block +def StatusOutputExample_context_manager(): + with sg.FlexForm('Running Timer', auto_size_text=True) as form: + output_element = sg.Text('', size=(8, 2), font=('Helvetica', 20)) + form_rows = [[sg.Text('Non-blocking GUI with updates')], + [output_element], + [sg.SimpleButton('Quit')]] + + form.LayoutAndRead(form_rows, non_blocking=True) + + for i in range(1, 1000): + output_element.Update('{:02d}:{:02d}.{:02d}'.format(*divmod(int(i/100), 60), i%100)) + button, values = form.ReadNonBlocking() + if values is None or button == 'Quit': + break + time.sleep(.01) + else: + form.CloseNonBlockingForm() + + +# form that doen't block +def StatusOutputExample(): + # Make a form, but don't use context manager + form = sg.FlexForm('Running Timer', auto_size_text=True) + # Create a text element that will be updated with status information on the GUI itself + output_element = sg.Text('', size=(8, 2), font=('Helvetica', 20)) + # Create the rows + form_rows = [[sg.Text('Non-blocking GUI with updates')], + [output_element], + [sg.SimpleButton('Quit')]] + # Layout the rows of the form and perform a read. Indicate the form is non-blocking! + form.LayoutAndRead(form_rows, non_blocking=True) + + # + # Some place later in your code... + # You need to perform a ReadNonBlocking on your form every now and then or + # else it won't refresh + # + + for i in range(1, 1000): + output_element.Update('{:02d}:{:02d}.{:02d}'.format(*divmod(int(i / 100), 60), i % 100)) + button, values = form.ReadNonBlocking() + if values is None or button == 'Quit': + break + time.sleep(.01) + else: + form.CloseNonBlockingForm() + + + +if __name__ == '__main__': + + main() diff --git a/Demo_Recipes.py b/Demo_Recipes.py new file mode 100644 index 00000000..8b8e9293 --- /dev/null +++ b/Demo_Recipes.py @@ -0,0 +1,168 @@ +import time +from random import randint +import PySimpleGUI as sg + +# A simple blocking form. Your best starter-form +def SourceDestFolders(): + with sg.FlexForm('Demo Source / Destination Folders', auto_size_text=True) as form: + form_rows = [[sg.Text('Enter the Source and Destination folders')], + [sg.Text('Source Folder', size=(15, 1), auto_size_text=False, justification='right'), sg.InputText('Source')], + [sg.Text('Destination Folder', size=(15, 1), auto_size_text=False, justification='right'), sg.InputText('Dest'), sg.FolderBrowse()], + [sg.Submit(), sg.Cancel()]] + + button, (source, dest) = form.LayoutAndRead(form_rows) + if button == 'Submit': + sg.MsgBox('Submitted', 'The user entered source:', source, 'Destination folder:', dest, 'Using button', button) + else: + sg.MsgBoxError('Cancelled', 'User Cancelled') + +# YOUR BEST STARTING POINT +# This is a form showing you all of the basic Elements (widgets) +# Some have a few of the optional parameters set, but there are more to choose from +# You want to use the context manager because it will free up resources when you are finished +# Use this especially if you are runningm multi-threaded +# Where you free up resources is really important to tkinter +def Everything(): + with sg.FlexForm('Everything bagel', auto_size_text=True, default_element_size=(40, 1)) as form: + layout = [ + [sg.Text('All graphic widgets in one form!', size=(30, 1), font=("Helvetica", 25), text_color='blue')], + [sg.Text('Here is some text.... and a place to enter text')], + [sg.InputText()], + [sg.Checkbox('My first checkbox!'), sg.Checkbox('My second checkbox!', default=True)], + [sg.Radio('My first Radio! ', "RADIO1", default=True), sg.Radio('My second Radio!', "RADIO1")], + [sg.Multiline(default_text='This is the default Text shoulsd you decide not to type anything', + scale=(2, 10))], + [sg.InputCombo(['Combobox 1', 'Combobox 2'], size=(20, 3)), + sg.Slider(range=(1, 100), orientation='h', size=(35, 20), default_value=85)], + [sg.Listbox(values=['Listbox 1', 'Listbox 2', 'Listbox 3'], size=(30, 6)), + sg.Slider(range=(1, 100), orientation='v', size=(10, 20), default_value=25), + sg.Slider(range=(1, 100), orientation='v', size=(10, 20), default_value=75), + sg.Slider(range=(1, 100), orientation='v', size=(10, 20), default_value=10), + sg.Spin(values=('Spin Box 1', '2','3'), initial_value='Spin Box 1')], + [sg.Text('_' * 100, size=(70, 1))], + [sg.Text('Choose Source and Destination Folders', size=(35, 1))], + [sg.Text('Source Folder', size=(15, 1), auto_size_text=False, justification='right'), sg.InputText('Source'), sg.FolderBrowse()], + [sg.Text('Destination Folder', size=(15, 1), auto_size_text=False, justification='right'), sg.InputText('Dest'), + sg.FolderBrowse()], + [sg.Submit(), sg.Cancel(), sg.SimpleButton('Customized', button_color=('white', 'green'))] + ] + + button, values = form.LayoutAndRead(layout) + + sg.MsgBox('Title', 'Typical message box', 'The results of the form are a lot of data! Get ready... ', 'The button clicked was "{}"'.format(button), 'The values are', values) + +# Should you decide not to use a context manager, then try this form as your starting point +# Be aware that tkinter, which this is based on, is picky about who frees up resources, especially if +# you are running multithreaded +def Everything_NoContextManager(): + form = sg.FlexForm('Everything bagel', auto_size_text=True, default_element_size=(40, 1)) + layout = [[sg.Text('All graphic widgets in one form!', size=(30, 1), font=("Helvetica", 25), text_color='blue')], + [sg.Text('Here is some text.... and a place to enter text')], + [sg.InputText()], + [sg.Checkbox('My first checkbox!'), sg.Checkbox('My second checkbox!', default=True)], + [sg.Radio('My first Radio! ', "RADIO1", default=True), sg.Radio('My second Radio!', "RADIO1")], + [sg.Multiline(default_text='This is the default Text shoulsd you decide not to type anything', scale=(2, 10))], + [sg.InputCombo(['Combobox 1', 'Combobox 2'], size=(20, 3)), sg.Slider(range=(1, 100), orientation='h', size=(35, 20), default_value=85)], + [sg.Listbox(values=['Listbox 1', 'Listbox 2', 'Listbox 3'], size=(30, 6)), + sg.Slider(range=(1, 100), orientation='v', size=(10, 20), default_value=25), + sg.Slider(range=(1, 100), orientation='v', size=(10, 20), default_value=75), + sg.Slider(range=(1, 100), orientation='v', size=(10, 20), default_value=10)], + [sg.Text('_' * 100, size=(70, 1))], + [sg.Text('Choose Source and Destination Folders', size=(35, 1), text_color='red')], + [sg.Text('Source Folder', size=(15, 1), auto_size_text=False, justification='right'), sg.InputText('Source'), sg.FolderBrowse()], + [sg.Text('Destination Folder', size=(15, 1), auto_size_text=False, justification='right'), sg.InputText('Dest'), sg.FolderBrowse()], + [sg.Submit(), sg.Cancel(), sg.SimpleButton('Customized', button_color=('white', 'green'))]] + + button, values = form.LayoutAndRead(layout) + del(form) + + sg.MsgBox('Title', 'Typical message box', 'Here are the restults! There is one entry per input field ', 'The button clicked was "{}"'.format(button), 'The values are', values) + +def ProgressMeter(): + for i in range(1,10000): + if not sg.EasyProgressMeter('My Meter', i + 1, 10000): break + # SG.Print(i) + +# Blocking form that doesn't close +def ChatBot(): + with sg.FlexForm('Chat Window', auto_size_text=True, default_element_size=(30, 2)) as form: + layout = [[(sg.Text('This is where standard out is being routed', size=[40, 1]))], + [sg.Output(size=(80, 20))], + [sg.Multiline(size=(70, 5), enter_submits=True), sg.ReadFormButton('SEND', button_color=(sg.YELLOWS[0], sg.BLUES[0])), sg.SimpleButton('EXIT', button_color=(sg.YELLOWS[0], sg.GREENS[0]))]] + # notice this is NOT the usual LayoutAndRead call because you don't yet want to read the form + # if you call LayoutAndRead from here, then you will miss the first button click + form.Layout(layout) + # ---===--- Loop taking in user input and using it to query HowDoI web oracle --- # + while True: + button, value = form.Read() + if button == 'SEND': + print(value) + else: + break + +# Shows a form that's a running counter +# this is the basic design pattern if you can keep your reading of the +# form within the 'with' block. If your read occurs far away in your code from the form creation +# then you will want to use the NonBlockingPeriodicUpdateForm example +def NonBlockingPeriodicUpdateForm_ContextManager(): + with sg.FlexForm('Running Timer', auto_size_text=True) as form: + text_element = sg.Text('', size=(10, 2), font=('Helvetica', 20), text_color='red', justification='center') + layout = [[sg.Text('Non blocking GUI with updates', justification='center')], + [text_element], + [sg.T(' ' * 15), sg.Quit()]] + form.LayoutAndRead(layout, non_blocking=True) + + for i in range(1,500): + text_element.Update('{:02d}:{:02d}.{:02d}'.format((i // 100) // 60, (i // 100) % 60, i % 100)) + button, values = form.ReadNonBlocking() + if values is None or button == 'Quit': # if user closed the window using X + break + time.sleep(.01) + else: + # if the loop finished then need to close the form for the user + form.CloseNonBlockingForm() + +# Use this context-manager-free version if your read of the form occurs far away in your code +# from the form creation (call to LayoutAndRead) +def NonBlockingPeriodicUpdateForm(): + # Show a form that's a running counter + form = sg.FlexForm('Running Timer', auto_size_text=True) + text_element = sg.Text('', size=(10, 2), font=('Helvetica', 20), justification='center') + form_rows = [[sg.Text('Non blocking GUI with updates')], + [text_element], + [sg.T(' ' * 15), sg.Quit()]] + form.LayoutAndRead(form_rows, non_blocking=True) + + for i in range(1,50000): + text_element.Update('{:02d}:{:02d}.{:02d}'.format((i//100)//60, (i//100)%60, i%100)) + button, values = form.ReadNonBlocking() + if values is None or button == 'Quit': # if user closed the window using X or clicked Quit button + break + time.sleep(.01) + else: + # if the loop finished then need to close the form for the user + form.CloseNonBlockingForm() + del(form) + +def DebugTest(): + # SG.Print('How about we print a bunch of random numbers?', , size=(90,40)) + for i in range (1,300): + sg.Print(i, randint(1, 1000), end='', sep='-') + + +def main(): + # SG.SetOptions(border_width=1, font=("Helvetica", 10), button_color=('white', SG.BLUES[0]), slider_border_width=1) + NonBlockingPeriodicUpdateForm_ContextManager() + NonBlockingPeriodicUpdateForm() + Everything_NoContextManager() + Everything() + ChatBot() + ProgressMeter() + SourceDestFolders() + ChatBot() + DebugTest() + sg.MsgBox('Done with all recipes') + +if __name__ == '__main__': + main() + exit(69) diff --git a/Demo_Tabbed_Form.py b/Demo_Tabbed_Form.py new file mode 100644 index 00000000..e6bcede0 --- /dev/null +++ b/Demo_Tabbed_Form.py @@ -0,0 +1,89 @@ +import PySimpleGUI as sg + +MAX_NUMBER_OF_THREADS = 12 + +def eBaySuperSearcherGUI(): + # Drop Down list of options + configs = ('0 - Gruen - Started 2 days ago in Watches', + '1 - Gruen - Currently Active in Watches', + '2 - Alpina - Currently Active in Jewelry', + '3 - Gruen - Ends in 1 day in Watches', + '4 - Gruen - Completed in Watches', + '5 - Gruen - Advertising', + '6 - Gruen - Currently Active in Jewelry', + '7 - Gruen - Price Test', + '8 - Gruen - No brand name specified') + + us_categories = ('Use Default with no change', + 'All - 1', + 'Jewelry - 281', + ' Watches - 14324', + ' Wristwatches - 31387', + ' Pocket Watches - 3937', + 'Advertising - 34', + ' Watch Ads - 165254' + ) + + german_categories =('Use Default with no change', + 'All - 1', + 'Jewelry - 281', + ' Watches - 14324', + ' Wristwatches - 31387', + ' Pocket Watches - 3937', + 'Advertising - 1', + ' Watch Ads - 19823' + ) + + + # the form layout + with sg.FlexForm('EBay Super Searcher', auto_size_text=True) as form: + with sg.FlexForm('EBay Super Searcher') as form2: + layout_tab_1 = [[sg.Text('eBay Super Searcher!', size=(60,1), font=('helvetica', 15))], + [sg.Text('Choose base configuration to run')], + [sg.InputCombo(configs)], + [sg.Text('_'*100, size=(80,1))], + [sg.InputText(),sg.Text('Choose Destination Folder'), sg.FolderBrowse(target=(sg.ThisRow,0))], + [sg.InputText(),sg.Text('Custom text to add to folder name')], + [sg.Text('_'*100, size=(80,1))], + [sg.Checkbox('US', default=True, size=(15, 1)), sg.Checkbox('German', size=(15, 1), default=True, )], + [sg.Radio('Active Listings','ActiveComplete', default = True,size=(15, 1)), sg.Radio('Completed Listings', 'ActiveComplete', size=(15, 1))], + [sg.Text('_'*100, size=(80,1))], + [sg.Checkbox('Save Images', size=(15,1)),sg.Checkbox('Save PDFs', size=(15,1)), sg.Checkbox('Extract PDFs', size=(15,1))], + [sg.Text('_'*100, size=(80,1))], + [sg.Text('Time Filters')], + [sg.Radio('No change','time', default=True),sg.Radio('ALL listings','time'),sg.Radio('Started 1 day ago','time', size=(15,1)),sg.Radio('Started 2 days ago','time', size=(15,1)), sg.Radio('Ends in 1 day','time', size=(15,1))], + [sg.Text('_'*100, size=(80,1))], + [sg.Text('Price Range'), sg.InputText(size=(10,1)),sg.Text('To'), sg.InputText(size=(10,1))], + [sg.Text('_'*100, size=(80,1))], + [sg.Submit(button_color=('red', 'yellow')), sg.Cancel(button_color=('white', 'blue')), sg.Text(f'{MAX_NUMBER_OF_THREADS} Threads will be started')]] + + + # First category is default (need to special case this) + layout_tab_2 = [[sg.Text('Choose Category')], + [sg.Text('US Categories'),sg.Text('German Categories')], + [sg.Radio(us_categories[0],'CATUS', default=True), sg.Radio(german_categories[0], 'CATDE', default=True)]] + + for i,cat in enumerate(us_categories): + if i == 0: continue # skip first one + layout_tab_2.append([sg.Radio(cat,'CATUS'), sg.Radio(german_categories[i],'CATDE')]) + + + layout_tab_2.append([sg.Text('_' * 100, size=(75, 1))]) + layout_tab_2.append([sg.Text('US Search String Override')]) + layout_tab_2.append([sg.InputText(size=(100,1))]) + layout_tab_2.append([sg.Text('German Search String Override')]) + layout_tab_2.append([sg.InputText(size=(100,1))]) + layout_tab_2.append([sg.Text('Typical US Search String')]) + layout_tab_2.append([sg.InputText(size=(100,1), default_text='gruen -sara -quarz -quartz -embassy -bob -robert -elephants -adidas -LED ')]) + layout_tab_2.append([sg.Text('_' * 100, size=(75, 1))]) + layout_tab_2.append([sg.Submit(button_color=('red', 'yellow'),auto_size_text=True), sg.Cancel(button_color=('white', 'blue'), auto_size_text=True)]) + + results = sg.ShowTabbedForm('eBay Super Searcher', (form,layout_tab_1,'Where To Save'), (form2, layout_tab_2, 'Categories & Search String')) + + return results + + +if __name__ == '__main__': + results = eBaySuperSearcherGUI() + print(results) + sg.MsgBox('Results', results) \ No newline at end of file