from PyQt4.QtGui import QMainWindow, QMdiArea class MainWnd(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.setCentralWidget(QMdiArea(self)) self.centralWidget().setViewMode(QMdiArea.TabbedView)
Все бы хорошо, но добавив одну-две вкладки начинаешь понимать, что вещь из коробки снова придется допиливать напильником:
Здесь меня не удовлетворяют два момента:
- Я привык, когда ширина вкладки подгоняется под ее заголовок;
- Люблю кнопки закрытия на каждой вкладке.
for tab in self.centralWidget().findChildren(QTabBar): tab.setExpanding(False)
Результат вполне удовлетворительный:
Со второй проблемой пришлось повозиться дольше. Спасибо, коллеги подбросили ссылочку.
Переводить на русский и разбирать по костям не буду, вроде бы все очевидно (если нет, милости просим в комменты), приведу только итоговый код на PyQt:
from PyQt4.QtGui import QMainWindow, QMdiArea, QTabBar class MainWnd(QMainWindow): def __init__(self, parent=None): QMainWindow.__init__(self, parent) self.setCentralWidget(QMdiArea(self)) self.centralWidget().setViewMode(QMdiArea.TabbedView) for tab in self.centralWidget().findChildren(QTabBar): tab.setExpanding(False) tab.setTabsClosable(True) tab.tabCloseRequested.connect(self.closeTab) def closeTab(self, index): sub = self.centralWidget().subWindowList()[index] self.centralWidget().setActiveSubWindow(sub) self.centralWidget().closeActiveSubWindow()
Вот теперь именно то, что и хотелось. Более того, оно правильно работает :)
Комментариев нет:
Отправить комментарий