กำหนดเองทรัพย์สินบนแบบส่วนบุคคล QTabBar รายการสำหรับรูปแบบสไตล์ชีต

0

คำถาม

ฉันมี QTabWidget และฉันอยากให้เป็นทรัพย์สินบนแท็บปัจเจกบุคคลที่ถือว่าแท็บเป็นดื้อดึงมาตลอดหรือไม่(คล้ายกับแท็บใน VSCode อยู่ที่ไหนถ้าคุณไม่ดับเบิลคลิกเป็นแฟ้มมันไม่ยอมยังอยู่ในตัวแก้ไขข้อความ)

ฉันมีดังนั้นถึงตอนนี้ ฉันต้องการ TabItem's กัน _persistent=False ต้องเป็นตัวเอียงเป็นและคนอื่นเป็นธรรมดาแบบอักษรได้

from PySide2 import QtWidgets, QtCore, QtGui


class TabItem(QtWidgets.QWidget):
    def __init__(self, persistent=False):
        super(TabItem, self).__init__()
        self._persistent = persistent
        self.setProperty('persistent', '0' if not persistent else '1')


class TabWidget(QtWidgets.QTabWidget):
    def __init__(self):
        super(TabWidget, self).__init__()

        item1 = TabItem(persistent=False)
        item2 = TabItem(persistent=True)

        self.addTab(item1, 'FirstItem')
        self.addTab(item2, 'SecondItem')

        self.setStyleSheet("""
            QTabBar::tab{
                font: normal;
            }
            QTabBar::tab[persistent="0"]{
                font: italic;
            }
        """)


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    win = TabWidget()
    win.show()
    sys.exit(app.exec_())


pyqt pyside2 python qtabwidget
2021-11-21 07:09:49
1

คำตอบที่ดีที่สุด

0

รูปแบบแผ่นงานชั่วโมง selectors ไม่สนับสนุนทรัพย์สิน selectors เพราะคุณสมบัติของถูกเตรียมไว้สำหรับ วิดเจ็ต,ถ้าเทียบกับองชั่วโมง selectors เป็น ส่วนประกอบ ของวิดเจ็ต.

ทางเดียวที่จะประสบความสำเร็จในส่วนนั้น(อีกอย่างเลยที่กำลังยกเลิกระบบ paintEvent() ขอ QTabBar)คือผ่าน QProxyStyleและโดย implementing drawControl.

เคล็ดลับคือต้องเจอซึ่งแท็บปัจจุบันตัวเลือก rect นเป็นของและในที่สุดตรวจดูทรัพย์สินของแท็บเพื่อใช้ตั้งค่าแบบอักษรได้

class TabStyle(QtWidgets.QProxyStyle):
    def drawControl(self, ctl, opt, qp, widget=None):
        if ctl == self.CE_TabBarTabLabel:
            for i in range(widget.count()):
                tabRect = widget.tabRect(i)
                if tabRect == opt.rect:
                    tabWidget = widget.parent()
                    try:
                        if tabWidget.widget(i)._persistent:
                            qp.save()
                            font = qp.font()
                            font.setItalic(True)
                            qp.setFont(font)
                            super().drawControl(ctl, opt, qp, widget)
                            qp.restore()
                            return
                    except:
                        pass
        super().drawControl(ctl, opt, qp, widget)

# ...
app = QtWidgets.QApplication(sys.argv)
app.setStyle(TabStyle())
2021-11-21 09:00:02

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่