Фокусировка на табулированном QDockWidget в PyQt

У меня есть три QDockWidgets, которые загружаются при запуске с помощью QMainWindow.tabifyDockWidget.

В главном окне после всех вызовов addDockWidget:

self.tabifyDockWidget(self.dock_widget1, self.dock_widget2)
self.tabifyDockWidget(self.dock_widget1, self.dock_widget3)

Основываясь на определенных действиях, я бы хотел выбрать одну из этих вкладок и сфокусировать ее, или, поверх двух других, если она еще не видна. Я пробовал использовать setVisible и setWindowState(Qt.WindowActive), но ничего не изменилось.

Есть ли способ программно выбрать виджет с вкладкой dock и перенести его на передний план?

Ответ 2

Для меня:

dock2.show();

dock2.raise();

было достаточно. Но да, оба нужны!

Ответ 3

Я не тестировал это, но вот что я хотел бы попробовать в Qt 4.5+ (я оставлю вам преобразование PyQt):

class MyMainWindow ; // A QMainWindow

void MyMainWindow::bringToFront( QDockWidget* dockIn )
{
   QList<QDockWidget*> docks = tabifiedDockWidgets( dockIn ) ;
   foreach( QDockWidget* dock, docks )
   {
      // Move second dock on top of first dock widget.
      tabifyDockWidget( dock, dockIn ) ;
   }
}

См. QMainWindow::tabifiedDockWidgets() и QMainWindow::tabifyDockWidget().

Ответ 4

Решение, которое работает для меня, это:

tabifyDockWidget (dock1, dock2)

dock2.setVisible(True)

dock2.setFocus()

dock2.raise_()

Эти 3 функции кажутся необходимыми.

Ответ 5

Это не сработало для меня:

dock2.raise_() 

Мне удалось заставить его работать, используя:

dock2.show()
parent.tabifyDockWidget(dock1, dock2)