我试图在QScrollArea(只有一个小部件)中放置一个QtableWidget,以便能够垂直和水平滚动它(我有理由不在Qtablewidget中使用滚动条)。但是,即使tableWidget无法放入窗口内也没有滚动条出现,所以我设置了QtCore.Qt.ScrollBarAlwaysOn
,现在它们就在那里,但它们是灰色的,但我仍然无法滚动。
这是我的代码:
class Table(QtGui.QDialog):
def __init__(self, parent=None):
super(Table, self).__init__(parent)
layout = QtGui.QGridLayout()
tableWidget = QtGui.QTableWidget()
#.... set up and populate tableWidget here 1000rows-10col ....
myScrollArea = QtGui.QScrollArea()
myScrollArea.setWidgetResizable(True)
myScrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
myScrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
myScrollArea.setWidget(tableWidget)
layout.addWidget(myScrollArea)
self.setLayout(layout)
self.setMinimumSize(1000, 700)
我是PyQt的傻瓜,我不太了解布局和容器,所以我无法弄清楚我做错了什么。请指出我正确的方向,帮助将不胜感激。
答案 0 :(得分:1)
默认情况下,QtScrollBar具有水平和垂直scrollBar。 tablewidget默认具有水平和垂直scrollBar。所以我已经取消了。 只是使用resize事件我调整了tablewidget的宽度和高度。
class MainWin(QtGui.QDialog):
def __init__(self,parent=None):
QtGui.QDialog.__init__(self,parent)
self.table =QtGui.QTableWidget(100,4)
self.table.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.table.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
lay = QtGui.QGridLayout()
self.sc = QtGui.QScrollArea()
self.sc.setWidget(self.table)
lay.addWidget(self.sc,0,0)
self.setLayout(lay)
def resizeEvent(self,event):
self.table.resize(self.sc.width(),self.sc.height())
def main():
app=QtGui.QApplication(sys.argv)
win=MainWin()
win.show()
sys.exit(app.exec_())
main()
答案 1 :(得分:0)
我终于明白了:
我已经使用resizeColumnsToContents()
和resizeRowsToContents()
来使表格的列/行调整为数据 - 文本,但这与表格本身不相同 - 表格高度和宽度保持不变相同。因此,为了使表格在行和列周围大小,我使用了这个:
self.table.resizeRowsToContents()
self.table.resizeColumnsToContents()
self.table.setFixedSize(self.table.horizontalHeader().length(), self.table.verticalHeader().length())
现在我可以使用QScrollArea的滚动条滚动整个表格。