Ich versuche, etwas wie die Registerkarten aus einem Browser zu erreichen. Alle Registerkarten müssen die gleiche Breite haben und auch erweiterbar sein. Wenn sie zahlreich sind, müssen sie angepasst und angepasst werden (genau wie Chrome oder Firefox).PyQt5 - QTabWidget - Machen Sie jede Registerkarte die gleiche Breite und auch erweiterbar
Das Problem:
Wenn ein Reiter mehr Text hat dann die anderen Registerkarten, wird der Registerkarte größer sein. Wie so:
Und wenn ich viele Tabs laichen, es wird immer größer sein, dann die anderen.
Was habe ich versucht:
Ich habe versucht, ein Stylesheet hinzuzufügen, um die Breite zu ändern, aber wenn ich die Breite auf eine bestimmte Nummer zu ändern, werden die Registerkarten sein statisch und nicht die Größe basierend auf der Anzahl der Registerkarten, um das Fenster anzupassen. Ich habe auch versucht, mit Min/Max-Breite zu zwicken, mit der QSizePolicy, aber keine Chance.
Ich habe die Dokumentation von QT5 für C++ angeschaut und viel gegoogelt, aber kein Ort spricht über diese oder irgendeine Option darüber.
Vielleicht muss ich einige Berechnungen in Python und ein Stylesheet als Argument hinzufügen, aber nicht sicher, wie. Vielleicht gibt es eine einfache Option, die ich vermisse.
Mein Code: (Dies ist der vollständige Code, so können Sie copy-paste und testen, wenn Sie benötigen)
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QTabWidget,\
QVBoxLayout, QHBoxLayout, QSizePolicy
class Container(QWidget):
def __init__(self, text):
super(Container, self).__init__()
self.hbox = QHBoxLayout()
self.hbox.setSpacing(0)
self.hbox.setContentsMargins(0, 0, 0, 0)
self.setLayout(self.hbox)
self.button = QPushButton(text)
self.hbox.addWidget(self.button)
class CustomWidget (QWidget):
def __init__(self, parent=None):
super(CustomWidget, self).__init__(parent)
self.button = QPushButton("Add tab")
self.button.clicked.connect(self.buttonClicked)
self.tabs = QTabWidget()
self.tabs.setTabsClosable(True)
self.tabs.setMovable(True)
self.tabs.setDocumentMode(True)
self.tabs.setElideMode(Qt.ElideRight)
self.tabs.setUsesScrollButtons(True)
self.tabs.tabCloseRequested.connect(self.closeTab)
self.tabs.addTab(Container("Very big titleeeeeeeeee"),
"Very big titleeeeeeeeeeee")
self.tabs.addTab(Container("smalltext"), "smalltext")
self.tabs.addTab(Container("smalltext2"), "smalltext2")
vbox = QVBoxLayout()
vbox.addWidget(self.button)
vbox.addWidget(self.tabs)
self.setLayout(vbox)
self.resize(600, 600)
def closeTab(self, index):
tab = self.tabs.widget(index)
tab.deleteLater()
self.tabs.removeTab(index)
def buttonClicked(self):
self.tabs.addTab(Container("smalltext2"), "smalltext2")
app = QApplication([])
app.setStyleSheet("""
QTabBar::tab {
background: lightgray;
color: black;
border: 0;
/* min-width: 100px; */
max-width: 200px;
/* width: 150px; */
height: 20px;
padding: 5px;
}
QTabBar::tab:selected {
background: gray;
color: white;
}
""")
widget = CustomWidget()
widget.show()
sys.exit(app.exec_())
Weitere Informationen:
Betriebssystem: Windows 10
Python Version: 3.6.2
PyQt Version: 5.9.1
Das ist genau das finden, was ich wollte!Ich habe 'tabSizeHint' in der Dokumentation gesehen, aber ich wusste nicht genau, wie ich es benutzen soll, jetzt weiß ich es. Vielen Dank! –