Как показать все столбцы QTableView в макете в центральном виджете QMainWindow - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть QTableView в QVBoxLayout в QWidget, который сам находится в QHBoxLayout и QVBoxLayout в QWidget, который установлен как центральный виджет QMainWindow.

QTableView имеет фиксированное количество столбцов и любое количество строк.

Когда первое окно главного окна открывается, я хочу, чтобы QTableView первоначально отображал все столбцы. Однако когда открывается главное окно, QTableView показывает только первые несколько столбцов данных, а для остальных требуется горизонтальная полоса прокрутки. Мне бы хотелось, чтобы все столбцы были видны в начале, поэтому горизонтальная полоса прокрутки не нужна, если пользователь не изменяет размер разбиения.

Приведенный ниже код является наиболее близким к тому, что я хочу получить. За исключением того, что мне не нужно исправлять таблицу. И способ, которым он сейчас открывается, включает горизонтальную полосу прокрутки с перемещением на одну позицию.

Я думаю, что без вызова фиксированной ширины окно устанавливает все три виджета секций равной ширине

Edit: похоже, что если я добавлю буфер 4 в view_width, я получу именно ту ширину, которая мне нужна, без появления горизонтальной полосы прокрутки.

Если я делаю self.view.setFixedWidth (view_width), где view_width = hwidth + swidth + 4, он показывает все столбцы табличного представления.

Однако, если я использую тот же view_width в self.view.resize (view_width, self.view.height ()) я могу видеть из self.view.width (), что представление теперь имеет правильную ширину, но QMainwindow по-прежнему открывается с таблицей, показывающей только первое несколько столбцов с горизонтальной полосой прокрутки.

структура кода:

QtWidgets.QMainWindow.__init__(self, parent, windowTitle="Selection Window")

label_one = QtWidgets.QLabel('Section One')
self.list_one = QtWidgets.QListWidget()
self.button_one = QtWidgets.QPushButton("Button One")
layout_one = QtWidgets.QVBoxLayout()
layout_one.addWidget(label_one)
layout_one.addWidget(self.list_one)
layout_one.addWidget(self.button_one)
section_one = QtWidgets.QWidget()
section_one.setLayout(layout_one)

label_two = QtWidgets.QLabel('Section Two')
self.list_two = QtWidgets.QListWidget()
self.button_two = QtWidgets.QPushButton("Button Two")
layout_two = QtWidgets.QVBoxLayout()
layout_two.addWidget(label_two)
layout_two.addWidget(self.list_two)
layout_two.addWidget(self.button_two)
section_two = QtWidgets.QWidget()
section_two.setLayout(layout_two)

label_three = QtWidgets.QLabel('Section Three')
layout_three = QtWidgets.QVBoxLayout()
layout_three.addWidget(label_three)

self.view = QtWidgets.QTableView(self)
self.model = QtCore.QAbstractTableModel(numpy_array) # x rows by 4 cols array
self.view.setModel(self.model)
self.view.resizeColumnsToContents()
hwidth = self.view.horizontalHeader().length()
swidth = self.view.verticalScrollBar().height()
view_width = hwidth + swidth
self.view.setFixedWidth(view_width)

layout_three.addWidget(self.view)
section_three = QtWidgets.QWidget()
section_three.setLayout(layout_three)

split = QtWidgets.QSplitter(QtCore.Qt.Horizontal)
split.addWidget(section_one)
split.addWidget(section_two)
split.addWidget(section_three)
run_layout = QtWidgets.QVBoxLayout()
run_layout.addWidget(split)
self.run_button = QtWidgets.QPushButton("Run")
run_layout.addWidget(self.run_button)
run_widget = QtWidgets.QWidget()
run_widget.setLayout(run_layout)
self.setCentralWidget(run_widget)

self.show()
...