Pythonicway - primitív festék pythonon

Ebben a cikkben egy egyszerű rajzot írunk a Python számára. Ebben a példában gyakorlatba hozzuk a GUI létrehozását. használjon elrendezési elrendezéseket a tkinterben. további argumentumok átadása a gombkezelő funkciónak és a lambda függvény használata a Pythonban.

Ehhez a példához célszerűbb egy osztály-megközelítést használni a grafikus felhasználói felület létrehozásához. Először definiáljuk az osztály Paint:

Ha ezt a kódot futtatja, egyszerű ablakot kell kapnia, amellyel tovább fogunk dolgozni.

Most írja be a setUI metódust a Paint osztályra, amely meghatározza az összes gomb, címke helyét és a rajz rajzát. Két sor gombja van, az első sor a gombokkal beállított gombokkal, a második sor pedig beállítja a rajz ecsetméretét. Alattuk a rajz mezejére megyünk.

Ez egy meglehetősen kiterjedt módszer, bár sok sor ismétlődik, ezért légy türelmes:

Ne felejtsd el hozzáadni a módszer hívását __init__-hoz, hogy minden működjön.

Ha jól tetted, akkor az egész kód futtatásakor a következő ablak jelenik meg:

Pythonicway - primitív festék pythonon

Most hozzon létre rajzot a vászonra. Először hozza létre az osztályváltozókat, amelyek az ecset méretét és színét állítják be, majd a következőt adják hozzá a __init__ módszerhez:

Maga a rajzolási módszer így fog kinézni:

A rajzot a vászonon lévő körök létrehozásával végezzük: a felhasználó a bal egérgombot rögzíti, és amikor az egérrel mozog, a köröket a kurzor útvonala mentén rajzolja. A rajzolási módszer az érvelési eseményt veszi át, amely alapján ovális formát hozunk létre. A Vászonosztály létrehozás_val módszere négy koordinátát kap, amelyből létrehoz egy négyzet, amelybe a kör illeszkedik. Mivel ezek a koordináták átadják a kurzor pozícióját, így az első koordináta az x tengely mentén lesz a kurzor pozíció mínusz a kefe méretének, a második koordináta az x tengely mentén a kurzor pozíció plusz a kefe méret, ugyanaz a york tengelyhez. Bonyolultnak tűnhet, de hamarosan alkalmazza az alkalmazásunkat, és mindent lát a saját szemével.

Csak a vászonhoz kötődik az éppen létrehozott módszer feldolgozása. A vászon csatolása után adja hozzá a következő sort (self.canvas.grid.)

a bal egérgomb mozgatásakor "felhívja a rajzolási módot. Most már rajzolhatunk!

Pythonicway - primitív festék pythonon

Már jól néz ki. Adja hozzá az ecset színe megváltoztatásának képességét, a felső sor gombjainak működését. Ehhez először létrehozzunk egy módszert a kefe színének megváltoztatására:

Ezután a felső sor minden egyes gombjához hozzá kell adni a kódot a következő sablonra való kattintás feldolgozásához:

A hozzáadott kódot - command = lambda: self.set_color ("piros"), a függvényt az argumentumhoz a szükséges gombbal kötjük össze. Használjuk a lambda függvényt, mert a lambda funkció nélkül azonnal hívjuk a gomb létrehozásakor, nem csak akkor, ha rákattintunk. (Megpróbálhatja ezt a parancsot = self.set_color ("piros"), és a szín azonnal vörösre állítódik). A kód hozzáadásával a szükséges érvekkel (és ez a "zöld", "kék", "fekete", "fehér") az összes gombhoz lehetőséget ad a kefe színének megváltoztatására:

Pythonicway - primitív festék pythonon

Most adjuk hozzá egy módszert az ecset átméretezéséhez:

És korrigáljuk az alsó sor egyes gombjait a következő minta szerint:

Ezeknek a gomboknak a logikája megegyezik az ecset színének megváltoztatásával. A következő eredményt kapjuk:

Pythonicway - primitív festék pythonon

Ezzel szinte mindent elhagyták a vászon tisztítási funkciókkal. Elhagytunk egy helyet a gombok felső sorában, és töltsük fel. Adja hozzá a következő kódot a setUI módszerhez:

A vászon tisztításához a vászonosztály törlési módját használjuk, hogy mindent eltávolítsunk a vászonról, mint egy argumentum a törlési módszerhez. Mindennek van egy primitív festménye.

Ui Ha ezt az alkalmazást futtatod, akkor észre fogod venni, hogy ha gyorsan tartod az egeret, akkor a vonalak nem folytonosak. Ezt az okozza, hogy a mozgás gyorsabb, mint a root.mainloop következő ciklusának befejezése, ennek megfelelően minden, ami a hurok "közötti" iterációja között eltűnik. Maga a probléma megoldása elég érdekes feladat, de sokkal összetettebb kódot igényel.

P.P.S: A projekt forráskódja a GitHub-on