【发布时间】:2017-09-21 09:54:48
【问题描述】:
我使用 Python 和 PyQt5 编程遵循 GUI。
现在我想自定义程序,这样我就可以通过单击右表边框(浅蓝色线)并移动鼠标(见图中的箭头)来更改左表宽度。在改变表格宽度的同时,右侧也应该改变。
我希望我的描述清楚。
图形界面输出:
GUI布局部分代码:
# table for writeOutput
self.tableWidget = QTableWidget(0, 2)
self.tableWidget.verticalHeader().setVisible(False);
self.tableWidget.setMinimumHeight(170)
self.tableWidget.setMinimumWidth(600)
# generate chart
self.main_widget = QWidget(self)
self.chart = QtBarChart(self.main_widget)
# Layout for input elements
inputLayout = QHBoxLayout()
inputLayout.addWidget(self.typeCBox)
inputLayout.addWidget(self.yearSpinBox)
inputLayout.addWidget(self.button)
inputLayout.addStretch(1)
# right inner layout for output elements e.g chart
innerOutLayout = QVBoxLayout()
innerOutLayout.addWidget(self.chart)
innerOutLayout.addWidget(self.outEdit)
# outer layout for output elements e.g. table
outLayout = QHBoxLayout()
outLayout.addWidget(self.tableWidget)
outLayout.addLayout(innerOutLayout)
# top layout who groups all elements together
topLevelLayout = QVBoxLayout()
topLevelLayout.addLayout(inputLayout)
topLevelLayout.addLayout(outLayout)
我需要对哪些功能或代码进行更改才能实现我的目标?
--> QSplitter 是一个很好的提示
当我尝试实现 QSplitter 并按如下方式更改程序时,我收到错误消息。
# Layout for input elements
inputLayout = QHBoxLayout()
inputLayout.addWidget(self.typeCBox)
inputLayout.addWidget(self.yearSpinBox)
inputLayout.addWidget(self.button)
inputLayout.addStretch(1)
# right inner layout for output elements e.g chart
innerOutLayout = QVBoxLayout()
innerOutLayout.addWidget(self.chart)
innerOutLayout.addWidget(self.outEdit)
# create Splitter between Table and innerOutLayout() --> (Chart and outEdit)
tableSplitter = QSplitter(Qt.Horizontal)
tableSplitter.addWidget(self.tableWidget)
tableSplitter.addLayout(innerOutWidget)
# outer layout for output elements e.g. table
outLayout = QHBoxLayout()
outLayout.addWidget(self.tableWidget)
outLayout.addWidget(tableSplitter)
# top layout who groups all elements together
topLevelLayout = QVBoxLayout()
topLevelLayout.addLayout(inputLayout)
topLevelLayout.addLayout(outLayout)
当我运行程序时出现以下错误:
tableSplitter.addLayout(innerOutWidget)
AttributeError: 'QSplitter' object has no attribute 'addLayout'
我该如何解决这个错误以及如何更改代码才能工作。
【问题讨论】:
-
请你解释得更好
-
@rbaleksander QSplitter 听起来不错,但我不知道它是如何工作的。我会发布我的结果。
标签: python pyqt pyqt5 qtablewidget qlayout