mte.ui — lomakemäärittelyn rakentajat¶
Jokainen vaiheen 3 käyttöliittymäpinta — ctx.docks.add_panel ja
ctx.settings_page.register — ottaa lomakemäärittelyn:
tavallisen sanakirjan, joka kuvaa ohjausobjektipuun. Rakenna nämä määrittelyt
mte.ui.*-apureilla, jottei sinun tarvitse kirjoittaa JSONia käsin.
from mte.ui import (
Column, Row, Group,
Label, Button, Checkbox, LineEdit, NumberSpin, ComboBox, List,
)
Mikään mte.ui-moduulissa ei puhu Qt:n tai PySiden kanssa — kukin apuri palauttaa
sanakirjan, joka noudattaa sitä muotoa, jota isännän C++-lomakejäsennin odottaa. Saat
vapaasti koota niitä, liittää luetteloita tai tuottaa niitä ohjelmallisesti:
from mte.ui import Column, Row, Label, Button
def make_toolbar(commands):
return Row([Button(text=c["label"], on_click=c["id"])
for c in commands])
form = Column([Label(text="Actions:"),
make_toolbar(my_commands)])
Määrittely tarkistetaan isännän puolella; tuntemattomat ohjausobjektityypit tai puuttuvat
pakolliset kentät tuottavat InvalidParams-virheen, jonka näet lokissa.
Lomakemäärittelyn nimiöitä ei käännetä
Jokainen otsikko, jonka laitat määrittelyyn — paneelien otsikot, valintaruutujen
nimiöt, ryhmäotsikot — näytetään täsmälleen sellaisena kuin kirjoitit sen, riippumatta
käyttöliittymän kielestä. Ne ovat dataa, jonka liitännäisesi lähettää editorille,
eivätkä merkkijonoja, jotka editori voisi hakea käännösluettelosta. Jos liitännäisesi
pitäisi puhua useampaa kuin yhtä kieltä, valitse merkkijonot itse ennen kuin kutsut
funktiota register; nykyinen käyttöliittymäkieli on
ctx.app_settings.get_string(mte.keys.UI_LANGUAGE) (tyhjä tarkoittaa »seuraa
järjestelmää«). Sama koskee kenttiä name ja description, jotka
plugin.json-tiedostosi näyttää kohdassa Asetukset ▸ Liitännäiset.
Asettelut¶
Asettelurakentajat ottavat luettelon lapsisanakirjoja ja järjestävät ne pysty- tai vaakasuoraan.
Column(children)¶
Pinoaa lapset ylhäältä alas ja lisää loppuun venymän — ohjausobjektit pysyvät luonnollisessa korkeudessaan sen sijaan että paisuisivat täyttämään korkean telakan.
Row(children)¶
Sama ajatus, vasemmalta oikealle, loppuun lisätyn vaakavenymän kera.
Group(children, *, title="")¶
Otsikoitu kehys (piirrettynä QGroupBox-oliona), joka sisältää pystysuoran pinon. Käytä
sitä ryhmitelläksesi toisiinsa liittyviä ohjausobjekteja visuaalisesti:
Group([
Checkbox(id="cs", label="Case sensitive", binds="settings:cs"),
Checkbox(id="ww", label="Whole words", binds="settings:ww"),
], title="Search options")
Asettelut voivat olla vapaasti sisäkkäisiä — Row Column-olion sisällä Group-olion
sisällä käy hyvin.
Yksittäiset ohjausobjektit¶
Kukin yksittäinen ohjausobjekti hyväksyy samat neljä yhteistä sidontaa avainsana-argumentteina:
| Argumentti | Merkitys |
|---|---|
id= |
Vakaa tunniste, jota ctx.ui.get / ctx.ui.set ja (epäsuorasti) binds käyttävät. |
binds= |
"settings:<key>" — tallentuu automaattisesti kohteen ctx.settings kautta. |
on_click= |
Kutsuttavan komennon tunniste — vain painikkeet. |
on_change= |
Käsittelijätunniste (ctx.docks.on_change(...)) — jokainen muu ohjausobjekti. |
Vain ne yksittäiset ohjausobjektit, jotka paljastavat »arvon«, tukevat kenttiä binds ja
on_change.
Label(*, text="", id=None)¶
Staattista tekstiä.
Button(*, text, on_click=None, id=None)¶
Painike. Kentän on_click laukaiseminen kutsuu rekisteröityä komentoa; jos haluat pitää
painikkeen tahdissa jonkin muun kanssa, voit käyttää funktiota ctx.ui.set sen
text-kenttään.
Checkbox(*, label="", default=False, id=None, binds=None, on_change=None)¶
Totuusarvo-ohjausobjekti. default on alkutila; binds ohittaa sen tallennetulla arvolla,
jos sellainen on.
LineEdit(*, placeholder="", default="", id=None, binds=None, on_change=None)¶
Yksirivinen tekstinsyöttö.
NumberSpin(*, default=0, min=None, max=None, step=1, id=None, binds=None, on_change=None)¶
Kokonaislukuvalitsin. min ja max rajaavat välin (molemmat valinnaisia; taustalla oleva
QSpinBox käyttää oletusväliään, kun niitä ei ole asetettu). step on nuolien askel.
int-väli
NumberSpin nojaa luokkaan QSpinBox, joka tallentaa int-arvon (32-bittinen).
Arvot välin -2_147_483_648 … 2_147_483_647 ulkopuolella kyllästyvät alustan rajaan.
ComboBox(*, items, default="", id=None, binds=None, on_change=None)¶
Pudotusvalikko. items on luettelo — kukin kohta voi olla joko tavallinen merkkijono tai
objekti kuten {"value": "cpp", "label": "C++"} (vain value on tänään käytössä; label
on varattu tulevaa hienosäätöä varten).
List(*, items, id=None, on_change=None)¶
Luettelo-ohjausobjekti yksittäisvalinnalla. on_change laukeaa uuden valitun kohdan
tekstillä. Ei binds-kenttää — tallenna valinta itse, jos tarvitset sitä.
Ajonaikainen pääsy¶
Kun paneeli on rekisteröity, ohjaa sitä mistä tahansa komennosta:
panel_id = ctx.docks.add_panel(id="my.panel", ..., form=Column([
LineEdit(id="needle"),
Checkbox(id="cs"),
]))
# Read current values
needle = ctx.ui.get(panel_id, "needle")
cs = ctx.ui.get(panel_id, "cs") == "true"
# Write values (does NOT fire on_change)
ctx.ui.set(panel_id, "needle", "hello")
ctx.ui.set(panel_id, "cs", True)
Katso koko dokumentaatio kohdasta ctx.ui.
Arvojen tallentaminen¶
binds="settings:<key>" on lyhin tapa tallentaa ohjausobjektin arvo:
- Paneelia rakennettaessa ohjausobjekti lukee alkuarvonsa kutsusta
ctx.settings.get(key, <default>). - Jokaisella käyttäjän muokkauksella ohjausobjekti kirjoittaa takaisin kutsulla
ctx.settings.set(key, new_value).
Koska sekä paneelit että asetussivut jakavat kohteen ctx.settings, kaksi ohjausobjektia,
joilla on sama binds-merkkijono, peilaavat toisiaan reaaliajassa. Siten HelloPythonin
telakka ja asetussivu pitävät »Loud«-valintaruudun tahdissa.
Jos sinun täytyy tallentaa jotain, mitä sanasto ei kata (esimerkiksi List-valinta), lue ja
kirjoita suoraan kohteen ctx.settings kautta on_change-takaisinkutsussa.