<p>接受布局的<code>.setAlignment</code>方法用于对齐<em>子布局</em>,即使用<code>.addLayout</code>添加到父布局的子布局</p>
<p>下面是一个基于您的代码的小演示</p>
<pre class="lang-py prettyprint-override"><code>import sys
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QTableWidget, QPushButton
class Window(QtWidgets.QMainWindow):
def __init__(self, method=0):
super(Window, self).__init__()
mainWidget = QWidget()
self.mainLayout = QHBoxLayout(mainWidget)
table = QTableWidget(10, 3)
self.button1 = QPushButton("Play")
self.button2 = QPushButton("Cancel")
self.subLayout = QHBoxLayout()
buttona1 = QPushButton("1")
buttona1.clicked.connect(self.clicked1)
buttona2 = QPushButton("2")
buttona2.clicked.connect(self.clicked2)
buttona3 = QPushButton("3")
buttona3.clicked.connect(self.clicked3)
buttona4 = QPushButton("4")
buttona4.clicked.connect(self.clicked4)
self.subLayout.addWidget(buttona1)
self.subLayout.addWidget(buttona2)
self.subLayout.addWidget(buttona3)
self.subLayout.addWidget(buttona4)
self.mainLayout.addWidget(table)
self.mainLayout.addWidget(self.button1)
self.mainLayout.addWidget(self.button2)
self.mainLayout.addLayout(self.subLayout)
self.setCentralWidget(mainWidget)
self.show()
def clicked1(self):
rtnValue = self.mainLayout.setAlignment(self.button1, Qt.AlignTop)
print("Method 1:", rtnValue)
def clicked2(self):
rtnValue = self.mainLayout.setAlignment(self.mainLayout, Qt.AlignTop)
print("Method 2:", rtnValue)
def clicked3(self):
rtnValue = self.mainLayout.setAlignment(Qt.AlignTop)
print("Method 3:", rtnValue)
def clicked4(self):
rtnValue = self.mainLayout.setAlignment(self.subLayout, Qt.AlignTop)
print("Method 4:", rtnValue)
if __name__ == "__main__":
print("python QLayoutAlignment.py[ <MethodToUse=1>")
app = QApplication(sys.argv)
method = 1 if (len(sys.argv) < 2) else int(sys.argv[1])
GUI = Window(method)
sys.exit(app.exec_())
</code></pre>
<p>您会注意到,如果触发此<code>self.mainLayout.setAlignment(self.mainLayout, Qt.AlignTop)</code>,返回值为<code>False</code>。此<a href="https://doc.qt.io/qt-5/qlayout.html#setAlignment-1" rel="nofollow noreferrer">is telling you</a>表明在当前布局中找不到正在对齐的布局<em>。由于您正在<code>mainLayout</code>上调用<code>.setAlignment</code>,因此您影响的布局必须在该布局中</p>
<p>在第4个方法中,我添加了一个子布局,正如您所看到的(<code>rtnValue = self.mainLayout.setAlignment(self.subLayout, Qt.AlignTop)</code>)按预期工作并返回<code>True</code></p>