Python 为QTableWidget的列指定不同的宽度

Python 为QTableWidget的列指定不同的宽度,python,python-3.x,pyqt5,qt-designer,qtablewidget,Python,Python 3.x,Pyqt5,Qt Designer,Qtablewidget,我正在从QT Designer在pyqt5中开发一个小界面,其中包括一个QTableWidget,但我想为列指定不同的宽度,我找到了谈论相同内容的主题,但我不知道在哪里插入它们提供的代码,我不知道是不是因为版本的原因,我在QT设计器中还是个新手 我留下我提到的问题是为了它的价值。 我的文件结构如下: app.py:存储应用程序的功能 SGS.py:将.ui文件转换为.py后生成的代码 SGS.ui 我留下了生成表头的SGS.py部分 item = self.TableDocs.horizon

我正在从QT Designerpyqt5中开发一个小界面,其中包括一个QTableWidget,但我想为列指定不同的宽度,我找到了谈论相同内容的主题,但我不知道在哪里插入它们提供的代码,我不知道是不是因为版本的原因,我在QT设计器中还是个新手

我留下我提到的问题是为了它的价值。

我的文件结构如下:

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

SGS.py:.ui文件转换为.py后生成的代码

SGS.ui

我留下了生成表头的SGS.py部分

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中做不到的所有事情都必须在应用程序代码文件中实现

无论何时将模型应用于项目视图,都可以设置大小(或调整大小模式,例如自动调整大小,或将“拉伸”设置为可用宽度)。由于您使用的是一个QTableWidget(它有其内部私有模型),因此在界面中创建小部件后就可以执行此操作,如果使用设计器文件,该界面位于
setupUi
(或
loadUi
)之后

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

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)

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

从ui生成的python文件不应编辑。将其视为用于创建接口的资源文件(如图像或JSON文件)。在Designer中做不到的所有事情都必须在应用程序代码文件中实现

无论何时将模型应用于项目视图,都可以设置大小(或调整大小模式,例如自动调整大小,或将“拉伸”设置为可用宽度)。由于您使用的是一个QTableWidget(它有其内部私有模型),因此在界面中创建小部件后就可以执行此操作,如果使用设计器文件,该界面位于
setupUi
(或
loadUi
)之后

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

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)

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

Perfect,这对我很有效。非常感谢。我不知道我是否可以在这里进行另一个查询,但我不想再提出另一个问题,我可以在每个单元格的相应记录旁边插入按钮吗?我的意思是,该表中的数据是从SQLite数据库加载的,因此,我想生成一个额外的列,该列具有按钮,如delete、modify等。至于按钮的功能,我想我可以自己做,我只是想知道如何为每一行生成这些按钮。你可以使用,但如果你需要进一步的帮助,最好创建一个新的问题。很好,这对我很有用。非常感谢。我不知道我是否可以在这里进行另一个查询,但我不想再提出另一个问题,我可以在每个单元格的相应记录旁边插入按钮吗?我的意思是,该表中的数据是从SQLite数据库加载的,因此,我想生成一个额外的列,该列具有按钮,如delete、modify等。至于按钮的功能,我想我可以自己做,我只是想知道如何为每一行生成这些按钮。你可以使用,但如果你需要进一步的帮助,最好创建一个新的问题。