Как убрать рамки у вкладок в pyqt5?

Пользователь

от sherwood_littel , в категории: Python , 9 месяцев назад

Как убрать рамки у вкладок в pyqt5?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

Пользователь

от jeromy_ruecker , 9 месяцев назад

@sherwood_littel 

Чтобы убрать рамки у вкладок в PyQt5, вы можете использовать метод setTabBar у объекта QTabWidget, чтобы установить собственный виджет в качестве панели вкладок. Затем установите стиль вашего виджета панели вкладок на "QTabBar::tab {border: none;}". Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from PyQt5.QtWidgets import QApplication, QTabWidget, QTabBar, QWidget, QLabel, QVBoxLayout
from PyQt5.QtCore import Qt
import sys


class CustomTabBar(QTabBar):
    def paintEvent(self, event):
        option = self.tabSizeHint(0)

        painter = QPainter(self)
        painter.setPen(self.color)
        painter.setBrush(Qt.SolidPattern)
        
        # Цикл для отрисовки панелей вкладок
        for index in range(self.count()):
            # Получаем границы панели вкладки
            rect = self.tabRect(index)
            # Рисуем панели вкладок
            painter.drawRect(rect)


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setGeometry(100, 100, 300, 200)

        # Создаем QTabWidget
        tab_widget = QTabWidget(self)

        # Создаем виджеты-вкладки
        tab1 = QWidget()
        label1 = QLabel("Tab 1")
        layout1 = QVBoxLayout(tab1)
        layout1.addWidget(label1)

        tab2 = QWidget()
        label2 = QLabel("Tab 2")
        layout2 = QVBoxLayout(tab2)
        layout2.addWidget(label2)

        # Устанавливаем виджеты-вкладки в QTabWidget
        tab_widget.addTab(tab1, "Tab 1")
        tab_widget.addTab(tab2, "Tab 2")

        # Устанавливаем стиль панели вкладок
        tab_bar = CustomTabBar()
        tab_widget.setTabBar(tab_bar)

        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    sys.exit(app.exec_())


В этом примере мы создаем собственный класс CustomTabBar, который наследуется от QTabBar и переопределяет метод paintEvent. В методе paintEvent мы установили цвет и стиль для простоты, вы можете настроить его под ваши потребности.


Обратите внимание, что в коде были созданы две вкладки tab1 и tab2, каждая содержит виджет QLabel. Эти вкладки затем добавлены в QTabWidget с использованием метода addTab.


На выходе у вас должны получиться вкладки без рамок.

Пользователь

от richard , 21 день назад

@sherwood_littel 

Учтите, что переопределение метода paintEvent для панели вкладок может изменить ее внешний вид и поведение. Будьте внимательны при настройке стилей и визуального отображения. Возможно, вам придется дополнительно настроить стили для других элементов вкладок (например, выделение текущей вкладки, подсказки при наведении и т. д.), чтобы обеспечить правильное функционирование вашего приложения.

Пользователь

от magdalen_kub , 17 дней назад

@sherwood_littel 

Это правильное замечание. Переопределение метода paintEvent для панели вкладок может привести к изменению ее внешнего вида и возможностей, что может потребовать дополнительной настройки и обработки стилей для обеспечения правильного функционирования приложения. При использовании данного подхода, рекомендуется тщательно тестировать приложение и удостовериться, что все элементы интерфейса выглядят и работают корректно.