Seite 1 von 1

Kann man einen von mehreren tableView gezielt sperren?

Verfasst: Donnerstag 17. September 2009, 12:04
von klaus66
Ich habe in meiner Applikation insgesamt vier Tabellen, die über Tabs angewählt werden. Eine dieser Tabellen darf nur nach Eingabe eines Passwortes eingesehen werden.
Irgendwie will es mir nicht gelingen eine bestimmtes TAB zu dis- bzw. enablen.

Kann mir jemand auf die Sprünge helfen?
Ich benutze PyQt4 Version 4.4.4

Verfasst: Donnerstag 17. September 2009, 12:23
von franzf

Code: Alles auswählen

tabWidget.setTabEnabled(index, False)
Oder meintest du was anderes?
Wenn du den index nicht kennst kannst du ihn mittels

Code: Alles auswählen

tabWidget.indexOf(widget)
finden.

Was verwendest du denn als Doku, wenn ich fragen darf? :D

Verfasst: Donnerstag 17. September 2009, 14:54
von klaus66
Hi franzf,
danke für Deinen Tip, der auf Anhieb leider nicht funktioniert hat.
Es wäre gut, wenn Du Quellen angeben würdest, damit ich nachlesen kann. Schließlich möchte ich immer dazu lernen. :wink:

Ich hab jetzt das Problem anders gelöst. Mit der Passworteingabe beim Start wird eine Bool-Variable gesetzt, die ich beim Aufbau der Tabellen abfrage. Nur wenn das Administrator PW eingegeben wurde, wird für die vierte Tabelle das Tab mit Text gesetzt, sodass die Tabelle eingesehen und verändert werden kann. Soll die Berechtigung geändert werden, muss halt neu gestartet werden.
Das reicht mir im Moment. Wenn Du mir noch mitteilen könntest, wo ich die von Dir vorgeschlagene Lösung in der Dolu finde, wäre ich Dir dankbar.

Verfasst: Donnerstag 17. September 2009, 15:12
von franzf
klaus66 hat geschrieben:danke für Deinen Tip, der auf Anhieb leider nicht funktioniert hat.
Es wäre gut, wenn Du Quellen angeben würdest, damit ich nachlesen kann. Schließlich möchte ich immer dazu lernen. :wink:
Na hier:
http://doc.trolltech.com/4.4/qtabwidget ... TabEnabled

Und PyQt4-4.5 (ich hab nachgeschaut, das ist genauso schon in 4.4 und sogar schon in 4.2 vorhanden):
http://www.riverbankcomputing.com/stati ... TabEnabled

Zeig deinen Code, dann wissen wir was falsch läuft (und bitte genaue Fehlermeldungen bzw. erwartetes und beobachtetes Verhalten). Steht eigentlich was in der Console?

Verfasst: Freitag 18. September 2009, 07:36
von klaus66
Hallo franzf,
ich hab mich noch mal schlau gemacht und etwas experimentiert.

Code: Alles auswählen

        tab4.setEnabled(Admin)
tab4 ist das Tabellen Widget und Admin ist True wenn das Administrator Passwort eingegeben wurde.

Dein Tip funktioniert schon, allerdings wird die betreffendeTabelle noch mit reduzierter Stärke angezeigt und die Eingabe in die Tabelle ist gesperrt.
Ich brauch das Sperren der Auswahl der betreffenden Tabelle, so dass sie weder angezeigt noch bedient werden kann. Der Grund hierfür ist der Schutz der Kalkulationsdaten, die nur die berechtigte Person (Admin) einsehen und verändern können soll.
Hast Du eine Idee, wie man das Auswahl-Tab einer Tabelle sperren kann?

Mir ist dazu nur diese Lösung eingefallen:

Code: Alles auswählen

        if Admin:
            self.AuftragTabelle.addTab(tab4, self.tr("Preise"))

Verfasst: Freitag 18. September 2009, 09:34
von franzf
Lies dir das doch GENAUER durch, was man dir schreibt.
nicht setEnabled sondern setTabEnabled!
Ist ne Methode von QTabWidget.

Einfach ein Beispiel, dass du es siehst wie es geht:

Code: Alles auswählen

from PyQt4.Qt import *
import sys

app = QApplication(sys.argv)
tab = QTabWidget()
tab.addTab(QLabel("Tab 1", tab), "Tab 1")
tab.addTab(QLabel("Tab 2", tab), "Tab 2")
tab.addTab(QLabel("Tab 3", tab), "Tab 3")

tab.setTabEnabled(1, False) # HIER HIER HIER

tab.show()
app.exec_()

Verfasst: Freitag 18. September 2009, 10:29
von klaus66
Sorry, das was ich kopiert hatte war das, was ich zum Laufen gebracht hatte. Mit dem Statement "setTabEnabled" bekam ich immer eine Fehlermeldung. Inzwischen weiß ich auch warum.

Code: Alles auswählen

        self.AuftragTabelle.addTab(tab1, self.tr("Auftrag"))
        self.AuftragTabelle.addTab(tab2, self.tr("Bestellen"))
        self.AuftragTabelle.addTab(tab3, self.tr("Lieferanten"))
        self.AuftragTabelle.addTab(tab4, self.tr("Preise"))
        self.AuftragTabelle.setTabEnabled(3, Admin)
So sieht es jetzt aus und funktioniert auch, wie es sollte. Mein Fehler war, dass ich in der letzten zeile nicht das QTabWidget "AuftragTabelle" sondern das QWidget (die Tabelle) "tab4" angegeben hatte.
Ganz schön blöd!

Danke für Deine Hilfe.