Мне нужно настроить QTabWidget так, чтобы одна из ее полос вкладок (скажем, что есть 4 вкладки в целом) имеет свойство расширения и заполняет оставшееся пространство между другими вкладками. Есть идеи?Как сделать одну панель вкладок в QTabWidget расходной?
ответ
вы можете создать подкласс QTabBar
, установите его на ширину вашего TabWidget (высота зависит от FontSize) и перезаписать tabSizeHint()
:
class tabBar(QTabBar):
def __init__(self, width, height, parent=None):
QTabBar.__init__(self, parent)
self.setFixedSize(width, height)
def tabSizeHint(self, i):
f = 3 # Tab3 shall be f times wider then the other tabs
tw = int(self.width()/(self.count() + f -1)) # width per Tab
if i == 2: # Tab3
# return QSize(tw*f, self.height()) edited -> rounding error possible
return QSize(self.width() - (self.count() - 1)*tw, self.height())
return QSize(tw, self.height()) # all other tabs
и установить эту TabBar вашего TabWidget:
tb = tabBar(tabWidget.width(), 34) # tabBars height depends on fontSize
tabwidget..setTabBar(tb)
выглядит следующим образом:
редактировать:
если TabWidget изменяется, resizeEvent()
происходит. В этот момент TabWidget уже имеет свой новый размер и перекрасить IMMEDIATEDLY после resizeEvent(), see QT-Doc QTabWidget.resizeEvent
Так что, если width()
из TabBar адаптировано в resizeEvent()
, то TabBar всегда будет иметь такую же ширину, как и TabWidget. Поскольку размер tabSizeHint()
зависит от ширины, все вкладки также будут иметь правильную ширину. Таким образом, вы можете создать подкласс QTabWidget()
и перезаписать resizeEvent()
для динамического решения:
class tabWidget(QTabWidget):
def __init__(self, parent=None):
QTabWidget.__init__(self, parent)
def resizeEvent(self, event):
self.tabBar().setFixedWidth(self.width())
QTabWidget.resizeEvent(self, event)
Ну, это сработало, но это не динамическое решение. Я имею в виду, что все это сокрушает, насколько я начинаю изменять размер главного окна/Все еще ценю ваше решение! – Devlige
Чтобы сделать это правильно, необходимо работать в обратном направлении от существующих размеров вкладок. Это связано с тем, что размер вкладок зависит от текущего стиля и от других функций, таких как кнопки закрытия вкладок. Также важно установить минимальный размер для вкладки, которая является расширяемой (в противном случае ее можно было бы изменить до нуля).
Вот простая демонстрация, которая делает все, что:
from PyQt4 import QtCore, QtGui
class TabBar(QtGui.QTabBar):
def __init__(self, expanded=-1, parent=None):
super(TabBar, self).__init__(parent)
self._expanded = expanded
def tabSizeHint(self, index):
size = super(TabBar, self).tabSizeHint(index)
if index == self._expanded:
offset = self.width()
for index in range(self.count()):
offset -= super(TabBar, self).tabSizeHint(index).width()
size.setWidth(max(size.width(), size.width() + offset))
return size
class TabWidget(QtGui.QTabWidget):
def __init__(self, expanded=-1, parent=None):
super(TabWidget, self).__init__(parent)
self.setTabBar(TabBar(expanded, self))
def resizeEvent(self, event):
self.tabBar().setMinimumWidth(self.width())
super(TabWidget, self).resizeEvent(event)
class Window(QtGui.QWidget):
def __init__(self):
super(Window, self).__init__()
self.tabs = TabWidget(2, self)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.tabs)
for text in 'One Two Three Four'.split():
self.tabs.addTab(QtGui.QWidget(self), text)
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.setGeometry(500, 300, 400, 200)
window.show()
sys.exit(app.exec_())
- 1. Как расширить панель вкладок QTabWidget?
- 2. QTabWidget как скрыть только панель?
- 3. Как сделать QTabWidget прозрачным?
- 4. Избегайте дублирования вкладок в QTabWidget
- 5. Как предотвратить удержание кнопок вкладок в QTabWidget
- 6. Как сделать панель вкладок в jQuery mobile?
- 7. Как сделать нижнюю панель вкладок в андроиде?
- 8. Как сделать прокручиваемую панель вкладок в IPhone
- 9. Как отключить одну вкладку в QTabWidget?
- 10. Как добавить панель вкладок
- 11. Динамически менять вид вкладок в QTabWidget (PyQt)
- 12. Как сделать панель вкладок красной, используя Javascript?
- 13. Как сделать одну панель в JFrame
- 14. Как настроить панель вкладок Qt на OSX
- 15. Как сделать QTabWidget без страниц
- 16. Как сделать QTabWidget к закрепляемому
- 17. iPhone: ViewController как панель вкладок
- 18. Панель вкладок + панель навигации
- 19. Скрыть панель вкладок в приложении панели вкладок
- 20. сделать одну панель заготовки в ggplot2
- 21. Панель вкладок в gwt-ext
- 22. Как сделать вкладки в QTabWidget Stretch, чтобы избежать прокрутки
- 23. Как сделать две строки вкладок в Qt
- 24. Панель вкладок в панели
- 25. Как сделать панель вкладок поверх содержимого в Swift?
- 26. QTabWidget. Как переместить одну вкладку в нужное положение?
- 27. Как настроить панель вкладок UITabBarController?
- 28. Панель пользовательских вкладок iOS
- 29. Панель вкладок в навигационной панели
- 30. Добавление панели в панель вкладок
Вы хотите язычки посмотреть, как это? '/ ---- \/------------------- \/---- \' –
|/'' '' '' 'TAB1' '' ' '' '\ /' '' '' '' TAB2 '' '' '' '\ /' '' '' '' '' '' '' '' '' '' '' '' tAB3 '' '' '' '' '' '' '' '' '' '' '' '\ /' '' '' '' tab4 '' '' '' '\ | Более или менее что-то вроде этого;) И ширина этой третьей вкладки неизвестна, она должна полностью расширяться и переместить эту последнюю вкладку вправо. – Devlige