在 PyQt5 中,右小部件比其他小部件短
Posted
技术标签:
【中文标题】在 PyQt5 中,右小部件比其他小部件短【英文标题】:In PyQt5 right widget is shorter than the rest 【发布时间】:2019-07-24 14:05:35 【问题描述】:我正在使用 PyQt5 在 Python 中使用 GUI 做一个小型应用程序,但由于某种原因,我的右侧小部件似乎比其他小部件短
如您所见,QGridLayout 有点短。我尝试了其他布局,但都是一样的。这真的让我很困扰。有人知道原因吗?
这是我的代码。为了方便起见,我发布了简化版本,但它说明了我的问题。
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self._x = 300
self._y = 300
self._width = 1000
self._height = 600
self.init_ui()
def init_ui(self):
self.init_main_layout()
self.setGeometry(self._x, self._y, self._width, self._height)
self.show()
def init_main_layout(self):
# central widget
self.main_splitter = QSplitter(Qt.Horizontal)
# canvas and tabwidget in the middle
figure = plt.figure()
canvas = FigureCanvas(figure)
plt_toolbar = NavigationToolbar(canvas, self)
mid_splitter = QSplitter(Qt.Vertical)
layout = QVBoxLayout()
layout.addWidget(plt_toolbar)
layout.addWidget(canvas)
pl = QWidget()
pl.setLayout(layout)
mid_splitter.addWidget(pl)
tabs = QTabWidget()
tab1 = QWidget()
formGroupBox = QGroupBox("")
layout = QFormLayout()
formGroupBox.setLayout(layout)
hor_layout = QHBoxLayout()
hor_layout.addWidget(formGroupBox)
tab1.setLayout(hor_layout)
mid_splitter.addWidget(tabs)
# the right one
right_part = QGridLayout()
right_part.addWidget(QLabel('Text'), 1, 0)
right_part.addWidget(QComboBox(), 1, 1, 1, 5)
right_part.addWidget(QPushButton(), 1, 6)
tree = QFileSystemModel()
tree_widget = QTreeView()
tree_widget.setModel(tree)
right_part.addWidget(tree_widget, 2, 0, -1, -1)
# TODO right part is shorter than the rest
right_part_widget = QWidget()
right_part_widget.setLayout(right_part)
self.main_splitter.addWidget(QListWidget())
self.main_splitter.addWidget(mid_splitter)
self.main_splitter.addWidget(right_part_widget)
self.main_splitter.setSizes([self._width * 0.2, self._width * 0.4, self._width * 0.4])
self.setCentralWidget(self.main_splitter)
self.statusBar().showMessage('Test')
def main(args):
app = QtWidgets.QApplication(args)
main_window = MainWindow()
sys.exit(app.exec_())
if __name__ == '__main__':
import sys
main(sys.argv)
【问题讨论】:
你能解释一下吗?,我看到左侧小部件(QListWidget)小于中间小部件或右侧小部件,并且中间和右侧小部件大小相同。 你可以试试right_part.setContentsMargins(0,0,0,0)
@eyllanesc 看到蓝线,Qtreeview 未与其余小部件对齐
【参考方案1】:
right_part.setContentsMargins(0,0,0,0) 按照 Heike 的建议为我工作
【讨论】:
以上是关于在 PyQt5 中,右小部件比其他小部件短的主要内容,如果未能解决你的问题,请参考以下文章