web-dev-qa-db-ja.com

QTabWidgetの現在のタブを名前で設定する方法は?

PyQt5のQTabWidgetには、特定のタブを取得してアクティブなタブにするために使用できるメソッドsetCurrentIndexがあります。 (Qt Designerで設定した)タブ名でインデックスを作成する方法が見つからないようです。代わりに名前でインデックスを作成する方法(直接または間接)はありますか?

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

10
aoh

タブ名は、タブのページとして設定されたウィジェットのオブジェクト名になります。タブが追加されると、ページはタブウィジェットの内部スタックウィジェットに自動的に再ペアレント化されます。つまり、次のようなページへの参照を取得できます。

page = tabwidget.findChild(QWidget, tabname)

そして、このようなインデックスを取得します:

index = tabwidget.indexOf(page)

または、次のように現在のタブを名前で直接設定します。

tabwidget.setCurrentWidget(tabwidget.findChild(QWidget, tabname))
11
ekhumoro

別の方法として、タブインデックスを追加するときにそれを覚えておくことです。

index = tabWidget.addTab(myWidget)
tabWidget.setCurrentIndex(index)
2
jotrocken

Tab_nameを指定したメソッドは、名前がtab_nameと一致するタブのインデックスのリストを返します。

def get_indices(tab_name):
    return [index for index in range(tab_widget.count())
        if tab_name == tab_widget.tabText(index)]

この関数でインデックスを見つけたら、標準のPyQtメソッドを使用できます。

これを行う最善の方法ではありませんですが、場合によっては役立つことがあります。