PyQt5 - "setContentsMargins" 方法在 Tab 小部件中无法正常工作(有默认的 9px 边距)
PyQt5 - The "setContentsMargins" method doesn't work properly in a Tab widget (there is a default 9px margin)
我正在使用 PyQt5 编写 GUI,我意识到 setContentsMargins
方法在 Tab 小部件中无法正常工作。在它的内部,每边总是有 9px 的边距(见附件截图):
这是一个示例(在 Tab1 中,我使用 QVBoxLayout 放置了一个 TreeView 小部件):
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QTabWidget, QVBoxLayout, QTreeView
class App(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'PyQt5 tabs'
self.left = 0
self.top = 0
self.width = 300
self.height = 200
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.table_widget = MyTableWidget(self)
self.setCentralWidget(self.table_widget)
self.show()
class MyTableWidget(QWidget):
def __init__(self, parent):
super(QWidget, self).__init__(parent)
self.layout = QVBoxLayout(self)
self.tabs = QTabWidget()
self.tab1 = QWidget()
self.tab2 = QWidget()
self.tabs.resize(300,200)
self.tabs.addTab(self.tab1,"Tab 1")
self.tabs.addTab(self.tab2,"Tab 2")
self.tab1.layout = QVBoxLayout(self)
self.TreeView=QTreeView()
self.tab1.layout.addWidget(self.TreeView)
self.tab1.setLayout(self.tab1.layout)
self.tab1.setStyleSheet("background-color: red")
self.tab1.setContentsMargins(-4, -4, -4, -4) # this instruction doesn't work! there is always a default margin (9px for each side)!
self.layout.addWidget(self.tabs)
self.setLayout(self.layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
如您所见,如果我使用指令self.tab1.setContentsMargins(10, 10, 10, 10)
,所有边距将为19px (9+10),但如果想要5px 怎么办?指令 self.tab1.setContentsMargins(-4, -4, -4, -4)
无效。
额外的边距来自小部件的布局。将其设置为零或任何其他值:
self.tab1.layout.setContentsMargins(0, 0, 0, 0)
我正在使用 PyQt5 编写 GUI,我意识到 setContentsMargins
方法在 Tab 小部件中无法正常工作。在它的内部,每边总是有 9px 的边距(见附件截图):
这是一个示例(在 Tab1 中,我使用 QVBoxLayout 放置了一个 TreeView 小部件):
import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QTabWidget, QVBoxLayout, QTreeView
class App(QMainWindow):
def __init__(self):
super().__init__()
self.title = 'PyQt5 tabs'
self.left = 0
self.top = 0
self.width = 300
self.height = 200
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.table_widget = MyTableWidget(self)
self.setCentralWidget(self.table_widget)
self.show()
class MyTableWidget(QWidget):
def __init__(self, parent):
super(QWidget, self).__init__(parent)
self.layout = QVBoxLayout(self)
self.tabs = QTabWidget()
self.tab1 = QWidget()
self.tab2 = QWidget()
self.tabs.resize(300,200)
self.tabs.addTab(self.tab1,"Tab 1")
self.tabs.addTab(self.tab2,"Tab 2")
self.tab1.layout = QVBoxLayout(self)
self.TreeView=QTreeView()
self.tab1.layout.addWidget(self.TreeView)
self.tab1.setLayout(self.tab1.layout)
self.tab1.setStyleSheet("background-color: red")
self.tab1.setContentsMargins(-4, -4, -4, -4) # this instruction doesn't work! there is always a default margin (9px for each side)!
self.layout.addWidget(self.tabs)
self.setLayout(self.layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
如您所见,如果我使用指令self.tab1.setContentsMargins(10, 10, 10, 10)
,所有边距将为19px (9+10),但如果想要5px 怎么办?指令 self.tab1.setContentsMargins(-4, -4, -4, -4)
无效。
额外的边距来自小部件的布局。将其设置为零或任何其他值:
self.tab1.layout.setContentsMargins(0, 0, 0, 0)