Menubutton Inhaltsgröße begrenzen und bei einer Auswahl nicht schließen

Fragen zu Tkinter.
Antworten
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

Guten Tag

Für eine User-Interface, wo Benutzer in eine Datenbank angelegt werden können hab ich ein Menu, wo Checkbuttons eingefügt werden. Mit diesen Checkbuttons kann der Admin bestimmte Zugangsberechtigungen auswählen, die der Benutzer haben kann. Zur Info: Im Code entnehme ich die Namen ("Spaltennamen") für die dazugehörigen Checkbuttons aus einer zuvor angelegten Datenbank.

Hier der Teil des Codes der User-Interface:

Code: Alles auswählen

#Maximale Spaltenanzahl herausfinden
        cursor.execute("SELECT count(*) AS Spaltenanzahl FROM information_schema.columns where table_name = %s", ("Benutzer",))
        spaltenanzahl = cursor.fetchone()

        #MenüCombox zum erstellen der S+ Freigaben
        mb = ttk.Menubutton(Frame_Benutzererstellen, text = "S+ Benutzerzugänge")
        mb.grid(row = 0, column =2, columnspan = 2)
        mb.menu = Menu (mb, tearoff = 0)
        mb["menu"] = mb.menu
        #MenüCombobox wird befüllt
        int_Freigabestufen = list()
        
        #Die 7 steht da, weil die ersten sieben Stellen in Spaltennamen sind Benutzerdaten und erst ab da beginnen die Zugangsberechtigungen
        for Spalten in range(7, int(spaltenanzahl[0])):
            int_Sp = IntVar()
            mb.menu.add_checkbutton(label = Spaltennamen [Spalten][0], variable = int_Sp)
            int_Freigabestufen.append(int_Sp)
            

Jetzt habe ich zwei Fragen:

1. Zur Zeit habe ich nur zehn Zugangsberechtigungen. Jetzt nehme ich den Fall an, dass mehrere dazu kommen würden. Ist es möglich die Größe des anzeigten Inhalts zu begrenzen und dann beisplw. mit einer Scrollbar die restlichen zu sehen ?

2. Auch etwas Benutzerunfreundlich ist die Tatsache, dass wenn ich ein Checkbutton bediene das ganze Menü zugeklappt wird und ich, wenn ich weitere Sachen auswählen möchte das Menü wieder neu aufmachen muss. Gibt es da einen Befehl, welcher das verhindert ?

Über Hilfestellungen wäre ich sehr erfreut :D :)
Benutzeravatar
Dennis89
User
Beiträge: 1121
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

zum Verständnis, du willst die Zugangsberechtigungen, die nicht existieren, verstecken? Und wenn man runterscrollt erscheinen die Zugangsberechtigungen, die nicht existieren?

Sorry, vielleicht steh ich auch gerade auf dem Schlauch. :)

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

Dennis89 hat geschrieben: Dienstag 9. März 2021, 16:06 Hallo,

zum Verständnis, du willst die Zugangsberechtigungen, die nicht existieren, verstecken? Und wenn man runterscrollt erscheinen die Zugangsberechtigungen, die nicht existieren?

Sorry, vielleicht steh ich auch gerade auf dem Schlauch. :)

Grüße
Dennis
Hey Dennis89,

Ne etwas anders. Und zwar sollen alle sichtbar sein, jedoch soll das aufgeklappte Fenster begrenzt auf beispielsweise 8 Einträge sein und die restliche Einträge kann man durch scrollen erreichen.

Im Prinzip ist mein Ziel, dass wenn ich später womöglich 20 Zugangsberechtigungen habe, soll jetzt nicht ein Fenster aufgeklappt sein, was über durch den ganzen Bildschirm geht :shock:

Mfg Andrey35
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Warum willst Du das in einem Menü und nicht in einer Listbox?
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

Sirius3 hat geschrieben: Dienstag 9. März 2021, 20:23 Warum willst Du das in einem Menü und nicht in einer Listbox?
Besteht den die Möglichkeit in einer Listbox Checkbutton einzufügen ?
Dann würde eine Listbox für meinen Anwendungsfall ausreichen
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Listboxen kennen Mehrfachauswahl.
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

__deets__ hat geschrieben: Mittwoch 10. März 2021, 10:21 Listboxen kennen Mehrfachauswahl.
Kannst du mir ein Link zu einem Beispiel senden ?
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

__deets__ hat geschrieben: Mittwoch 10. März 2021, 10:21 Listboxen kennen Mehrfachauswahl.
Ok hab schon was selber gefunden.

lisbox(selectmode = MULTIPLE)


Gibt es eine Möglichkeit manchen Inhalt schon "ausgewählt" in die Listbox einzufügen, weil wenn das nicht möglich ist, dann hat es für mich kein Verwendungszweck
Benutzeravatar
Dennis89
User
Beiträge: 1121
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

vielleicht mit 'curselection', schau dir mal den folgenden Link durch:
https://tk-tutorial.readthedocs.io/en/l ... stbox.html

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

.selection_set(first, last=None)
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

Dennis89 hat geschrieben: Mittwoch 10. März 2021, 11:11 Hallo,

vielleicht mit 'curselection', schau dir mal den folgenden Link durch:
https://tk-tutorial.readthedocs.io/en/l ... stbox.html

Grüße
Dennis
__deets__ hat geschrieben: Mittwoch 10. März 2021, 11:11 .selection_set(first, last=None)
Hab mal eure Vorschläge ausprobiert im Prinzip funktioniere diese, jedoch hinterlege in der Datenbank immer eine 1 oder 0 für vorhandene Berechtigung oder nicht. Und mit einer Listbox müsste ich dann mein ganzes Programm zur Implementierung in die Datenbank ändern..
Das würde ich ungern machen.
Wenn es keine andere Möglichkeit gibt, werde ich es auch machen, aber ich würde erstmal versuchen was zu suchen, womit ich das Menü bearbeiten kann
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Verstehe ich nicht. Warum musst du die DB ändern? Mal abgesehen davon, dass es nach einer schlechten Modellierung klingt. Statt da 0 und 1 zu speichern, modelliert man das mit einer 1:n Relation, und entweder steht das Recht in Relation zum User, oder nicht.

Aber egal wie das dargestellt ist, das auf die Frage umzumünzen “ist dieses Recht, das ich gerade an die Liste packe, dem User gegeben?” musst du doch eh machen. Sonst bringen deiner Rechte ja allgemein nix, wenn du sie nicht prüfen kannst.

Und genau dieses Prädikat kannst du doch benutzen, wenn du die Einträge in die Listbox machst. Was ist daran komplizierter als mit der Menu-Checkbox-Nummer?
Andrey35
User
Beiträge: 16
Registriert: Donnerstag 8. Oktober 2020, 23:00

__deets__ hat geschrieben: Mittwoch 10. März 2021, 13:38 Verstehe ich nicht. Warum musst du die DB ändern? Mal abgesehen davon, dass es nach einer schlechten Modellierung klingt. Statt da 0 und 1 zu speichern, modelliert man das mit einer 1:n Relation, und entweder steht das Recht in Relation zum User, oder nicht.

Aber egal wie das dargestellt ist, das auf die Frage umzumünzen “ist dieses Recht, das ich gerade an die Liste packe, dem User gegeben?” musst du doch eh machen. Sonst bringen deiner Rechte ja allgemein nix, wenn du sie nicht prüfen kannst.

Und genau dieses Prädikat kannst du doch benutzen, wenn du die Einträge in die Listbox machst. Was ist daran komplizierter als mit der Menu-Checkbox-Nummer?
An der DB müsste ich nichts ändern, sondern an der User-Interface.
Tut mir leid aber ich verstehe nicht, was du mit 1:n Relation meinst. Kannst du mir das genauer erläutern ?

Denke danach könnte ich dir beantworten, was komplizierter ist :) :geek:
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie kann den die Modellierung etwas damit zu tun haben? Wenn du in der Lage bist 10 Checkboxen zu erzeugen und abhängig von den vergebenen Rechten anzuhaken oder nicht - wo ist der Unterschied zu 10 Einträgen einer Listbox, und einer Anwahl oder nicht?

Und bitte nicht immer den Post davor Komplett zitieren. Der steht da doch schon.
Benutzeravatar
Dennis89
User
Beiträge: 1121
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,
Andrey35 hat geschrieben: Mittwoch 10. März 2021, 14:31 ich verstehe nicht, was du mit 1:n Relation meinst. Kannst du mir das genauer erläutern ?
ich könnte mir vorstellen, dass das so gemeint ist:
Stell dir vor es gibt den User "Manfred" er hat die Rechte "Essen", "Trinken" und "Arbeiten".
Zusätzlich gibt es noch die Rechte "Spass" und "Freizeit", die Rechte hat "Manfred aber nicht.

Jetzt machst du die Abfrage:
Manfred:Arbeiten -> ergibt True
Manfred:Freizeit -> ergibt False

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten