我QTableView以表格的形式添加了总行数self.inner_table,它们位于主表的正下方。如果行数太多导致该表无法在屏幕上显示,则向下滚动时会出现“总计”行。但是,问题是,当您向上滚动时,“总计”行不会消失,就像表格本身中的任何其他行一样。为了更好地理解,请应用代码。
我还需要将小部件集中在 CustomTableView 内部,而无需将 main_window 参数传递给它。
请修复代码,以便 CustomTableView 在创建“Total”行方面能够自给自足:这样它就不需要将 main_window 传递给它,也不需要 ContentWidget 类
我附上了代码:
import sys
from PyQt5.QtWidgets import QTableView, QMainWindow, \
QApplication, QAbstractItemView, QVBoxLayout, QWidget, \
QHeaderView, QScrollArea, QHBoxLayout
from PyQt5.QtGui import QStandardItem, QStandardItemModel
from PyQt5.QtCore import Qt, QSize
class ContentWidget(QWidget):
def sizeHint(self): # <--- sizeHint
return QSize(1500, 1000)
class CustomTableView(QTableView):
def __init__(self, main_window):
super().__init__()
self.setModel(QStandardItemModel(55, 10))
self.horizontalHeader().setVisible(False)
self.verticalHeader().setVisible(False)
self.setVerticalScrollBarPolicy(
Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
self.horizontalHeader().setSectionResizeMode(
QHeaderView.ResizeMode.Stretch)
self.setSelectionMode(
QAbstractItemView.SelectionMode.SingleSelection)
self.scrollArea = QScrollArea()
self.content_widget = ContentWidget()
self.scrollArea.setWidget(self.content_widget)
self.add_total_row()
self.setup_layout()
main_window.setCentralWidget(self.scrollArea)
def add_total_row(self):
self.inner_model = QStandardItemModel(2, 10)
self.inner_table = QTableView(self)
self.inner_table.setMaximumHeight(82)
self.inner_table.setModel(self.inner_model)
self.inner_table.horizontalHeader().setVisible(False)
self.inner_table.verticalHeader().setVisible(False)
self.inner_table.setVerticalScrollBarPolicy(
Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
self.inner_table.horizontalHeader().setSectionResizeMode(
QHeaderView.ResizeMode.Stretch)
self.inner_table.setEditTriggers(
QAbstractItemView.EditTrigger.NoEditTriggers)
self.inner_table.setSelectionMode(
QAbstractItemView.SelectionMode.NoSelection)
def setup_layout(self):
self.layout = QVBoxLayout(self.content_widget)
self.layout.setSpacing(0)
self.layout.addWidget(self)
self.layout.addWidget(
self.inner_table)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.table = CustomTableView(self) # Pass the MainWindow instance as parent
self.resize(1100, 600)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
