PyQt5's QTabWidget
has a method setCurrentIndex
that you can use to get a particular tab to become the active tab. I can't seem to find any way to index by tab name though (which I set in Qt Designer). Is there any way (either direct or indirect) to index by name instead?
Asked
Active
Viewed 3.3k times
25

NoDataDumpNoContribution
- 10,591
- 9
- 64
- 104

aoh
- 1,090
- 2
- 13
- 25
4 Answers
25
The tab name becomes the object-name of the widget set as the tab's page. When the tab is added, the page will be automatically re-parented to the internal stack-widget of the tab-widget. This means you can get a reference to the page like this:
page = tabwidget.findChild(QWidget, tabname)
and get its index like this:
index = tabwidget.indexOf(page)
or set the current tab directly by name like this:
tabwidget.setCurrentWidget(tabwidget.findChild(QWidget, tabname))

ekhumoro
- 115,249
- 20
- 229
- 336
8
An alternative is to remember the tab's index when adding the tab. Then reuse it later in your code:
index = tabWidget.addTab(myWidget)
// ...
tabWidget.setCurrentIndex(index)

jotrocken
- 2,263
- 3
- 27
- 38
7
A method that given a tab_name returns a list of indices for tabs whose names match the tab_name.
def get_indices(tab_name):
return [index for index in range(tab_widget.count())
if tab_name == tab_widget.tabText(index)]
After finding the index with this function then standard PyQt methods can be used.
Not the best way to do this, but might be useful sometimes.

Valters J. Zakrevskis
- 91
- 1
- 6
1
you can use indexOf()
like this :
remove your tab :
self.tabWidget.removeTab(self.tabWidget.indexOf(self.YOUR_TAB_name))
add your tab:
self.tabWidget.addTab(self.YOUR_TAB_name, "name"))

eyllanesc
- 235,170
- 19
- 170
- 241

Selimyh Selim
- 11
- 2