If you are not sure if the website you would like to visit is secure, you can verify it here. Enter the website address of the page and see parts of its content and the thumbnail images on this site. None (if any) dangerous scripts on the referenced page will be executed. Additionally, if the selected site contains subpages, you can verify it (review) in batches containing 5 pages.
favicon.ico: dan.yeaw.me - Dan Yeaw's Blog.

site address: dan.yeaw.me

site title: Dan Yeaw's Blog

Our opinion (on Tuesday 05 May 2026 20:10:33 UTC):

GREEN status (no comments) - no comments
After content analysis of this website we propose the following hashtags:



Meta tags:
description=Open source, mobility, and me.;

Headings (most frequently used words):

your, the, to, python, step, on, test, widget, job, with, actions, workflow, cd, library, dependencies, github, development, how, and, for, configuration, using, application, platform, implement, pypi, gnome, u2f, packaging, steps, build, iterate, account, ci, my, other, toga_impl, backend, pyproject, toml, create, distribution, complete, define, gitlab, cli, big, change, opensuse, passwordless, login, automate, rock, poetry, briefcase, native, gui, widgets, beeware, short, background, tutorial, goodbye, ford, hello, anaconda, installing, required, software, associating, key, edit, pam, logging, in, troubleshooting, enable, debug, mode, unlock, keyring, overview, of, experience, systems, deploy, future, improvements, bonus, great, pick, research, write, docs, toga_core, tdd, dummy, execute, events, lint, upload, caching, release, app, installers, tools, initial, tool, installation, testpypi, sign, up, project, install, bundle, run, publish, through, implementation,

Text of the page (most frequently used words):
the (715), and (300), for (196), that (174), you (130), this (125), your (112), with (108), #python (108), are (81), using (77), use (69), poetry (63), widget (56), will (53), run (53), #actions (49), workflow (47), create (46), new (46), test (46), github (46), install (45), canvas (44), then (44), build (44), can (44), name (44), like (43), platform (43), was (43), version (42), have (41), project (41), file (41), other (39), from (39), step (36), app (36), dependencies (36), configuration (36), would (35), also (34), release (34), all (33), self (33), called (33), job (33), now (31), created (30), these (30), make (29), package (29), more (28), how (27), but (27), steps (25), windows (25), library (25), toga (24), native (24), api (24), tests (24), macos (24), setup (24), each (23), uses (23), when (23), which (23), they (23), one (23), used (23), action (23), lint (23), what (22), there (22), any (22), get (22), application (22), add (21), since (21), code (21), first (21), pypi (21), platforms (20), briefcase (20), cache (20), login (20), interface (19), once (19), some (19), different (19), layer (19), projects (19), latest (19), gnome (19), implementation (18), rect (18), upload (18), time (17), toga_impl (17), where (17), next (17), linux (17), tool (17), enter (17), packaging (17), matrix (17), dan (16), example (16), want (16), automatically (16), most (16), not (16), running (16), pip (16), files (16), repo (16), yubikey (16), pam (16), yeaw (15), drawing (15), gtk (15), toga_core (15), allows (15), user (15), has (15), software (15), set (15), open (15), source (15), pytest (15), system (15), two (15), jobs (15), auth (15), about (14), creating (14), through (14), needs (14), should (14), need (14), based (14), over (14), started (14), password (14), publish (14), config (14), commit (14), ubuntu (14), sudo (14), travis (14), keyring (14), complete (13), def (13), here (13), good (13), widgets (13), way (13), key (13), instead (13), lock (13), runs (13), method (12), class (12), draw (12), work (12), were (12), our (12), development (12), last (12), case (12), their (12), gui (12), beeware (12), only (12), libraries (12), tools (12), going (12), toml (12), template (12), branch (12), workflows (12), push (12), start (11), testing (11), without (11), factory (11), provides (11), out (11), 100 (11), users (11), edit (11), three (11), order (11), https (11), pyproject (11), hit (11), change (11), define (11), versions (11), earlier (11), while (11), keyword (11), back (10), height (10), width (10), simple (10), able (10), write (10), because (10), own (10), information (10), although (10), distribution (10), wheel (10), yaml (10), common (10), pipelines (10), u2f (10), 2019 (9), line (9), rectangle (9), below (9), calls (9), context (9), may (9), check (9), working (9), could (9), long (9), parallel (9), being (9), really (9), look (9), pull (9), things (9), very (9), building (9), type (9), creates (9), environment (9), changes (9), dev (9), multiple (9), secrets (9), pre (9), gitlab (9), unlock (9), backend (8), fill (8), already (8), think (8), module (8), does (8), before (8), feedback (8), main (8), well (8), required (8), gaphor (8), repository (8), built (8), dependency (8), final (8), yes (8), update (8), command (8), git (8), terminal (8), keys (8), services (8), log (8), pam_u2f (8), yubico (8), u2f_keys (8), experience (7), implement (7), finally (7), those (7), event (7), aren (7), done (7), pass (7), style (7), object (7), same (7), across (7), cases (7), writing (7), help (7), documentation (7), see (7), request (7), lot (7), ctx (7), important (7), etc (7), makes (7), setting (7), virtual (7), just (7), made (7), ford (7), much (7), sdist (7), dantestapp (7), requirements (7), cookiecutter (7), account (7), master (7), execute (7), tag (7), getting (7), had (7), off (7), end (7), azure (7), authentication (7), examples (6), creation (6), android (6), require (6), objects (6), after (6), copy (6), call (6), integration (6), sure (6), _impl (6), part (6), correct (6), defines (6), successfully (6), process (6), public (6), making (6), point (6), select (6), them (6), great (6), support (6), cross (6), single (6), available (6), against (6), systems (6), complex (6), installed (6), above (6), manually (6), list (6), packages (6), prompt (6), nice (6), major (6), again (6), value (6), operating (6), often (6), assets (6), ssh (6), mentioned (6), expression (6), checkout (6), commands (6), python3 (6), coverage (6), service (6), opensuse (6), gnupg (6), description (5), research (5), 2018 (5), updates (5), none (5), connect (5), drawingarea (5), dummy (5), methods (5), continuous (5), wanted (5), don (5), optional (5), recommend (5), portion (5), ask (5), others (5), screen (5), manager (5), easy (5), familiar (5), looking (5), defined (5), similar (5), var (5), requires (5), definitely (5), needed (5), normally (5), easier (5), output (5), deploy (5), engineering (5), safety (5), org (5), default (5), notice (5), released (5), option (5), virtualenvs (5), been (5), script (5), manifest (5), another (5), following (5), runner (5), didn (5), access (5), token (5), xvfb (5), local (5), yml (5), team (5), rsa4096 (5), root (5), touch (5), glab (5), improve (4), did (4), lines (4), programming (4), take (4), break (4), during (4), doesn (4), component (4), specific (4), move (4), previous (4), further (4), along (4), modify (4), words (4), second (4), discuss (4), folder (4), specify (4), 200 (4), path (4), types (4), try (4), many (4), design (4), its (4), around (4), implementing (4), device (4), feel (4), background (4), directly (4), couple (4), web (4), ios (4), table (4), trying (4), isn (4), little (4), blog (4), post (4), eventually (4), company (4), took (4), future (4), testpypi (4), location (4), options (4), installing (4), tested (4), allow (4), ensure (4), existing (4), distribute (4), focus (4), place (4), format (4), standard (4), always (4), gaphas (4), top (4), flathub (4), special (4), separate (4), recently (4), still (4), custom (4), shell (4), scripts (4), wasn (4), posted (4), dmg (4), ready (4), tab (4), apt (4), strategy (4), something (4), miss (4), archive (4), fork (4), sets (4), share (4), server (4), syntax (4), even (4), both (4), years (4), engineers (4), computer (4), save (4), gpg (4), sub (4), 2021 (4), functional (4), leadership (4), architecture (3), section (3), impl (3), clear (3), iterate (3), operations (3), shapes (3), draw_context (3), cairo (3), cocoa (3), gtk_draw_callback (3), practice (3), toga_dummy (3), ahead (3), every (3), calling (3), blank (3), challenging (3), know (3), outlined (3), layers (3), values (3), generated (3), provide (3), level (3), ideas (3), pack (3), initial (3), better (3), taking (3), current (3), between (3), draft (3), abstraction (3), ability (3), adds (3), thing (3), quick (3), toolkits (3), extremely (3), laptop (3), developing (3), developed (3), yet (3), especially (3), pick (3), lets (3), find (3), passed (3), icon (3), contribute (3), keep (3), supported (3), contributor (3), year (3), simplify (3), deployment (3), actually (3), got (3), configured (3), congrats (3), django (3), modules (3), includes (3), exact (3), finished (3), control (3), won (3), generator (3), searching (3), com (3), tutorial (3), please (3), speed (3), flit (3), pipenv (3), advantages (3), explore (3), contains (3), data (3), four (3), pep (3), goal (3), flatpak (3), host (3), previously (3), achieve (3), completely (3), diagramming (3), executing (3), requests (3), uploaded (3), debug (3), currently (3), kickoff (3), thought (3), give (3), opportunity (3), installer (3), builds (3), number (3), events (3), adding (3), caching (3), msys2 (3), parts (3), restoring (3), caches (3), partially (3), restore (3), configurations (3), exists (3), checks (3), why (3), include (3), pipeline (3), tight (3), authenticate (3), close (3), maintenance (3), black (3), let (3), later (3), secret (3), quite (3), ctrl (3), replace (3), minutes (3), lacking (3), launched (3), popular (3), technical (3), delivery (3), desktop (3), home (3), your_user (3), gnome_keyring_yubikey_secret (3), autostart (3), nano (3), 2020 (3), authorization (3), pam_gnome_keyring (3), lead (3), anaconda (3), talent (3), leading (3), cli (3), 2025 (2), diagram (2), minor (2), interested (2), goes (2), submit (2), text (2), togacanvas (2), language (2), extra (2), memory (2), gtk_context (2), callback (2), function (2), endpoint (2), _action (2), unit (2), correctly (2), smoke (2), automatic (2), determine (2), __init__ (2), base (2), core (2), functionality (2), window (2), initialized (2), expected (2), assertactionperformed (2), scenarios (2), atomic (2), driven (2), prior (2), fail (2), args (2), return (2), obj (2), structure (2), docstrings (2), might (2), missed (2), issue (2), usage (2), color (2), rgb (2), starting (2), closing (2), enjoy (2), docs (2), including (2), hero (2), jump (2), rest (2), stories (2), onpaint (2), understanding (2), develop (2), seems (2), right (2), additional (2), due (2), areas (2), mobile (2), separated (2), maintainability (2), read (2), pattern (2), toga_gtk (2), connects (2), abstract (2), itself (2), transpiler (2), bridge (2), pygobject (2), internal (2), contributed (2), toolkit (2), status (2), exciting (2), asking (2), contribution (2), possible (2), travel (2), store (2), except (2), tutorials (2), ago (2), went (2), scratch (2), haven (2), truly (2), aims (2), apps (2), theme (2), wrapped (2), sysml (2), free (2), maintaining (2), username (2), repositories (2), real (2), dist (2), packaged (2), launch (2), bundle (2), into (2), exhaustive (2), anyone (2), program (2), asks (2), confirm (2), generation (2), tilde (2), caret (2), put (2), mit (2), license (2), sections (2), found (2), listed (2), search (2), interactively (2), repeat (2), skip (2), provided (2), init (2), comes (2), directory (2), mine (2), publishing (2), processes (2), virtualenv (2), templates (2), quickly (2), distributed (2), installation (2), manage (2), thoroughly (2), managing (2), applications (2), pipfile (2), becomes (2), replaced (2), front (2), than (2), formats (2), exe (2), pyinstaller (2), generate (2), txt (2), distributing (2), index (2), definition (2), best (2), note (2), drafter (2), patterns (2), feature (2), tmate (2), useful (2), debugging (2), bonus (2), works (2), improvements (2), paths (2), blocks (2), powerful (2), perform (2), uploading (2), permissions (2), drafted (2), github_token (2), turn (2), uploads (2), looked (2), five (2), unique (2), brew (2), gir1 (2), libgirepository1 (2), libcairo2 (2), recommends (2), match (2), downloads (2), unpacks (2), until (2), few (2), hash (2), purpose (2), beginning (2), remote (2), storage (2), servers (2), download (2), original (2), phase (2), flexibility (2), huge (2), named (2), slightly (2), settings (2), defining (2), encrypted (2), pypi_password (2), pypi_username (2), 0b3 (2), dschep (2), however (2), doing (2), preference (2), twine (2), trigger (2), climate (2), display (2), false (2), installs (2), pretty (2), straightforward (2), symbol (2), sources (2), difference (2), tell (2), pipe (2), giving (2), linting (2), formatting (2), broken (2), having (2), content (2), either (2), down (2), decided (2), kicked (2), online (2), editor (2), full (2), space (2), error (2), 2nd (2), selected (2), places (2), generic (2), mix (2), ease (2), power (2), fast (2), takeaways (2), waiting (2), helping (2), entered (2), bought (2), ecosystem (2), features (2), frequently (2), circle (2), maintainers (2), contributors (2), clone (2), looks (2), overview (2), automate (2), maintain (2), universe (2), beta (2), announced (2), spent (2), days (2), restart (2), entering (2), entry (2), true (2), net (2), recolic (2), your_public_gpg_key (2), your_login_password (2), pair (2), zypper (2), though (2), enable (2), whoami (2), logging (2), cue (2), authfile (2), sufficient (2), pam_env (2), pam_unix (2), try_first_pass (2), vim (2), mkdir (2), factor (2), 2fa (2), passwordless (2), hello (2), connecting (2), excited (2), pyscript (2), jupyter (2), fsspec (2), contributing (2), people (2), wish (2), approval (2), big (2), executive (2), roles (2), external (2), role (2), oss (2), personal (2), credential (2), contents, powered, nikola, split, editorial, drop, tada, operation, finish, graphicsport, currentcontext, nsgraphicscontext, nsrect, drawrect_, objc_method, nsview, transpiling, bridging, reserve, _draw, feeling, confident, chose, invoked, integrated, suite, difficult, initialization, super, derive, children, styling, layout, ownership, derived, failing, filling, classes, left, assertactionperformedwith, redraw, test_rect_modify, modifies, coordinates, size, assertequal, test_widget_created, equal, sometimes, technique, opinionated, tdd, float, coordinate, constructs, returns, capable, str, identifier, definitions, outline, arguments, overall, sphinx, collect, progress, gitter, channel, colored, arc, import, flex, explanation, statement, nesting, closed, advantage, designed, stand, explaining, noticed, procedural, iterative, clearly, communication, components, continue, discussion, platformer, game, unintentionally, modifying, vectoring, draws, nodes, colors, came, understand, flush, set_source_rgb, fillrect, fillstyle, getcontext, mycanvas, getelementbyid, document, html, drawrectangle, colour, brush, setbrush, paintdc, evt, evt_paint, bind, panel, wxpython, red, create_rectangle, tkinter, conduct, apis, abstracted, inspiration, constraints, knowledge, somewhat, obvious, likely, consider, coming, challenge, brave, camera, gps, thumbsup, together, surrounding, interfaces, delay, failures, improves, testability, constructor, instantiate, toga_ios, toga_cocoa, selects, sys, terms, independent, voc, converts, java, bytecode, batavia, javascript, machine, rubicon, objc, objective, intermediate, input, button, tree, forms, controls, logic, interacts, view, alpha, ways, involved, significant, solid, proof, concept, fact, tips, apple, russell, keith, magee, demonstration, lagging, behind, rough, edges, guide, saw, details, hope, helps, heard, codebase, say, mean, iphone, webpage, wrapper, frustrated, devices, dealing, introspected, visually, blast, past, grain, pythonic, motor, model, languages, automated, electrified, technologies, uml, aim, turning, beginners, argument, tells, viewed, simply, legacy, knows, tar, py3, whl, inside, easily, show, activated, resolver, resolve, ensures, hard, shines, confim, restrictive, patch, combination, puts, incompatible, requirement, semantic, versioning, masonry, authors, summaries, tables, matching, author, compatible, guides, pulls, hitting, six, questions, fine, equipped, initiliaze, gave, initialize, licence, demo, pybee, register, affecting, sign, curl, ssl, raw, githubusercontent, sdispater, recommended, depending, introduce, promise, bunch, boilerplate, combined, exist, resolution, 2017, solve, pain, points, enhancement, repeatably, rebuilt, 2015, minimum, 2016, describing, shortcoming, specified, human, usable, 518, msi, deb, appimage, snap, whole, rumps, cx_freeze, py2app, py2exe, directs, cfg, distutils, metadata, extract, target, nothing, compiled, providing, accurate, fit, cleanly, bins, exactly, programs, short, modernizing, practices, releasing, rock, showed, drafts, notes, merged, label, labeler, sharing, tmux, pause, middle, segmentation, fault, proved, said, goals, paying, attention, stored, builder, polish, recognized, issues, opened, improved, soon, maturity, variable, expecting, sold, immensely, andrew, butler, wildcard, characters, glob, asset, win, abutler, makensis, click, comma, edited, gone, triggers, installers, identical, jeff, triplett, his, niche, maybe, gobject, introspection, adwaita, ideally, repeating, yourself, ordered, sequentially, matches, dependent, stores, locations, saving, management, updated, old, 45f8427e5cd3738684a3ca8d009c0ef6de81aa1226afbe5be9216ba645c66e8a, appdata, checking, cached, existed, lessen, load, learned, large, slow, docker, images, explains, hashfiles, simplification, combine, understandable, stable, expressions, selecting, environmental, variables, exposed, via, fully, sense, reuploaded, permanent, published, recall, third, cover, xml, coveragecommand, 195e9f83022747c8eefa3ec9510dd730081ef111acd99c98ea0efed7f632ff8a, cc_test_reporter_id, env, paambaati, codeclimate, analyzing, integrates, score, smells, duplication, detects, refactoring, efforts, recorded, plugin, cov, codecov, coveralls, preface, wayland, framebuffer, graphical, showing, love, article, isolated, reused, improvement, turned, daniel, schep, ignore, newlines, keeping, length, kind, parameters, expand, prevents, repetitiveness, otherwise, paste, max, limits, simultaneously, reason, limit, removed, operator, signifies, separating, passes, hook, environments, covered, clones, telling, newer, reusable, reinvent, sdk, typescript, convinced, sauce, taken, optionally, gets, hooks, nested, within, block, executed, given, significance, happen, conditions, branches, pull_request, keywords, displayed, shown, cause, means, side, implemented, autocomplete, toggled, actively, highlights, errors, priceless, loop, vscode, pycharm, closest, filename, choose, nomenclature, pythonpackage, completed, supports, mind, mostly, suggest, jumping, converting, enters, pleased, performs, hadn, despite, challenges, result, screaming, twice, drove, trial, patience, solution, effort, weeks, binaries, realize, compared, receive, takes, march, spending, learn, gap, 800, pound, gorilla, microsoft, june, rebranded, visual, studio, september, notable, supporting, allowed, offer, limited, agent, lay, offs, hot, popularity, formatted, hugely, lose, momentum, january, idera, february, senior, staff, laid, overhead, jenkins, cloud, hosted, became, introduced, majority, appveyor, fixed, cadence, occasionally, merge, kicks, locally, mainline, extends, checked, state, delivered, automates, integrating, highlight, involvement, enables, multidispatch, efficient, spend, volunteer, focusing, enjoyable, less, manual, boring, august, expansion, generally, vacation, thanksgiving, automation, unlock_keyrings, enabled, unlocks, comment, hidden, exec, replacing, loads, chmod, 600, create_secret_file, keyring_name, keyring1, password1, keyring2, password2, 12345678, hexadecimal, starts, 30ee9bf, pubring, kbx, pub, 30ee9bfec3fd0b37f9088dbe42239c515c9b9841, uid, ultimate, libgnome, devel, recursive, src, logged, defeats, solves, encrypting, decrypt, added, attempt, saved, debug_file, unable, unsure, troubleshooting, mode, successful, pressing, remind, scroll, bottom, alt, commented, moved, safer, modified, utility, symbolically, links, unfortunately, configure, remove, symbolic, link, chown, increased, security, area, permission, begins, flashing, metal, contact, association, pamu2fcfg, associates, insert, associating, pluggable, opening, typing, warning, erroneous, prevent, gaining, privileges, articles, documents, universal, secure, tired, remember, gotten, pin, fingerprint, websites, storing, nfc, thrilled, strengthen, communities, encourage, healthier, collaboration, broader, pydata, accessible, browser, fantastic, meanwhile, science, analyze, diverse, datasets, integrate, seven, chance, feels, dream, come, intake, amazing, loved, collaborating, everyone, else, worked, hiring, overly, complicated, approvals, months, culture, slowed, everything, delegating, authority, managers, budget, headcount, holding, accountable, smoother, faster, join, organization, fresh, perspectives, filled, outside, aiming, higher, hires, retaining, priority, expect, leaders, adapt, turnover, too, bureaucracy, strong, bias, hands, contributions, focused, incredibly, rewarding, grow, individual, global, dedicated, ensuring, vehicles, safe, goodbye, career, pivot, submarine, officer, thread, deeply, bring, skills, changed, 2024, git_protocol, hostname, scopes, write_repository, clement, sam, adopted, 2022, wants, instance, hassle, authenticating, oauth, suddenly, fumbling, newcomers, throughout, 2010s, quietly, gained, traction, played, nicer, corporate, firewalls, tokens, passwords, emerged, handle, practical, evolved, bit, 2005, rss, feed, tags, slides, posts, active,


Text of the page (random words):
y init the command guides you through creating your pyproject toml config it automatically pulls in the configuration values from the briefcase template that we created earlier so using the default values by hitting enter after the first six questions will be fine this is what it provided for an output package name dantestapp version 0 1 0 description author dan yeaw dan yeaw me n to skip license mit compatible python versions 3 7 define dependencies the configuration generator then asks for you to define your dependencies would you like to define your dependencies require interactively yes no yes hit enter for yes for the next prompt search for package enter in briefcase we are setting briefcase as a dependency for our project to run enter package to add or the complete package name if it is not listed 0 briefcase 1 django briefcase type 0 to select the first option and hit enter to select the latest version you now need to repeat this process to also add toga as a dependency toga is the native cross platform gui toolkit once you are done hit enter again to complete searching for other dependencies define development dependencies at the next prompt the config generator is now asking us to define our development dependencies would you like to define your dev dependencies require dev interactively yes no yes hit enter to select the default value which is yes we are going to make pytest a development dependency for the project at the prompt search for package enter in pytest found 100 packages matching pytest enter package to add or the complete package name if it is not listed 0 pytest you will get a long list of pytest packages type 0 to select the first option and hit enter to select the latest version then hit enter again to complete searching for other development dependencies complete the configuration the final step of the configuration generator summaries the configuration that it created notice that first three sections are tool tables for poetry and the final one is the build system table tool poetry name dantestapp version 0 1 0 description authors dan yeaw dan yeaw me license mit tool poetry dependencies python 3 7 briefcase 0 2 8 toga 0 2 15 tool poetry dev dependencies pytest 4 0 build system requires poetry 0 12 build backend poetry masonry api the dependencies use a caret requirement like python 3 7 this makes use of semantic versioning so in this example if python 3 8 is released then it will automatically update to this version but it won t update to 4 0 automatically since that is a major version change if we put in our configuration 3 7 2 then it would automatically update to 3 7 3 which it is released but not 3 8 since that is a new minor version there are also tilde requirements that are more restrictive so if you enter python 3 7 it will only allow update to the next patch level like from 3 7 2 to 3 7 3 the combination of caret and tilde requirements allows you to get updates to your dependencies when they are released but puts you in control to ensure that incompatible changes won t break your app nice the final prompt asks do you confim generation yes no yes go ahead and hit enter to confirm congrats you have generated a pyproject toml configuration install dependencies ok the hard work is over we have created our project and finished the configuration now it is time to see how poetry and briefcase really shines to install the dependencies that you defined in the pyproject toml just run poetry install poetry includes an exhaustive dependency resolver so it will now resolve all of the dependencies it needs to install briefcase toga and pytest it will also create a poetry lock file which ensures that anyone using your program would get the exact same set of dependencies that you used and tested with notice that we also did not create or specify a virtual environment poetry automatically creates one prior to installing packages if one isn t already activated if you would like to see which packages are installed and which virtual environment poetry is using you can run poetry show v or poetry config list bundle and run your application for platform distribution for a python application you want to bundle the application and all of its dependencies into a single package so that it can easily be installed on a users platform without the user manually install python and other modules briefcase allows you to package and run your app using your platform windows poetry run python setup py windows s macos poetry run python setup py macos s linux poetry run python setup py linux s your app will launch will just be a blank window at this point also notice that it creates a folder with the platform name that you used above inside this folder briefcase has packaged your app for distribution on your platform briefcase also has distribution options for android ios and django build your library for distribution on pypi poetry build building dantestapp 0 1 0 building sdist built dantestapp 0 1 0 tar gz building wheel built dantestapp 0 1 0 py3 none any whl the source distribution sdist and wheel are now in a new dist folder publish your library to pypi first we are going to add the testpypi repository to poetry so that it knows where to publish to the default location is to the real pypi poetry config repositories test pypi https test pypi org legacy now simply run poetry publish r test pypi the r argument tells poetry to use the repository that we configured poetry then will ask for your username and password congrats your package is now available to be viewed at https test pypi org project your project name and can be pip installed with pip install i https test pypi org simple your project name 5 steps to build python native gui widgets for beeware dan yeaw 2018 11 03 20 36 part of my work at ford motor company is to use model based systems engineering through languages like sysml to help design safety in to complex automated and electrified technologies in my free time i took over maintaining a uml tool called gaphor with the aim of eventually turning it in to a simple sysml tool for beginners i m sure i ll be writing about this much more in the future eventually i got really frustrated with the current set of gui toolkits that are available for python i want the ability to write an app once and have it look and feel great on all of my devices but instead i was dealing with toolkits that are wrapped or introspected around c or c libraries or visually look like a blast from past they made me feel like i was going against the grain of python instead of writing great pythonic code if you haven t heard of beeware yet it is a set of software libraries for cross platform native app development from a single python codebase and tools to simplify app deployment when i say cross platform and native i mean truly that the project aims to build deploy and run apps for windows linux macos android iphone and the web it is native because it is actually that platform s native gui widgets not a theme icon pack or webpage wrapper a little over a year ago i started to contribute to the beeware project i needed a canvas drawing widget for the app i am working on i saw that this was not supported by beeware so i went ahead and created it based on my experience this blog post details how i would create a new widget from scratch now that i have done it before with the hope that it helps you implement your own widget as well if you are new to beeware i recommend to start out with the briefcase and toga tutorials and then the first time contributor s guide the current status of the beeware project at the time of writing this is that it is a solid proof of concept creating a simple app on macos linux or ios is definitely possible in fact there is an app called travel tips on apple s app store that was created by russell keith magee as a demonstration support for some of the other platforms like windows and android is lagging behind some so except some very rough edges this alpha status may not be so exciting for you if you are just trying to build an app but i think it is very exciting for those that want to contribute to an open source project although there are many ways to get involved users keep asking how they can build a gui widget that isn t yet supported i think this is a great way to make a significant contribution a gui widget forms the controls and logic that a user interacts with when using a gui the beeware project uses a gui widget toolkit called toga and below is a view of what some of the widgets look like in linux there are button table tree and icon widgets in the example since i contributed a canvas drawing widget i will be using that for the example of how you could contribute your own widget to the project there are three internal layers that make up every widget the interface layer the implementation layer the native layer as the input to toga the interface layer provides the public api for the gui application that you are building this is the code you will type to build your app using toga as the output of toga the native layer connects the toga_impl s to the native platform for c language based platforms toga directly calls the native widgets for example with gtk on linux the toga_gtk directly calls the gtk widgets through pygobject for other platforms more intermediate work may be required through a bridge or transpiler macos and ios the rubicon objc project provides a bridge between objective c and python web batavia provides a javascript implementation of the python virtual machine android voc is a transpiler that converts python in to java bytecode the interface layer calls public methods that are in the toga_core portion of the project and this is where this interface layer api is defined toga_core also provides any abstract functionality that is independent of the platform that toga is running on like setting up and running the app itself the implementation layer connects toga_core to the toga_impl component a couple of other terms you should know about are impl and interface 1 from toga_core self impl is used to go across the interface layer to toga_impl 2 from toga_impl self interface is used to go across the interface layer back to toga_core toga uses the factory method design pattern in order to improve testability this pattern creates objects using a factory method instead of directly calling a constructor in toga this factory method is in toga_core and it is used to instantiate a platform backend as the toga_impl like toga_ios toga_cocoa or toga_gtk the factory method automatically selects the correct backend based on the sys platform of the platform it is running on toga_dummy is also a type of toga_impl backend and it is used for smoke testing without a specific platform to find simple failures when tests are initialized toga_dummy is passed in as the factory this allows the tests and the creation of objects to be separated which improves maintainability and makes the test code easier to read i know there is a lot there but understanding the software architecture of toga together with the surrounding projects and interfaces will be key to implementing your own widget with that background information out of the way lets not delay any further and jump in to building a widget step 0 pick your development platform normally pick the platform that you are most familiar with macos and gtk are the most developed thumbsup is this a mobile only widget camera gps etc this seems somewhat obvious since the platform you select will most likely be based on the laptop or other device you are using right now but do consider this most of my experience developing widgets are on gtk and cocoa so this is where i am coming from implementing widgets on other platforms is definitely needed as well but it may be an additional challenge due to those platforms not as well developed with toga yet these other platforms may be more challenging but they are also the areas where the beeware project needs the most help so if you have some experience with them or feel especially brave definitely go for it step 1 research your widget abstraction requires knowledge of specific examples create use cases or user stories get feedback since toga is an abstraction of native gui toolkits understanding the apis for these platforms is extremely important in order to develop a well abstracted api for toga in other words these native platforms provide the inspiration and constraints on implementing your own widget as an example of how you would conduct this research this is how you would draw a rectangle on a canvas on different platforms tkinter canvas tk canvas canvas create_rectangle 10 10 100 100 fill red canvas pack wxpython wx panel bind wx evt_paint onpaint def onpaint self evt dc wx paintdc dc setbrush wx brush wx colour 200 0 0 dc drawrectangle 10 10 100 100 html canvas var c document getelementbyid mycanvas var ctx c getcontext 2d ctx fillstyle rgb 200 0 0 ctx fillrect 10 10 100 100 gtk drawingarea gtk drawingarea drawingarea connect draw draw def draw da ctx ctx set_source_rgb 200 0 0 ctx rectangle 10 10 100 100 ctx fill the other thing to understand is how a user will use this widget to build their own app i like to create a quick use case diagram to flush this out but you could also use user stories or similar methods for the case of the canvas widget i came up with three main use cases a simple drawing app where a user adds shapes colors and text to the screen a vectoring drawing app where a user draws lines and shapes and then needs the ability to edit the nodes of the lines a platformer game where there is a lot of objects draw on the screen including the hero the hero needs its own drawing context so that they can run jump and move around without unintentionally modifying the rest of the objects the last part of step 1 is to get feedback i recommend creating a github issue or draft pull request at this point and start to discuss the design of your widget abstraction with others and continue that discussion as you design your python api in step 2 step 2 write docs write your api documentation first the api provides the set of clearly defined methods of communication layers between the software components documentation driven development this is iterative with step 1 with your use cases from step 1 start your docs by explaining what your widget is and what it is used for when looking at the canvas widgets from my research i noticed that the current drawing widgets were very procedural you have to create your canvas drawing using many steps for example you have to first set the color to draw with then draw an object and then fill in that object python has the context manager and the with statement and making use of this for a canvas allows the user to better break up the draw operations with some nesting it also allows for automatically starting or closing drawing of a closed path for the user this is an example of the type...
Thumbnail images (randomly selected): * Images may be subject to copyright.GREEN status (no comments)
  • Continuous Integration
  • Continuous Delivery / Dep...
  • Library Workflow
  • App Workflow
  • Toga Blackbox
  • Toga Whitebox
  • More Terms
  • Factory Method
  • Use Cases

Verified site has: 12 subpage(s). Do you want to verify them? Verify pages:

1-5 6-10 11-12


The site also has 1 references to other resources (not html/xhtml )

 dan.yeaw.me/rss.xml  Verify


Top 50 hastags from of all verified websites.

Supplementary Information (add-on for SEO geeks)*- See more on header.verify-www.com

Header

HTTP/1.1 200 OK
Connection close
Content-Length 35118
Server GitHub.com
Content-Type text/html; charset=utf-8
Last-Modified Sat, 29 Nov 2025 13:33:10 GMT
Access-Control-Allow-Origin *
ETag W/ 692af616-2180f
expires Tue, 05 May 2026 20:20:33 GMT
Cache-Control max-age=600
Content-Encoding gzip
x-proxy-cache MISS
X-GitHub-Request-Id CC0C:1526:19BBC44:19FE944:69FA4EB9
Accept-Ranges bytes
Age 0
Date Tue, 05 May 2026 20:10:33 GMT
Via 1.1 varnish
X-Served-By cache-rtm-ehrd2290030-RTM
X-Cache MISS
X-Cache-Hits 0
X-Timer S1778011833.316933,VS0,VE130
Vary Accept-Encoding
X-Fastly-Request-ID 98270fa44d341b44513a9c7c4901850f60d6564f

Meta Tags

title="Dan Yeaw's Blog"
charset="utf-8"
name="description" content="Open source, mobility, and me."
name="viewport" content="width=device-width, initial-scale=1"
name="theme-color" content="#5670d4"
name="generator" content="Nikola (getnikola.com)"

Load Info

page size35118
load time (s)0.604805
redirect count0
speed download58142
server IP 185.199.111.153
* all occurrences of the string "http://" have been changed to "htt???/"