tkinter.ttk — Widgets med Tk-tema

Källkod: Lib/tkinter/ttk.py


Modulen tkinter.ttk ger tillgång till Tk:s tematiska widgetuppsättning, som introducerades i Tk 8.5. Den ger ytterligare fördelar, bland annat anti-alias rendering av teckensnitt under X11 och fönstertransparens (kräver en composition window manager på X11).

Grundtanken med tkinter.ttk är att i möjligaste mån separera den kod som implementerar en widgets beteende från den kod som implementerar dess utseende.

Se även

Tk Widget Styling Support

Ett dokument som introducerar temastöd för Tk

Använda Ttk

För att börja använda Ttk importerar du dess modul:

from tkinter import ttk

För att åsidosätta de grundläggande Tk-widgetarna bör importen följa Tk-importen:

from tkinter import *
from tkinter.ttk import *

Den koden orsakar att flera tkinter.ttk widgetar (Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale och Scrollbar) att automatiskt ersätta Tk widgetarna.

Detta har den direkta fördelen att de nya widgetarna används, vilket ger ett bättre utseende och en bättre känsla på alla plattformar; ersättningswidgetarna är dock inte helt kompatibla. Den största skillnaden är att widgetalternativ som ”fg”, ”bg” och andra relaterade till widgetstyling inte längre finns i Ttk-widgetar. Använd istället ttk.Style-klassen för förbättrade stylingeffekter.

Se även

Konvertera befintliga applikationer till att använda Tile-widgets

En monografi (med Tcl-terminologi) om skillnader som vanligtvis uppstår när applikationer flyttas för att använda de nya widgetarna.

Ttk-widgetar

Ttk kommer med 18 widgetar, varav tolv redan fanns i tkinter: Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale, Scrollbar, och Spinbox. De övriga sex är nya: Combobox, Notebook, Progressbar, Separator, Sizegrip och Treeview. Och alla dessa är underklasser till Widget.

Genom att använda Ttk-widgetar får programmet ett bättre utseende och en bättre känsla. Som diskuterats ovan finns det skillnader i hur stylingen kodas.

Tk-kod:

l1 = tkinter.Label(text="Test", fg="black", bg="white")
l2 = tkinter.Label(text="Test", fg="black", bg="white")

Ttk-kod:

style = ttk.Style()
style.configure("BW.TLabel", foreground="black", background="white")

l1 = ttk.Label(text="Test", style="BW.TLabel")
l2 = ttk.Label(text="Test", style="BW.TLabel")

För mer information om TtkStyling, se Style-klassdokumentation.

Widget

ttk.Widget definierar standardalternativ och metoder som stöds av widgets med Tk-tema och är inte avsedda att instansieras direkt.

Standardalternativ

Alla ttk Widgets accepterar följande alternativ:

Alternativ

Beskrivning

class

Anger fönstrets klass. Klassen används när man frågar efter fönstrets andra alternativ i alternativdatabasen, för att bestämma standardbindtaggar för fönstret och för att välja widgetens standardlayout och -stil. Detta alternativ är skrivskyddat och kan endast anges när fönstret skapas.

cursor

Anger vilken muspekare som ska användas för widgeten. Om den är inställd på en tom sträng (standard) ärvs muspekaren för den överordnade widgeten.

takefocus

Avgör om fönstret accepterar fokus under tangentbordstraversering. 0, 1 eller en tom sträng returneras. Om 0 returneras betyder det att fönstret ska hoppas över helt och hållet under tangentbordstraversering. Om 1 returneras betyder det att fönstret ska ta emot inmatningsfokus så länge det är synligt. Och en tom sträng innebär att traverseringsskriptet fattar beslut om huruvida fönstret ska fokuseras eller inte.

style

Kan användas för att ange en anpassad widgetstil.

Alternativ för rullbar widget

Följande alternativ stöds av widgetar som styrs av en rullningslist.

Alternativ

Beskrivning

xscrollcommand

Används för att kommunicera med horisontella scrollbars.

När vyn i widgetens fönster ändras kommer widgeten att generera ett Tcl-kommando baserat på scrollcommand.

Vanligtvis består detta alternativ av metoden Scrollbar.set() för en scrollbar. Detta gör att rullningslisten uppdateras varje gång vyn i fönstret ändras.

yscrollcommand

Används för att kommunicera med vertikala rullningslister. För mer information, se ovan.

Etikettalternativ

Följande alternativ stöds av etiketter, knappar och andra knappliknande widgetar.

Alternativ

Beskrivning

text

Anger en textsträng som ska visas inuti widgeten.

textvariable

Anger ett namn vars värde kommer att användas i stället för textalternativresursen.

underline

Om inställd, anger indexet (0-baserat) för ett tecken som ska understrykas i textsträngen. Det understrukna tecknet används för mnemonisk aktivering.

image

Specificerar en bild som ska visas. Detta är en lista med 1 eller flera element. Det första elementet är standardbildnamnet. Resten av listan är en sekvens av statespec/värdepar enligt definitionen i Style.map(), som anger olika bilder som ska användas när widgeten befinner sig i ett visst tillstånd eller en kombination av tillstånd. Alla bilder i listan bör ha samma storlek.

compound

Anger hur bilden ska visas i förhållande till texten, om både text- och bildalternativet finns med. Giltiga värden är:

  • text: endast visa text

  • image: endast visa bild

  • top, bottom, left, right: visa bilden ovanför, under, till vänster om eller till höger om texten.

  • none: standard. visar bilden om den finns, annars texten.

width

Om större än noll, anger hur mycket utrymme, i teckenbredd, som ska tilldelas för textetiketten, om mindre än noll, anger en minsta bredd. Om noll eller ospecificerat används den naturliga bredden på textetiketten.

Kompatibilitetsalternativ

Alternativ

Beskrivning

state

Kan sättas till ”normal” eller ”disabled” för att styra ”disabled”-tillståndsbiten. Det här är ett skrivskyddat alternativ: om du ställer in det ändras widgetens tillstånd, men metoden Widget.state() påverkar inte det här alternativet.

Widget-tillstånd

Widgetens tillstånd är en bitmapp med oberoende tillståndsflaggor.

Flagga

Beskrivning

active

Muspekaren är över widgeten och om du trycker på en musknapp kommer någon åtgärd att utföras

disabled

Widget är inaktiverad under programkontroll

focus

Widget har fokus på tangentbordet

pressed

Widget trycks in

selected

”On”, ”true” eller ”current” för t.ex. checkbuttons och radiobuttons

background

Windows och Mac har en uppfattning om ett ”aktivt” eller förgrundsfönster. Tillståndet bakgrund sätts för widgetar i ett bakgrundsfönster och rensas för dem i förgrundsfönstret

readonly

Widget ska inte tillåta användarändring

alternate

Ett widgetspecifikt alternativt visningsformat

invalid

Widgetens värde är ogiltigt

En tillståndsspecifikation är en sekvens av tillståndsnamn, eventuellt föregångna av ett utropstecken som anger att biten är av.

ttk.Widget

Förutom de metoder som beskrivs nedan stöder ttk.Widget metoderna tkinter.Widget.cget() och tkinter.Widget.configure().

class tkinter.ttk.Widget
identify(x, y)

Returnerar namnet på elementet vid position x y, eller den tomma strängen om punkten inte ligger inom något element.

x och y är pixelkoordinater i förhållande till widgeten.

instate(statespec, callback=None, *args, **kw)

Testar widgetens tillstånd. Om inget callback anges returneras True om widgetens tillstånd matchar statespec och False annars. Om callback anges anropas den med args om widgetens tillstånd matchar statespec.

state(statespec=None)

Modifiera eller fråga om widgetens tillstånd. Om statespec anges, ändras widgetens tillstånd enligt specifikationen och en ny statespec returneras som anger vilka flaggor som ändrats. Om statespec inte specificeras returneras de för närvarande aktiverade tillståndsflaggorna.

statespec är vanligtvis en lista eller en tupel.

Combobox

Widgeten ttk.Combobox kombinerar ett textfält med en popup-lista med värden. Denna widget är en underklass till Entry.

Förutom de metoder som ärvts från Widget: Widget.cget(), Widget.configure(), Widget.identify(), Widget.instate() och Widget.state(), och följande som ärvts från Entry: Entry.bbox(), Entry.delete(), Entry.icursor(), Entry.index(), Entry.insert(), Entry.selection(), Entry.xview(), den har några andra metoder, beskrivs i ttk.Combobox.

Alternativ

Denna widget accepterar följande specifika alternativ:

Alternativ

Beskrivning

exportselection

Boolean värde. Om värdet är inställt är widgetvalet kopplat till Window Manager-valet (som kan returneras genom att till exempel anropa Misc.selection_get).

justify

Anger hur texten ska riktas in i widgeten. Ett av alternativen ”left”, ”center” eller ”right”.

height

Anger höjden på popup-listboxen, i rader.

postcommand

Ett skript (eventuellt registrerat med Misc.register) som anropas omedelbart innan värdena visas. Det kan ange vilka värden som ska visas.

state

Ett av alternativen ”normal”, ”readonly” eller ”disabled”. I läget ”readonly” kan värdet inte redigeras direkt, och användaren kan bara välja värden från rullgardinslistan. I ”normal”-läget är textfältet direkt redigerbart. I det ”inaktiverade” läget är ingen interaktion möjlig.

textvariable

Anger ett namn vars värde är kopplat till widgetens värde. När värdet som associeras med namnet ändras, uppdateras widgetens värde och vice versa. Se tkinter.StringVar.

values

Anger listan med värden som ska visas i listrutan.

width

Anger ett heltal som anger den önskade bredden på inmatningsfönstret, i tecken av genomsnittlig storlek i widgetens typsnitt.

Virtuella händelser

Combobox-widgetarna genererar en <<ComboboxSelected>> virtuell händelse när användaren väljer ett element från listan med värden.

ttk.Combobox

class tkinter.ttk.Combobox
current(newindex=None)

Om newindex anges sätts combobox-värdet till elementpositionen newindex. I annat fall returneras indexet för det aktuella värdet eller -1 om det aktuella värdet inte finns i värdelistan.

get()

Returnerar det aktuella värdet för kombinationsrutan.

set(value)

Ställer in värdet på kombinationsrutan till värde.

Spinbox

Widgeten ttk.Spinbox är en ttk.Entry som har utökats med pilar för ökning och minskning. Den kan användas för siffror eller listor med strängvärden. Denna widget är en underklass till Entry.

Förutom de metoder som ärvts från Widget: Widget.cget(), Widget.configure(), Widget.identify(), Widget.instate() och Widget.state(), och följande som ärvts från Entry: Entry.bbox(), Entry.delete(), Entry.icursor(), Entry.index(), Entry.insert(), Entry.xview(), den har några andra metoder, som beskrivs i ttk.Spinbox.

Alternativ

Denna widget accepterar följande specifika alternativ:

Alternativ

Beskrivning

from

Flytande värde. Om värdet är inställt är detta det lägsta värde som decrement-knappen kommer att decremera till. Måste stavas som from_ när det används som argument, eftersom from är ett Python-nyckelord.

to

Flytande värde. Om det är inställt är detta det maximala värde som inkrementeringsknappen kommer att inkrementera till.

increment

Flytande värde. Anger det belopp som knapparna för ökning/minskning ändrar värdet med. Standardvärdet är 1,0.

values

Sekvens av sträng- eller floatvärden. Om detta anges kommer knapparna för inkrementering/dekrementering att bläddra igenom objekten i sekvensen i stället för att inkrementera eller dekrementera siffror.

wrap

Booleanskt värde. Om True, kommer knapparna för ökning och minskning att cykla från to-värdet till from-värdet respektive from-värdet till to-värdet.

format

Strängvärde. Detta anger formatet för de tal som anges med knapparna för ökning/minskning. Det måste vara i formen ”%W.Pf”, där W är den utfyllda bredden på värdet, P är precisionen och ”%” och ”f” är bokstavliga.

command

Python-kallbar. Anropas utan argument när någon av knapparna för ökning eller minskning trycks in.

Virtuella händelser

Spinbox-widgeten genererar en <<Increment>> virtuell händelse när användaren trycker på <Up>, och en <<Decrement>> virtuell händelse när användaren trycker på <Down>.

ttk.Spinbox

class tkinter.ttk.Spinbox
get()

Returnerar det aktuella värdet för spinboxen.

set(value)

Ställer in värdet på spinboxen till värde.

Notebook

Ttk Notebook widget hanterar en samling fönster och visar ett enda åt gången. Varje underordnat fönster är associerat med en flik som användaren kan välja för att ändra det fönster som visas.

Alternativ

Denna widget accepterar följande specifika alternativ:

Alternativ

Beskrivning

height

Om den finns och är större än noll, anger den önskade höjden på rutområdet (exklusive intern utfyllnad eller flikar). I annat fall används den maximala höjden för alla rutor.

padding

Anger hur mycket extra utrymme som ska läggas till runt utsidan av den bärbara datorn. Utfyllnaden är en lista med upp till fyra längdangivelser left top right bottom. Om färre än fyra element anges blir bottom standardmässigt top, right standardmässigt left och top standardmässigt left.

width

Om den finns och är större än noll, anges den önskade bredden på rutans område (exklusive intern utfyllnad). I annat fall används den maximala bredden för alla rutor.

Flikalternativ

Det finns också specifika alternativ för flikar:

Alternativ

Beskrivning

state

Antingen ”normal”, ”disabled” eller ”hidden”. Om ”disabled”, är fliken inte valbar. Om den är ”hidden” visas inte fliken.

sticky

Anger hur det underordnade fönstret ska placeras inom fönsterområdet. Värdet är en sträng som innehåller noll eller fler av tecknen ”n”, ”s”, ”e” eller ”w”. Varje bokstav hänvisar till en sida (norr, söder, öster eller väster) som det underordnade fönstret kommer att hålla sig till, enligt geometrihanteraren grid().

padding

Anger hur mycket extra utrymme som ska läggas till mellan anteckningsboken och den här rutan. Syntaxen är densamma som för alternativet padding som används av denna widget.

text

Anger en text som ska visas i fliken.

image

Anger en bild som ska visas i fliken. Se alternativet bild som beskrivs i Widget.

compound

Anger hur bilden ska visas i förhållande till texten, om både alternativen text och bild finns med. Se Label Options för lagliga värden.

underline

Anger index (0-baserat) för ett tecken som ska understrykas i textsträngen. Det understrukna tecknet används för mnemonisk aktivering om Notebook.enable_traversal() anropas.

Flikidentifierare

Tab_id som finns i flera metoder i ttk.Notebook kan ha någon av följande former:

  • Ett heltal mellan noll och antalet flikar

  • Namnet på ett underordnat fönster

  • En positionsangivelse av formen ”@x,y”, som identifierar fliken

  • Den bokstavliga strängen ”current”, som identifierar den flik som är markerad för tillfället

  • Den bokstavliga strängen ”end”, som returnerar antalet flikar (endast giltig för Notebook.index())

Virtuella evenemang

Denna widget genererar en <<NotebookTabChanged>> virtuell händelse efter att en ny flik har valts.

ttk.Notebook

class tkinter.ttk.Notebook
add(child, **kw)

Lägger till en ny flik i anteckningsboken.

Om fönstret för närvarande hanteras av den bärbara datorn men är dolt, återställs det till sin tidigare position.

Se Tab Options för en lista över tillgängliga alternativ.

forget(tab_id)

Tar bort den flik som anges av tab_id, avmapsar och avhanterar det associerade fönstret.

hide(tab_id)

Döljer den flik som anges av tab_id.

Fliken visas inte, men det associerade fönstret hanteras fortfarande av notebook och dess konfiguration sparas. Dolda flikar kan återställas med kommandot add().

identify(x, y)

Returnerar namnet på tabb-elementet på position x, y, eller den tomma strängen om det inte finns något.

index(tab_id)

Returnerar det numeriska indexet för den flik som anges av tab_id, eller det totala antalet flikar om tab_id är strängen ”end”.

insert(pos, child, **kw)

Infogar en ruta på den angivna positionen.

pos är antingen strängen ”end”, ett heltalsindex eller namnet på ett hanterat barn. Om child redan hanteras av notebook flyttas det till den angivna positionen.

Se Tab Options för en lista över tillgängliga alternativ.

select(tab_id=None)

Väljer den angivna tab_id.

Det associerade underordnade fönstret visas och det tidigare valda fönstret (om det är ett annat) avmarkeras. Om tab_id inte anges returneras widgetnamnet för den aktuella valda rutan.

tab(tab_id, option=None, **kw)

Fråga efter eller ändra alternativen för den specifika tab_id.

Om kw inte anges, returneras en ordbok med värden för flikalternativ. Om option anges, returneras värdet för det option. I annat fall sätts alternativen till motsvarande värden.

tabs()

Returnerar en lista över fönster som hanteras av den bärbara datorn.

enable_traversal()

Aktivera tangentbordstraversering för ett toplevel-fönster som innehåller denna anteckningsbok.

Detta kommer att utöka bindningarna för fönstret på översta nivån som innehåller anteckningsboken enligt följande:

  • Control-Tab: väljer fliken efter den flik som för närvarande är vald.

  • Shift-Control-Tab: väljer den flik som föregår den flik som för närvarande är vald.

  • Alt-K: där K är det mnemoniska (understrukna) tecknet för en flik, kommer att välja den fliken.

Flera anteckningsböcker i en och samma toppnivå kan aktiveras för genomgång, inklusive nästlade anteckningsböcker. Traversering av anteckningsböcker fungerar dock bara korrekt om alla rutor har den anteckningsbok de befinner sig i som master.

Förloppsindikator

Widgeten ttk.Progressbar visar status för en långvarig operation. Den kan fungera i två lägen: 1) det bestämda läget som visar hur mycket som är klart i förhållande till den totala mängden arbete som ska göras och 2) det obestämda läget som ger en animerad visning för att låta användaren veta att arbetet fortskrider.

Alternativ

Denna widget accepterar följande specifika alternativ:

Alternativ

Beskrivning

orient

Ett av alternativen ”horisontell” eller ”vertikal”. Anger förloppsindikatorns orientering.

length

Anger längden på förloppsindikatorns långa axel (bredd om den är horisontell, höjd om den är vertikal).

mode

En av ”determinate” eller ”indeterminate”.

maximum

Ett tal som anger det maximala värdet. Standardvärdet är 100.

value

Det aktuella värdet på förloppsindikatorn. I ”determinate”-läget representerar detta hur mycket arbete som har slutförts. I läget ”Indeterminate” tolkas det som modulo maximum, dvs. förloppsindikatorn fullbordar en ”cykel” när dess värde ökar med maximum.

variable

Ett namn som är kopplat till optionens värde. Om det anges kommer värdet på förloppsindikatorn automatiskt att ställas in på värdet för detta namn när det senare ändras.

phase

Skrivskyddat alternativ. Widgeten ökar periodiskt värdet på detta alternativ när dess värde är större än 0 och, i determinate-läge, mindre än maximum. Detta alternativ kan användas av det aktuella temat för att ge ytterligare animationseffekter.

ttk.Progressbar

class tkinter.ttk.Progressbar
start(interval=None)

Starta autoincrement-läge: schemalägger en återkommande timerhändelse som anropar Progressbar.step() varje intervall millisekunder. Om interval utelämnas är standardvärdet 50 millisekunder.

step(amount=None)

Ökar förloppsindikatorns värde med belopp.

amount är standardvärdet 1.0 om det utelämnas.

stop()

Stop autoincrement mode: avbryter alla återkommande timerhändelser som initierats av Progressbar.start() för denna progressbar.

Separator

Widgeten ttk.Separator visar en horisontell eller vertikal separeringslinje.

Den har inga andra metoder än de som ärvs från ttk.Widget.

Alternativ

Denna widget accepterar följande specifika alternativ:

Alternativ

Beskrivning

orient

Ett av alternativen ”horisontell” eller ”vertikal”. Anger separatorns orientering.

Sizegrip

Widgeten ttk.Sizegrip (även kallad grow box) gör det möjligt för användaren att ändra storlek på det innehållande toplevel-fönstret genom att trycka på och dra i greppet.

Denna widget har varken specifika alternativ eller specifika metoder, förutom de som ärvs från ttk.Widget.

Plattformsspecifika anmärkningar

  • På macOS inkluderar toplevel-fönster automatiskt ett inbyggt storleksgrepp som standard. Att lägga till en Sizegrip är ofarligt, eftersom det inbyggda greppet bara kommer att maskera widgeten.

Vi checkar av WordPress.org forumet under hela veckan, och tittar efter buggar. Om du rapporterar en legitim bugg som vi kan reproducera, kommer vi loggar det och patcha för en kommande uppdatering. Men vi kan tyvärr inte ge anpassningstips eller hjälpa till att integrera med 3: e parts plugins eller teman

  • Om den innehållande toplevelns position angavs i förhållande till skärmens högra eller nedre del (t.ex. ….), kommer widgeten Sizegrip inte att ändra storlek på fönstret.

  • Denna widget stöder endast ”southeast”-storleksändring.

Treeview

Widgeten ttk.Treeview visar en hierarkisk samling av objekt. Varje objekt har en textetikett, en valfri bild och en valfri lista med datavärden. Datavärdena visas i kolumner efter trädets etikett.

Den ordning i vilken datavärdena visas kan styras genom att ställa in widgetalternativet displaycolumns. Trädwidgeten kan också visa kolumnrubriker. Kolumnerna kan nås med nummer eller symboliska namn som anges i widgetalternativet columns. Se Kolumnidentifierare.

Varje objekt identifieras med ett unikt namn. Widgeten genererar objekt-ID:n om de inte tillhandahålls av den som anropar. Det finns ett unikt rotobjekt som heter {}. Själva rotobjektet visas inte, utan dess barn visas högst upp i hierarkin.

Varje objekt har också en lista med taggar, som kan användas för att associera händelsebindningar med enskilda objekt och styra utseendet på objektet.

Treeview-widgeten stöder horisontell och vertikal rullning, enligt de alternativ som beskrivs i Scrollable Widget Options och metoderna Treeview.xview() och Treeview.yview().

Alternativ

Denna widget accepterar följande specifika alternativ:

Alternativ

Beskrivning

columns

En lista med kolumnidentifierare som anger antalet kolumner och deras namn.

displaycolumns

En lista med kolumnidentifierare (antingen symboliska index eller heltalsindex) som anger vilka datakolumner som ska visas och i vilken ordning de ska visas, eller strängen ”#all”.

height

Anger antalet rader som ska vara synliga. Observera: den begärda bredden bestäms av summan av kolumnbredderna.

padding

Anger den interna utfyllnaden för widgeten. Utfyllnaden är en lista med upp till fyra längdspecifikationer.

selectmode

Styr hur de inbyggda klassbindningarna hanterar urvalet. Ett av alternativen ”extended”, ”browse” eller ”none”. Om inställningen är ”extended” (standard) kan flera objekt väljas. Om ”browse” används kommer endast ett objekt att väljas åt gången. Om ”none” används kommer valet inte att ändras.

Observera att programkoden och taggbindningarna kan ställa in urvalet hur de vill, oavsett värdet på detta alternativ.

show

En lista som innehåller noll eller flera av följande värden och som anger vilka element i trädet som ska visas.

  • tree: visa trädetiketter i kolumn #0.

  • headings: visa rubrikraden.

Standardinställningen är ”tree headings”, dvs. visa alla element.

Notera: Kolumn #0 hänvisar alltid till trädkolumnen, även om show=”tree” inte har angetts.

Objektalternativ

Följande objektalternativ kan anges för objekt i kommandona insert och item widget.

Alternativ

Beskrivning

text

Den textetikett som ska visas för objektet.

image

En Tk-bild som visas till vänster om etiketten.

values

Listan över värden som är kopplade till objektet.

Varje objekt ska ha samma antal värden som widgetalternativets kolumner. Om det finns färre värden än kolumner antas de återstående värdena vara tomma. Om det finns fler värden än kolumner ignoreras de extra värdena.

open

True/False värde som anger om objektets barn ska visas eller döljas.

tags

En lista över taggar som är associerade med detta objekt.

Alternativ för taggar

Följande alternativ kan anges för taggar:

Alternativ

Beskrivning

foreground

Anger textens förgrundsfärg.

background

Anger bakgrundsfärgen för cellen eller objektet.

font

Anger vilket teckensnitt som ska användas när du ritar text.

image

Anger artikelns bild, om artikelns bildalternativ är tomt.

Kolumnidentifierare

Kolumnidentifierare kan ha någon av följande former:

  • Ett symboliskt namn från listan över kolumnalternativ.

  • Ett heltal n, som anger den n:te datakolumnen.

  • En sträng av formen #n, där n är ett heltal, som anger den n:te visningskolumnen.

Anteckningar:

  • Objektets optionsvärden kan visas i en annan ordning än den ordning i vilken de lagras.

  • Kolumn #0 hänvisar alltid till trädkolumnen, även om show=”tree” inte har angetts.

Ett kolumnnummer för data är ett index i listan med alternativvärden för ett objekt; ett kolumnnummer för visning är kolumnnumret i trädet där värdena visas. Trädets etiketter visas i kolumn #0. Om alternativet displaycolumns inte är inställt visas datakolumn n i kolumn #n+1. Återigen, kolumn #0 hänvisar alltid till trädkolumnen.

Virtuella evenemang

Widgeten Treeview genererar följande virtuella händelser.

Händelse

Beskrivning

<<TreeviewSelect>>

Genereras när urvalet ändras.

<<TreeviewOpen>>

Genereras precis innan fokusobjektet ställs in på open=True.

<<TreeviewClose>>

Genereras precis efter att fokusobjektet har ställts in på open=False.

Metoderna Treeview.focus() och Treeview.selection() kan användas för att bestämma det eller de objekt som påverkas.

ttk.Treeview

class tkinter.ttk.Treeview
bbox(item, column=None)

Returnerar begränsningsrutan (i förhållande till treeview-widgetens fönster) för det angivna objektet i formen (x, y, bredd, höjd).

Om column anges returneras cellens avgränsande box. Om objektet inte är synligt (dvs. om det är en ättling till ett stängt objekt eller om det rullas utanför skärmen), returneras en tom sträng.

get_children(item=None)

Returnerar listan över barn som hör till item.

Om item inte anges returneras rotbarn.

set_children(item, *newchildren)

Ersätter item:s barn med newchildren.

Barn som finns i item och som inte finns i newchildren tas bort från trädet. Inga objekt i newchildren får vara förfäder till item. Observera att om du inte anger newchildren kommer item:s barn att tas bort.

column(column, option=None, **kw)

Fråga efter eller ändra alternativen för den angivna kolumnen.

Om kw inte anges, returneras en dict med värden för kolumnens alternativ. Om option anges returneras värdet för det option. Annars sätts alternativen till motsvarande värden.

De giltiga alternativen/värdena är:

id

Returnerar kolumnnamnet. Detta är ett skrivskyddat alternativ.

anchor: Ett av Tk:s standardvärden för ankare.

Anger hur texten i den här kolumnen ska justeras i förhållande till cellen.

minwidth: bredd

Kolumnens minsta bredd i pixlar. Treeview-widgeten kommer inte att göra kolumnen mindre än vad som anges av detta alternativ när widgeten ändras i storlek eller användaren drar en kolumn.

stretch: True/False

Anger om kolumnens bredd ska justeras när widgetens storlek ändras.

width: bredd

Kolumnens bredd i pixlar.

För att konfigurera trädkolumnen, kalla detta med column = ”#0”

delete(*items)

Ta bort alla angivna objekt och alla deras efterföljande objekt.

Rotobjektet får inte raderas.

detach(*items)

Avlänk alla angivna objekt från trädet.

Objekten och alla deras ättlingar finns fortfarande kvar och kan återinföras på en annan plats i trädet, men de visas inte.

Rotposten får inte lossas.

exists(item)

Returnerar True om det angivna objektet finns i trädet.

focus(item=None)

Om item anges, sätts fokusobjektet till item. I annat fall returneras det aktuella fokusobjektet, eller ’’ om det inte finns något.

heading(column, option=None, **kw)

Fråga efter eller ändra rubrikalternativen för den angivna kolumnen.

Om kw inte anges, returneras en dict med rubrikens alternativvärden. Om option anges returneras värdet för det option. Annars sätts alternativen till motsvarande värden.

De giltiga alternativen/värdena är:

text: text

Den text som ska visas i kolumnrubriken.

image: imageName

Anger en bild som ska visas till höger om kolumnrubriken.

anchor: ankare

Anger hur rubriktexten ska justeras. Ett av Tk:s standardvärden för ankare.

command: callback

En återuppringning som aktiveras när rubriketiketten trycks in.

För att konfigurera trädets kolumnrubrik, kalla detta med column = ”#0”.

identify(component, x, y)

Returnerar en beskrivning av den angivna komponenten under den punkt som anges av x och y, eller den tomma strängen om ingen sådan komponent finns vid den positionen.

identify_row(y)

Returnerar artikel-ID för artikeln på position y.

identify_column(x)

Returnerar datakolumnidentifieraren för cellen vid position x.

Trädkolonnen har ID #0.

identify_region(x, y)

Returnerar en av:

region

meaning

heading

Trädhuvudområde.

separator

Mellanslag mellan två kolumners rubriker.

tree

Trädområdet.

cell

En datacell.

Tillgänglighet: Tk 8.6.

identify_element(x, y)

Returnerar elementet på position x, y.

Tillgänglighet: Tk 8.6.

index(item)

Returnerar heltalsindexet för item i dess förälders lista över barn.

insert(parent, index, iid=None, **kw)

Skapar en ny artikel och returnerar artikelidentifieraren för den nyskapade artikeln.

parent är artikel-ID för den överordnade artikeln, eller den tomma strängen för att skapa en ny artikel på högsta nivån. index är ett heltal, eller värdet ”end”, som anger var i listan över förälderns barn som det nya objektet ska infogas. Om index är mindre än eller lika med noll infogas den nya noden i början; om index är större än eller lika med det aktuella antalet barn infogas den i slutet. Om iid anges används det som objektets identifierare; iid får inte redan finnas i trädet. Annars genereras en ny unik identifierare.

Se Item Options för en lista över tillgängliga alternativ.

item(item, option=None, **kw)

Fråga efter eller ändra alternativen för den angivna artikeln.

Om inga alternativ anges returneras en dikt med alternativ/värden för objektet. Om option anges returneras värdet för det alternativet. I annat fall sätts alternativen till motsvarande värden som anges av kw.

move(item, parent, index)

Flyttar item till position index i parent:s lista över barn.

Det är olagligt att flytta ett objekt under en av dess ättlingar. Om index är mindre än eller lika med noll flyttas objektet till början; om det är större än eller lika med antalet barn flyttas det till slutet. Om item var fristående fästs det på nytt.

next(item)

Returnerar identifieraren för item:s nästa syskon, eller ’’ om item är det sista barnet till sin förälder.

parent(item)

Returnerar ID för föräldern till item, eller ’’ om item är på den översta nivån i hierarkin.

prev(item)

Returnerar identifieraren för item:s föregående syskon, eller ’’ om item är det första barnet till sin förälder.

reattach(item, parent, index)

Ett alias för Treeview.move().

see(item)

Se till att item är synligt.

Ställer in alla item*s förfäders öppna alternativ till ``True``, och scrollar widgeten om det behövs så att *item är inom den synliga delen av trädet.

selection()

Returnerar en tupel av valda objekt.

Ändrad i version 3.8: selection() tar inte längre emot argument. Använd följande urvalsmetoder för att ändra urvalstillståndet.

selection_set(*items)

items blir det nya urvalet.

Ändrad i version 3.6: items kan skickas som separata argument, inte bara som en enda tupel.

selection_add(*items)

Lägg till artiklar i urvalet.

Ändrad i version 3.6: items kan skickas som separata argument, inte bara som en enda tupel.

selection_remove(*items)

Ta bort objekt från urvalet.

Ändrad i version 3.6: items kan skickas som separata argument, inte bara som en enda tupel.

selection_toggle(*items)

Växla valstatus för varje objekt i items.

Ändrad i version 3.6: items kan skickas som separata argument, inte bara som en enda tupel.

set(item, column=None, value=None)

Med ett argument returneras en ordbok med kolumn/värde-par för den angivna artikeln. Med två argument returneras det aktuella värdet för den angivna kolumnen. Med tre argument, anger värdet för angiven kolumn i angiven artikel till angivet värde.

tag_bind(tagname, sequence=None, callback=None)

Binder ett callback för den angivna händelsen sequence till taggen tagname. När en händelse levereras till ett objekt anropas återuppringningarna för vart och ett av objektets taggalternativ.

tag_configure(tagname, option=None, **kw)

Fråga efter eller ändra alternativen för det angivna tagnamnet.

Om kw inte anges, returneras en dict med alternativinställningarna för tagname. Om option anges, returneras värdet för det option för det angivna tagname. I annat fall sätts alternativen till motsvarande värden för det angivna tagname.

tag_has(tagname, item=None)

Om item anges, returneras 1 eller 0 beroende på om det angivna item har det angivna tagnamnet. I annat fall returneras en lista över alla objekt som har den angivna taggen.

Tillgänglighet: Tk 8,6

xview(*args)

Fråga efter eller ändra trädvyens horisontella position.

yview(*args)

Fråga efter eller ändra trädvyns vertikala position.

Ttk Styling

Varje widget i ttk tilldelas en stil, som anger den uppsättning element som utgör widgeten och hur de är arrangerade, tillsammans med dynamiska inställningar och standardinställningar för elementalternativ. Som standard är stilnamnet detsamma som widgetens klassnamn, men det kan åsidosättas av widgetens stilalternativ. Om du inte känner till klassnamnet på en widget kan du använda metoden Misc.winfo_class() (somewidget.winfo_class()).

Se även

presentation av konferensen Tcl’2004

Detta dokument förklarar hur temamotorn fungerar

class tkinter.ttk.Style

Denna klass används för att manipulera stildatabasen.

configure(style, query_opt=None, **kw)

Fråga efter eller ange standardvärdet för det eller de angivna alternativen i style.

Varje nyckel i kw är ett alternativ och varje värde är en sträng som identifierar värdet för det alternativet.

Om du t.ex. vill ändra alla standardknappar till en platt knapp med lite utfyllnad och en annan bakgrundsfärg:

from tkinter import ttk
import tkinter

root = tkinter.Tk()

ttk.Style().configure("TButton", padding=6, relief="flat",
   background="#ccc")

btn = ttk.Button(text="Sample")
btn.pack()

root.mainloop()
map(style, query_opt=None, **kw)

Frågar efter eller anger dynamiska värden för det eller de angivna alternativen i style.

Varje nyckel i kw är ett alternativ och varje värde ska vara en lista eller en tupel (vanligtvis) som innehåller statespecs grupperade i tuplar, listor eller någon annan preferens. En statespec är en sammansättning av ett eller flera tillstånd och sedan ett värde.

Ett exempel kan göra det mer begripligt:

import tkinter
from tkinter import ttk

root = tkinter.Tk()

style = ttk.Style()
style.map("C.TButton",
    foreground=[('pressed', 'red'), ('active', 'blue')],
    background=[('pressed', '!disabled', 'black'), ('active', 'white')]
    )

colored_btn = ttk.Button(text="Test", style="C.TButton").pack()

root.mainloop()

Observera att ordningen på sekvenserna (tillstånd, värde) för ett alternativ har betydelse. Om ordningen ändras till [('active', 'blue'), ('pressed', 'red')] i alternativet för förgrund, till exempel, skulle resultatet bli en blå förgrund när widgeten var i aktivt eller pressat tillstånd.

lookup(style, option, state=None, default=None)

Returnerar det värde som anges för option i style.

Om state anges förväntas det vara en sekvens av ett eller flera tillstånd. Om argumentet default anges används det som ett reservvärde om ingen specifikation för optionen hittas.

Så här kontrollerar du vilket teckensnitt en knapp använder som standard:

från tkinter import ttk

print(ttk.Style().lookup("TButton", "font"))
layout(style, layoutspec=None)

Definiera widgetlayouten för given style. Om layoutspec utelämnas returneras layoutspecifikationen för den givna stilen.

layoutspec, om den anges, förväntas vara en lista eller någon annan sekvenstyp (exklusive strängar), där varje objekt ska vara en tupel och det första objektet är layoutnamnet och det andra objektet ska ha det format som beskrivs i Layouts.

För att förstå formatet, se följande exempel (det är inte meningen att det ska göra något användbart):

from tkinter import ttk
import tkinter

root = tkinter.Tk()

style = ttk.Style()
style.layout("TMenubutton", [
   ("Menubutton.background", None),
   ("Menubutton.button", {"children":
       [("Menubutton.focus", {"children":
           [("Menubutton.padding", {"children":
               [("Menubutton.label", {"side": "left", "expand": 1})]
           })]
       })]
   }),
])

mbtn = ttk.Menubutton(text='Text')
mbtn.pack()
root.mainloop()
element_create(elementname, etype, *args, **kw)

Skapar ett nytt element i det aktuella temat, av den angivna etypen som förväntas vara antingen ”image”, ”from” eller ”vsapi”. Den senare är endast tillgänglig i Tk 8.6 på Windows.

Om ”image” används ska args innehålla standardbildnamnet följt av paren statespec/värde (detta är imagespec), och kw kan ha följande alternativ:

border=padding

padding är en lista med upp till fyra heltal som anger vänster-, topp-, höger- respektive bottenkanter.

height=height

Anger en minsta höjd för elementet. Om den är mindre än noll används basbildens höjd som standard.

padding=padding

Anger elementets invändiga utfyllnad. Standardvärdet är border-värdet om det inte anges.

sticky=spec

Anger hur bilden ska placeras i det slutliga paketet. spec innehåller noll eller flera tecken ”n”, ”s”, ”w” eller ”e”.

width=width

Anger en minsta bredd för elementet. Om den är mindre än noll används basbildens bredd som standard.

Exempel:

img1 = tkinter.PhotoImage(master=root, file='button.png')
img1 = tkinter.PhotoImage(master=root, file='button-pressed.png')
img1 = tkinter.PhotoImage(master=root, file='button-active.png')
style = ttk.Style(root)
style.element_create('Button.button', 'image',
                     img1, ('pressed', img2), ('active', img3),
                     border=(2, 4), sticky='we')

Om ”from” används som värde för etype, kommer element_create() att klona ett befintligt element. args förväntas innehålla ett temanamn, från vilket elementet ska klonas, och eventuellt ett element att klona från. Om elementet att klona från inte anges, kommer ett tomt element att användas. kw kastas bort.

Exempel:

style = ttk.Style(root)
style.element_create('plain.background', 'from', 'default')

Om ”vsapi” används som värde för etype kommer element_create() att skapa ett nytt element i det aktuella temat vars visuella utseende ritas med hjälp av Microsoft Visual Styles API som ansvarar för temastilarna i Windows XP och Vista. args förväntas innehålla Visual Styles-klassen och -delen som anges i Microsoft-dokumentationen följt av en valfri sekvens av tuples av ttk-tillstånd och motsvarande Visual Styles API-tillståndsvärde. kw kan ha följande alternativ:

padding=padding

Ange elementets inre utfyllnad. padding är en lista med upp till fyra heltal som anger vänster-, topp-, höger- respektive bottenfyllnadsmängderna. Om färre än fyra element anges är botten standardvärdet för topp, höger standardvärdet för vänster och topp standardvärdet för vänster. Med andra ord anger en lista med tre tal vänster, vertikal och höger utfyllnad; en lista med två tal anger horisontell och vertikal utfyllnad; ett enda tal anger samma utfyllnad hela vägen runt widgeten. Detta alternativ får inte blandas med några andra alternativ.

margins=padding

Anger elementens yttre utfyllnad. padding är en lista med upp till fyra heltal som anger vänster-, topp-, höger- respektive bottenfyllnadsmängderna. Detta alternativ får inte blandas med några andra alternativ.

width=width

Anger bredden för elementet. Om det här alternativet anges kommer Visual Styles API inte att tillfrågas om rekommenderad storlek eller del. Om detta alternativ anges bör även height anges. Alternativen width och height kan inte blandas med alternativen padding eller margins.

height=height

Anger elementets höjd. Se kommentarerna för width.

Exempel:

style = ttk.Style(root)
style.element_create('pin', 'vsapi', 'EXPLORERBAR', 3, [
                     ('pressed', '!selected', 3),
                     ('active', '!selected', 2),
                     ('pressed', 'selected', 6),
                     ('active', 'selected', 5),
                     ('selected', 4),
                     ('', 1)])
style.layout('Explorer.Pin',
             [('Explorer.Pin.pin', {'sticky': 'news'})])
pin = ttk.Checkbutton(style='Explorer.Pin')
pin.pack(expand=True, fill='both')

Ändrad i version 3.13: Lagt till stöd för elementfabriken ”vsapi”.

element_names()

Returnerar listan över element som definieras i det aktuella temat.

element_options(elementname)

Returnerar listan över elementnamn:s alternativ.

theme_create(themename, parent=None, settings=None)

Skapa ett nytt tema.

Det är ett fel om themename redan finns. Om parent anges kommer det nya temat att ärva stilar, element och layouter från föräldratemat. Om settings finns med förväntas de ha samma syntax som används för theme_settings().

theme_settings(themename, settings)

Ställer tillfälligt in det aktuella temat till themename, tillämpar angivna settings och återställer sedan det tidigare temat.

Varje nyckel i settings är en stil och varje värde kan innehålla nycklarna ’configure’, ’map’, ’layout’ och ’element create’ och de förväntas ha samma format som anges av metoderna Style.configure(), Style.map(), Style.layout() respektive Style.element_create().

Som ett exempel, låt oss ändra Combobox för standardtemat lite:

from tkinter import ttk
import tkinter

root = tkinter.Tk()

style = ttk.Style()
style.theme_settings("default", {
   "TCombobox": {
       "configure": {"padding": 5},
       "map": {
           "background": [("active", "green2"),
                          ("!disabled", "green4")],
           "fieldbackground": [("!disabled", "green3")],
           "foreground": [("focus", "OliveDrab1"),
                          ("!disabled", "OliveDrab2")]
       }
   }
})

combo = ttk.Combobox().pack()

root.mainloop()
theme_names()

Returnerar en lista över alla kända teman.

theme_use(themename=None)

Om themename inte anges returneras det tema som används. I annat fall ställs det aktuella temat in på themename, alla widgetar uppdateras och en <<ThemeChanged>>-händelse skickas ut.

Layouter

En layout kan vara bara None, om den inte tar några alternativ, eller en dikt av alternativ som anger hur elementet ska arrangeras. Layoutmekanismen använder en förenklad version av packgeometrihanteraren: givet en initial hålighet tilldelas varje element ett paket.

De giltiga alternativen/värdena är:

side: whichside

Anger vilken sida av hålrummet som elementet ska placeras på; en av topp, höger, botten eller vänster. Om detta utelämnas upptar elementet hela hålrummet.

sticky: nswe

Anger var elementet placeras inom det tilldelade paketet.

unit: 0 eller 1

Om inställningen är 1, behandlas elementet och alla dess ättlingar som ett enda element i Widget.identify() och liknande. Det används för saker som rullningslister med tummar och grepp.

children: [sublayout… ]

Anger en lista med element som ska placeras inuti elementet. Varje element är en tupel (eller annan sekvenstyp) där det första objektet är layoutnamnet och det andra är en Layout.