[python] Gtk LED on/off (začiatočník)

Petr Blahos petrblahos na gmail.com
Úterý Březen 18 08:04:02 CET 2014


Ahoj, já v Gtk nedělám, ale aspoň tohle:

v LED_OnOff je proměnná img_LED, která není nikde jinde.

vůbec v tom kódu nevidím důvod, proč by se něco mělo rozsvítit, nebo
zhasnout.

img_LED_on a img_LED_off je widget - nějaký ten prvek, který se někam
umístí. Je to
jeden prvek, tak se umístí na jedno místo. Pokud jej chceš vícekrát, musíš
jich vyrobit
více, a každý z nich umístit. Jedna věc je, že si určitě můžeš nahrát
obrázek jednou,
a pak jej přiřadit více prvkům, jako třeba (pseudo kód, Gtk neumím)

img_led_on = load_image("led_on.png")  # asi neco v gdk
img_led_off = load_image("led_off.png")

widget1 = Gtk.Image()
widget2 = Gtk.Image()
widget3 = Gtk.Image()

button1 = Gtk.ToggleButton(...)
button2 = Gtk.ToggleButton(...)
button3 = Gtk.ToggleButton(...)

# a napr:
led_widgets = {
    button1.id: widget1,
    button2.id: widget2,
    button3.id: widget3,
}

# nastavení obrázku:
widget1.set_from_image(img_led_on)
widget2.set_from_image(img_led_on)
widget3.set_from_image(img_led_on)
# ...

No a pak bude handler:

def LED_OnOff(self, okno, name):
    if okno.get_active():
        led_widgets[okno.id].set_from_image(img_led_on)
    else:
        led_widgets[okno.id].set_from_image(img_led_off)
    # nektere frameworky vyzaduji volani nejakeho refresh

Nevím, jak je to s ID okna v GTK, možná se identifikuje jinak než přes ID.
Určitě je tu spousta lidí, kteří upřesní to GTK, ale takhle bych to
vprincipu
viděl jako jednoduše pochopitelné.

--
Petr



2014-03-17 22:53 GMT+01:00 <lukas na sliacky.eu>:

> Ahojte,
>
> v Pythone som úplný začiatočník a chcem urobiť program, ktorý simuluje
> zapínanie a vypínanie LEDiek v závislosti na ToggleButtonoch.
>
> Momentálne mám hotové toto:
>
> from gi.repository import Gtk
> import sys
>
> class LedControl(Gtk.Window):
>
>     def __init__(self):
>         Gtk.Window.__init__(self, title="LED Control")
>         self.set_border_width(6)
>         self.set_default_size(200, 250)
>
>         okno = Gtk.Table(4, 2, True)
>         self.add(okno)
>
>         img_LED_on = Gtk.Image()
>         img_LED_on.set_from_file("LED_on.png")
>         self.add(img_LED_on)
>
>         img_LED_off = Gtk.Image()
>         img_LED_off.set_from_file("LED_off.png")
>         self.add(img_LED_off)
>
>         button_LED_1 = Gtk.ToggleButton("LED 1")
>         button_LED_1.connect("toggled", self.LED_OnOff, "1")
>         button_LED_1.set_border_width(2)
>
>         button_LED_2 = Gtk.ToggleButton("LED 2")
>         button_LED_2.connect("toggled", self.LED_OnOff, "2")
>         button_LED_2.set_border_width(2)
>
>         button_LED_3 = Gtk.ToggleButton("LED 3")
>         button_LED_3.connect("toggled", self.LED_OnOff, "3")
>         button_LED_3.set_border_width(2)
>
>         button_LED_4 = Gtk.ToggleButton("LED 4")
>         button_LED_4.connect("toggled", self.LED_OnOff, "4")
>         button_LED_4.set_border_width(2)
>
>         okno.attach(button_LED_1, 0, 1, 0, 1)
>         okno.attach(button_LED_2, 0, 1, 1, 2)
>         okno.attach(button_LED_3, 0, 1, 2, 3)
>         okno.attach(button_LED_4, 0, 1, 3, 4)
>
>         okno.attach(img_LED_off, 1, 2, 0, 1)
>         okno.attach(img_LED_on, 1, 2, 1, 2)
>         #~ okno.attach(img_LED_off, 1, 2, 2, 3)
>         #~ okno.attach(img_LED_on, 1, 2, 3, 4)
>
>     def LED_OnOff(self, okno, name):
>         if okno.get_active():
>             status = "on"
>         else:
>             status = "off"
>             img_LED=0
>         print("Tlačítko LED", name, "zmenilo stav na", status)
>
> app = LedControl()
> app.connect("delete-event", Gtk.main_quit)
> app.show_all()
> Gtk.main()
>
> ale nedarí sa mi rozchodiť svietenie LEDiek (LED_on.png / LED_off.png) na
> pozíciách vedľa jednotlivých tlačítok (LED 1 je vedľa tlačítka LED 1).
>
> Tiež sa chcem spýtať, prečo sa načítaný obrázok zobrazuje len jeden krát.
> Napr. keď chcem načítať obrázok LED_on.png 2x pod sebou, zobrazí sa vždy
> len raz:
>         okno.attach(img_LED_on, 1, 2, 0, 1)
>         okno.attach(img_LED_on, 1, 2, 1, 2)
> (Spodný obrázok sa nezobrazuje.)
>
> Našiel by sa niekto, kto by mi vedel poradiť? (Ak sú potrebné dodatočné
> informácie, rád ich obratom poskytnem.)
>
> Ďakujem.
> _______________________________________________
> Python mailing list
> python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
> Visit: http://www.py.cz
>



-- 
____________________
http://pysk.blog.root.cz/
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://www.py.cz/pipermail/python/attachments/20140318/4bbbc3f2/attachment.html>


Další informace o konferenci Python