ttkbootstrap

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
stonie69
User
Beiträge: 24
Registriert: Dienstag 11. Juni 2024, 17:56

Hi,

ich mach gerade die ersten Schritte Python und möchte ttkbootstrap für den Einsatz von Widgets verwenden. Vielleicht hat jemand von euch bereits Erfahrung darin.
Ich für meinen Teil denke, auch wenn ihr euch damit nicht auskennt sollte es ein leichtes sein (für mich leider nicht ;-). Die Aufgabe zu lösen anhand des Beispiels das denke ich auch gut beschrieben ist aber ich checke einfach nicht wie ich __init__ und den dafür erforderlichen Parametern den Übergang zum Aufruf einer Methode einleite!....grrrrrrr

Link: https://ttkbootstrap.readthedocs.io/en ... mn_center


Folgende Aufgabe:
1) Beispiel Code für die Erstellung des "TableView-Modul's" mit 3 Spalten und 3 Zeilen

Code: Alles auswählen

import ttkbootstrap as ttk
from ttkbootstrap.tableview import Tableview
from ttkbootstrap.constants import *

app = ttk.Window()
colors = app.style.colors

coldata = [
    {"text": "LicenseNumber", "stretch": False},
    "CompanyName",
    {"text": "UserCount", "stretch": False},
]

rowdata = [
    ('A123', 'IzzyCo', 12),
    ('A136', 'Kimdee Inc.', 45),
    ('A158', 'Farmadding Co.', 36)
]

dt = Tableview(
    master=app,
    coldata=coldata,
    rowdata=rowdata,
    paginated=True,
    searchable=True,
    bootstyle=PRIMARY,
    stripecolor=(colors.light, None),
)
dt.pack(fill=BOTH, expand=YES, padx=10, pady=10)

app.mainloop()

2) jetzt möchte ich z.B. die 3te Spalte linksbündig setzen. Der "einfache" Befehl lautet

Code: Alles auswählen

def align_column_left(self, event=None, cid=None):
    """Left align the column text. This can be triggered by
    either an event, or by passing in the `cid`, which is the index
    of the column relative to the original data set.

    Parameters:

        event (Event):
            An application click event.

        cid (int):
            A unique column identifier; typically the index of the
            column relative to the original dataset.
    """
    if event is not None:
        eo = self._get_event_objects(event)
        self.view.column(eo.column.cid, anchor=W)
    elif cid is not None:
        self.view.column(cid, anchor=W)
3) oder Entfernen Sie die Spalte dauerhaft aus der Tabellenansicht.

Code: Alles auswählen

def delete(self):
    """Remove the column from the tableview permanently."""
    # update the tablerow columns
    index = self.tableindex
    if index is None:
        return

    for row in self._table.tablerows:
        row.values.pop(index)
        row.refresh()

    # actual columns
    cols = list(self.view.cget("columns"))
    cols.remove(self.cid)
    self._table.tablecolumns.remove(self)

    # visible columns
    dcols = list(self.view.cget("displaycolumns"))
    if "#all" in dcols:
        dcols = cols
    else:
        dcols.remove(self.cid)

    # remove cid mapping
    self._table.cidmap.pop(self._cid)

    # reconfigure the tableview column and displaycolumns
    self.view.configure(columns=cols, displaycolumns=dcols)

    # remove the internal object references
    for i, column in enumerate(self._table.tablecolumns):
        if column.cid == self.cid:
            self._table.tablecolumns.pop(i)
        else:
            column.restore_settings()
Ich finde einfach den Ansatz nicht für die Übergabe bzw. Zuweisung der Objekte ???

Schonmal Vielen Dank
Gruß Dirk
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@stonie69: Die `align_column_*()`-Methoden nehmen eine `cid` als Argument. Die `cid` kann man vom Spaltenobjekt erfahren das man mit `get_column()` bekommt und das nimmt den Index der Spalte als Argument. Und das Spaltenobjekt hat auch eine `delete()`-Methode um gelöscht zu werden.

Also (ungetestet):

Code: Alles auswählen

    table_view.align_column_left(cid=table_view.get_column(2).cid)
    table_view.get_column(2).delete()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
stonie69
User
Beiträge: 24
Registriert: Dienstag 11. Juni 2024, 17:56

@__blackjack__

Ich habe wieder mal zu kompliziert gedacht! Ich war der Meinung ich müsste das alles drum rum selbst in meinen Code einbauen.

Was hat es aber in der Dokumentation mit den ganzen __init__ Methoden auf sich oder anders gefragt wie kann ich einen Event abfangen, z.B. den Event wenn eine Zeile gewechselt wird?



Das ist denke ich auch wieder eine Grundsätzliche Sache die ich mir aneignen muß. Aber vielleicht kannst du mir mit ein paar Zeilen Code wieder auf die Sprünge helfen damit ich nicht wieder auf dem Schlauch stehe ;-)

Ich weiß du verwendest dieses Tool "ttkbootstrap" nicht aber das ist denke ich mal überall gleich aufgebaut. Wo kann ich solche Dinge finden, wie ich bestimmte Eigenschafteen Ausschalte wie. z.B. das das Auswahl Menü bei rechten Mausklick nicht angezeigt wird oder nur bestimmte Möglichkeiten?

Das aller wichtigste ist natürlich wie stelle ich die Sprache von Englisch auf Deutsch um?

oder ist es doch das Flasche Tool "ttkbootstrap" aber ich denke Nein ich muß ja Grundsätzlich erstmal in die Materie rein kommen :-)
stonie69
User
Beiträge: 24
Registriert: Dienstag 11. Juni 2024, 17:56

Hi @__blackjack__

habe es raus gefunden :-)

Dennoch Danke und Gruß Dirk

Code: Alles auswählen

        def selectTableView(ddd):
            selected_rows = self.dt.get_rows(selected=True)
            for row in selected_rows:
                print(row.values)

        self.tv = self.dt.view.bind("<<TreeviewSelect>>", selectTableView)
Antworten