Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set current tab of QTabWidget by name?

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?

http://doc.qt.io/qt-5/qtabwidget.html#currentIndex-prop

like image 294
aoh Avatar asked Aug 22 '17 23:08

aoh


4 Answers

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))
like image 179
ekhumoro Avatar answered Oct 02 '22 23:10

ekhumoro


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.

like image 32
Valters J. Zakrevskis Avatar answered Oct 02 '22 22:10

Valters J. Zakrevskis


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)
like image 44
jotrocken Avatar answered Oct 02 '22 22:10

jotrocken


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"))
like image 1
Selimyh Selim Avatar answered Oct 02 '22 23:10

Selimyh Selim