A tkinter modul természetesen fut a Raspberry Pi Python környezetében is. A gép hardveres lehetőségeit (GPIO port vezérlés) kombinálva a GUI adta funkciókkal kiváló grafikus vezérlő programokat tudunk készíteni. Erre mutatunk be a tutorial végén egy konkrét gyakorlati példát.
A vezérelt eszköz a Aqex cég négy relét tartalmazó bővítő modulja (qReCon 4 relays HAT). A panel a reléken kívül a vezérlő áramköröket, valamint a vezetékek csatlakoztatására szolgáló sorkapcsokat tartalmazza.
A program az előbbiekben megismert widgetekből a Button és a Label elemeket használja, illetve ezek segítségével működteti a 31, 33, 35, 37-es GPIO portokhoz kapcsolódó reléket. A program alapvetően normál monitorra íródott, de a geometry kulcsszó után megadott paraméterekkel könnyen optimalizálható az official Raspberry Pi display-re. Ebben az esetben érdemes átméretezni a vezérlő elemeket.
A teljes kód:
import RPi.GPIO as GPIO from tkinter import * GPIO.setmode(GPIO.BOARD) GPIO.setup(31, GPIO.OUT) GPIO.setup(33, GPIO.OUT) GPIO.setup(35, GPIO.OUT) GPIO.setup(37, GPIO.OUT) ablak = Tk() ablak.title("4-relay") ablak.geometry("250x200") ablak.resizable(0, 0) on1 = 0 on2 = 0 on3 = 0 on4 = 0 elsoGombAllapot = StringVar() masodikGombAllapot = StringVar() harmadikGombAllapot = StringVar() negyedikGombAllapot = StringVar() def elsoGomb(): global on1 if on1 == 0: on1 = 1 elsoGombAllapot.set("felkapcsolva") GPIO.output(31, 1) else: on1 = 0 elsoGombAllapot.set(" lekapcsolva") GPIO.output(31, 0) def masodikGomb(): global on2 if on2 == 0: on2 = 1 masodikGombAllapot.set("felkapcsolva") GPIO.output(33, 1) else: on2 = 0 masodikGombAllapot.set(" lekapcsolva") GPIO.output(33, 0) def harmadikGomb(): global on3 if on3 == 0: on3 = 1 harmadikGombAllapot.set("felkapcsolva") GPIO.output(35, 1) else: on3 = 0 harmadikGombAllapot.set(" lekapcsolva") GPIO.output(35, 0) def negyedikGomb(): global on4 if on4 == 0: on4 = 1 negyedikGombAllapot.set("felkapcsolva") GPIO.output(37, 1) else: on4 = 0 negyedikGombAllapot.set(" lekapcsolva") GPIO.output(37, 0) def quit(): ablak.destroy() GPIO.output(31, 0) GPIO.output(33, 0) GPIO.output(35, 0) GPIO.output(37, 0) GPIO.cleanup() Button(ablak, text="1. relé", command=elsoGomb).grid(column=0, row=0) Button(ablak, text="2. relé", command=masodikGomb).grid(column=0, row=1) Button(ablak, text="3. relé", command=harmadikGomb).grid(column=0, row=2) Button(ablak, text="4. relé", command=negyedikGomb).grid(column=0, row=3) Button(ablak, text="Quit", command=quit).grid(column=2, row=10) Label(ablak, text="1. allapota:").grid(column=2, row=0) Label(ablak, textvariable = elsoGombAllapot).grid(column=3, row=0) Label(ablak, text="2. allapota:").grid(column=2, row=1) Label(ablak, textvariable = masodikGombAllapot).grid(column=3, row=1) Label(ablak, text="3. allapota:").grid(column=2, row=2) Label(ablak, textvariable = harmadikGombAllapot).grid(column=3, row=2) Label(ablak, text="4. allapota:").grid(column=2, row=3) Label(ablak, textvariable = negyedikGombAllapot).grid(column=3, row=3) ablak.mainloop()
A fentiekben bemutatott Aqex qReCon relay HAT megvásárolható a MálnaPC Webshopjában!
A cikk előző része: http://www.malnasuli.hu/python/kiindulo-gui-alkalmazas-az-elso-ablakunk-tkinter-2-resz/