Seite 1 von 1
QTabWidget Reiter automatisch anwählen
Verfasst: Sonntag 13. Dezember 2015, 22:02
von Ligurio
huhu ich hab mal wieder ein kleines problem.
und zwar habe ich mir mit QTabWidget ein Fenster mit 2 Reitern gebastelt. noch heißen diese tab und tab_2 und ich will diese per Code einzeln "ansteuern" bzw anzeigen lassen(werden noch umbenannt)
Beispielcode per Button auf dem Fenster:
Code: Alles auswählen
def __init__(self):
#läd die .ui datei
self.ui = loadUi('TestReiter.ui')
self.ui.Button.clicked.connect(self.Reiter)
self.ui.show()
def Reiter(self):
self.ui.tab_2.show()
mit tab_2.show wird mir zwar das zeug aus dem 2. tab angezegit , aber der Reiter steht immer noch auf 1. wechsel ich zwischen diesen reiter ist alles wieder auf der ausgangsstellung.
könnte mir wer weiterhelfen. das ganze wollte ich dann mitm raspberry pi ansteuern indem ich hier einen Schalter umlege und in dem erstellten Fenster soll dann der speziele reiter/tab durch das umlegen angezeigt werden.
ergänzung:
gerade ist mir aufgefallen, das wen ich den knopf drücke und das Textfeld aus reiter 2 angezeigt wird ich es wirklich nur sehe, aber nicht bearbeiten kann.
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Sonntag 13. Dezember 2015, 22:28
von jerch
@Ligurio: Suchst Du
currentIndex?
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Sonntag 13. Dezember 2015, 22:32
von Hyperion
Ließ dir doch mal die Beschreibung der klasse im der
Dokumentation durch. Da drin werden die Methoden zum Anzeigen eines bestimmten Tabs explizit genannt

Re: QTabWidget Reiter automatisch anwählen
Verfasst: Sonntag 13. Dezember 2015, 23:12
von Ligurio
Ich habe die Dokumentation für eine solche funktion schon durchgeschaut, aber nichts hat geklappt. eventuell habe ich die befehle auch falsch verwendet, deshalb habe ich hier ja die frage gestellt.
Wäre schön wenn ihr mir noch n klein tipp geben könntet.
mit currentIndex() hatte ich noch keinen erfolg bzw bestimmt falsch verwendet
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Montag 14. Dezember 2015, 18:31
von Madmartigan
currentIndex() ist quasi nur der
getter. Verwende
setCurrentIndex(int index) und du hast, was du erreichen willst. Der Parameter
index ist dabei jener Index, der angibt welcher Tab aktiv ist. (Startet bei 0

)
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Montag 14. Dezember 2015, 20:09
von BlackJack
Wobei `setCurrentWidget()` unter Umständen den lesbareren Code ergeben dürfte wenn man den Widgets sinnvolle Namen vergeben hat. Ein ``self.ui.config_tabs.setCurrentWidget(self.ui.print_config_tab)`` sagt dem Leser mehr als ``self.ui.config_tabs.setCurrentIndex(3)`` wo man erst einmal rätseln darf was die 3 bedeutet.
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Montag 14. Dezember 2015, 20:58
von Hyperion
@Ligurio: Ich habe von unterwegs auf dem Handy geschrieben, daher konnte ich den Absatz nicht zitieren, bzw es ist mir dann zu lästig. Aber wenn ich es richtig gezählt habe, steht das im sechsten Absatz - imho nicht sehr viel zu lesen. Zudem hättest du die Doku ja auch verlinken und darauf hinweisen können, daß du da damit nicht verstehst... wobei ich auch nicht angenommen habe, dass so ein simpler Aufruf Probleme bereiten könnte...
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Montag 14. Dezember 2015, 21:08
von Ligurio
Hallo Danke für eure hilfen.
muss ich noch etwas aus einer bibliothek importieren ?
diese meldung bekomm ich:
AttributeError: 'QMainWindow' object has no attribute 'config_tabs'
oder
AttributeError: 'QMainWindow' object has no attribute 'setCurrentIndex'
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Montag 14. Dezember 2015, 21:37
von BlackJack
@Ligurio: ``import brain`` und das dann bitte einschalten und benutzen. Weiss ich wie Dein `QTabWidget`-Exemplar und/oder Deine `QTab`-Exemplare sinnvollerweise heissen?
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Dienstag 15. Dezember 2015, 10:01
von Madmartigan
BlackJack hat geschrieben:Wobei `setCurrentWidget()` unter Umständen den lesbareren Code ergeben dürfte wenn man den Widgets sinnvolle Namen vergeben hat [...]
Genau da ist der Haken, zumindest beim kollaborativen Arbeiten. Der Index ist unmissverständlich und im schlimmsten Fall endet es mit OOR. Auf Namen verlasse ich mich nur ungern, zu oft wurde beim Refactoren unsauber gearbeitet. Das ist aber nur meine persönliche Erfahrung und auch nur meine Meinung.
@Ligurio
AttributeError: 'QMainWindow' object has no attribute 'config_tabs'
Das sagt doch alles, oder? Erstens scheinst du zu versuchen
setCurrentIndex auf dem MainWindow aufzurufen und zweitens scheint
config_tabs nicht bekannt zu sein, zumindest nicht dem Fenster. Was ist denn
config_tabs überhaupt, der
ObjectName oder ein
int?
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Dienstag 15. Dezember 2015, 10:17
von BlackJack
@Madmartigan: Die Argumentation kann ich nicht nachvollziehen. Klar kann beim Refaktorisieren eine Änderung eines Namens an der ein oder anderen Stelle vergessen werden. Das ist aber leicht zu beheben wenn man die Quelltextbasis nach dem alten Namen absucht. Auf der anderen Seite ist beim umsortieren, entfernen, oder einfügen eines Tabs bei magischen Indexwerten echt Schluss mit lustig weil man da nicht einfach nach den Zahlen suchen kann wie man nach einem Namen suchen könnte. Es gibt sicher mehr 0en, 1en, oder 2en im Programm die etwas anderes als Tabindizes bedeuten als es Namen wie `print_config_tab` gibt, die für etwas anderes stehen als ein Tab mit den Optionen für den Druck.
Zur Nachfrage an Ligurio: Was wird ``self.ui.config_tabs`` wohl sein? Sicherlich kein `int`, ich wüsste jedenfalls nicht wie man das mit dem Designer hinbekommt. Das war ja Beispielquelltext von mir den Ligurio ohne nachzudenken einfach ausgeführt hat.
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Dienstag 15. Dezember 2015, 10:37
von Madmartigan
Es existiert auch keinerlei Anforderung, dass du das nachvollziehen kannst. Jeder macht eben seine Erfahrungen und ich bin selten gut damit gefahren, mich auf Namen zu verlassen. Indices sind mir da wesentlich näher, auch erinnere ich mich nicht, jemals Tabs umsortiert oder zur Laufzeit hinzugefügt/entfernt zu haben.
Wie kann ich wissen ob config_tabs in seinem Code ein int ist oder sonst etwas anderes? Aus dem Post der Fehlermeldung geht das nicht hervor. Sicherlich, ich hätte annehmen können, er beruft sich da auf dein Beispiel. Aber der Anfang aller Verwirrungen ist eine Annahme. Auch wieder persönliche Erfahrung...
*Ende meines Off-Topic*
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Dienstag 15. Dezember 2015, 10:48
von BlackJack
@Madmartigan: Das Du keine Tabs umsortierst kann ich dagegen sehr gut nachvollziehen, den Aufwand würde ich mir bei magischen Indizes auch zwei bis dreimal überlegen.

Re: QTabWidget Reiter automatisch anwählen
Verfasst: Dienstag 15. Dezember 2015, 16:07
von Ligurio
Code: Alles auswählen
from PyQt4.QtGui import QApplication
from PyQt4.QtGui import QTabWidget
from PyQt4.uic import loadUi
from PyQt4 import QtCore
from PyQt4 import QtGui
import sys
class Window(object):
def __init__(self):
self.ui = loadUi('TestReiter.ui')
self.ui.Klickbutton.clicked.connect(self.Reiter)
self.ui.lineEdit.setText("hier steht der Text")
self.ui.show()
def Reiter(self):
self.ui.tabWidget.setCurrentIndex(1)
def main():
app = QApplication(sys.argv)
window = Window()
app.exec_()
if __name__ == '__main__':
main()
Ui Fenster erklärung
ein Button heißt: Klickbutton
der objektname für die Reiter heißt: tabWidget
Reiter 1 und 2 heißen noch mit default: tab und tab_2
Die bezeichnungen habe ich mal jetzt so gelassen wie sie im Qt Designer standardmäßig heißen.
so klappt es!!!
Danke euch. war einfach auf dem Schlauch gestanden
Re: QTabWidget Reiter automatisch anwählen
Verfasst: Mittwoch 16. Dezember 2015, 11:38
von jerch
Das Ansprechen über einen Index ist komplexer, man hat eine Indirektion mehr als beim Ansprechen über die Widget-Referenz. Und fehlerhaftes Refactoring ist mit beidem "machbar".