我需要设置一个QFrame以正确匹配QTableWidget的宽度。 我曾尝试设置不同的规模政策,但没有做任何工作,所以我没主意了。
这是我的代码:
from PySide2 import QtWidgets
from PySide2.QtWidgets import QTableWidget
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.showMaximized()
# Create a table
table = QTableWidget(1, 3)
table.setHorizontalHeaderLabels(['Column A', 'Column B', 'Column C'])
# Create a frame
myFrame = QtWidgets.QFrame(self)
myFrame.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Ignored))
myFrame.setFrameShape(QtWidgets.QFrame.Box)
# Create frame's layout
frameLayout = QtWidgets.QVBoxLayout()
frameLayout.addWidget(table)
myFrame.setLayout(frameLayout)
# Create central widget
centralWidget = QtWidgets.QWidget()
# Create central widget's layout
layout = QtWidgets.QHBoxLayout()
layout.addWidget(myFrame)
centralWidget.setLayout(layout)
# Set central widget
self.setCentralWidget(centralWidget)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
P.S .:我知道这里centralWidget
不是必需的,但是这段代码只是我整个项目的一部分,因此我必须保留它,因为没有它的解决方案可能会有所不同。
答案 0 :(得分:0)
sizeAdjustPolicy:SizeAdjustPolicy
此属性保留用于描述视口大小更改时滚动区域大小如何更改的策略。
默认策略是QAbstractScrollArea :: AdjustIgnored。更改此属性实际上可能会调整滚动区域的大小。
table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents) # <---
#from PySide2 import QtWidgets
#from PySide2.QtWidgets import QTableWidget
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QTableWidget
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.showMaximized()
# Create a table
table = QTableWidget(1, 3)
table.setHorizontalHeaderLabels(['Column A', 'Column B', 'Column C'])
table.setSizeAdjustPolicy(QtWidgets.QAbstractScrollArea.AdjustToContents) # <---
# Create a frame
myFrame = QtWidgets.QFrame(self)
myFrame.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Ignored))
myFrame.setFrameShape(QtWidgets.QFrame.Box)
# Create frame's layout
frameLayout = QtWidgets.QVBoxLayout()
frameLayout.addWidget(table)
myFrame.setLayout(frameLayout)
# Create central widget
centralWidget = QtWidgets.QWidget()
# Create central widget's layout
layout = QtWidgets.QHBoxLayout()
layout.addWidget(myFrame)
centralWidget.setLayout(layout)
# Set central widget
self.setCentralWidget(centralWidget)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())