为 QTableWidget 的列分配不同的宽度

问题描述

我正在 QT Designer 在 pyqt5 中开发一个小界面,其中包括一个 QTableWidget 但我想分配不同的列的宽度,我找到了谈论相同的主题,但我不知道在哪里插入他们提供的代码,我不知道是不是因为版本,我很新在 QT 设计器中.

I'm developing a small interface in pyqt5 from QT Designer, this includes a QTableWidget but I want to assign different widths to the columns, I have found topics that talk about the same but I don't know exactly where to insert the code they provide, I don't know if it's because of the version, I'm quite new in QT Designer.

我会留下我提到的问题.

PyQt:如何设置不同的标题大小对于单个标题?

PyQt 设置列宽

我的文件结构如下:

app.py:存储应用程序的功能

SGS.py: .ui文件转换成.py

SGS.ui

我将生成表头的 SGS.py 部分保留,因为它的价值.

I leave the SGS.py part where the table headers are generated for what it's worth.

item = self.TableDocs.horizontalHeaderItem(0)
item.setText(_translate("MainWindow", "IDsystem"))
item = self.TableDocs.horizontalHeaderItem(2)
item.setText(_translate("MainWindow", "IDpeople"))
item = self.TableDocs.horizontalHeaderItem(3)
item.setText(_translate("MainWindow", "Work"))
item = self.TableDocs.horizontalHeaderItem(4)
item.setText(_translate("MainWindow", "Hours"))

我也留下了填写表格的代码

result = Cur.execute("SELECT idsystem,IDpeople,work,hours FROM workers")
self.TableDocs.setRowCount(0)

for row_number, row_data in enumerate(result):
    self.TableDocs.insertRow(row_number)
    for column_number, data in enumerate(row_data):
        self.TableDocs.setItem(row_number, column_number, QtWidgets.QTableWidgetItem(str(data)))


解决方案

从 ui 生成的 python 文件永远不要被编辑.将其视为用于创建"接口的资源文件(如图像或 json 文件).您无法通过 Designer 完成的所有操作都必须在您的应用程序代码文件中实现.

The python file generated from the ui should never be edited. Consider it as a resource file (like an image or a json file) that is used to "create" the interface. Everything that you can't do from Designer you will have to implement in your application code files.

每当模型应用于项目视图时,您都可以设置大小(或调整大小模式,例如自动调整大小,或拉伸"到可用宽度).由于您使用的是 QTableWidget(它具有其内部私有模型),因此您可以在界面中创建小部件后立即执行此操作,即在 setupUi (或 loadUi) 如果使用设计器文件.

You can set the size (or resize mode, for example automatic resizing, or the "stretching" to the available width) whenever a model is applied to the item view. Since you're using a QTableWidget (which has its internal private model), you can do that as soon as the widget is created in the interface, which is right after setupUi (or loadUi) if using a designer file.

为了设置部分的大小和行为,您需要访问表格标题:列的水平标题,行的垂直标题.

In order to set the size and behavior of the sections, you need to access the table headers: the horizontal one for the columns, the vertical for the rows.

class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setupUi(self)

        horizontalHeader = self.TableDocs.horizontalHeader()
        # resize the first column to 100 pixels
        horizontalHeader.resizeSection(0, 100)
        # adjust the second column to its contents
        horizontalHeader.setSectionResizeMode(
            1, QtWidgets.QHeaderView.ResizeToContents)
        # adapt the third column to fill all available space
        horizontalHeader.setSectionResizeMode(
            2, QtWidgets.QHeaderView.Stretch)

请注意,如果您删除一列并在同一位置插入另一列,则需要再次设置其部分大小或模式.

Note that if you remove a column and insert another one in the same place, you'll need to set its section size or mode once again.

相关文章