【问题标题】:Unable to create tables on a grid in PyQt5无法在 PyQt5 中的网格上创建表
【发布时间】:2020-11-16 08:35:03
【问题描述】:

我正在尝试在 GridLayout 上创建 x 个表,其中 x 是列表的大小,mylist

import sys
from PyQt5.QtWidgets import *

from PyQt5.QtCore import *
from PyQt5 import *

class basicWindow(QWidget):
    def __init__(self):
        super().__init__()
        grid = QGridLayout()
        self.setLayout(grid)
        mylist = [['Admin',['int a','int b','int c'],
['Student',['int a','int b','int c','int d','int e']]]


        for i in range(len(mylist)):
                table = QTableWidget()
                table.setColumnCount(1)
                table.setRowCount(len(mylist[i][1]))
                for j in range(len(mylist[i][1])):
                    table.setItem(j,0,QTableWidgetItem(mylist[i][1][j]))
                vBox = QVBoxLayout()
                vBox.addWidget(table)
                grid.addWidget(vBox,i,0)
    
        self.setWindowTitle('Basic Grid Layout')

 if __name__ == '__main__':
     app = QApplication(sys.argv)
     windowExample = basicWindow()
     windowExample.show()
     sys.exit(app.exec_())

但是每次我运行这段代码。它给了我下面的错误。我已经尝试分别为 Vbox 和 Grid 添加 addWidget 方法的最大参数数。但它似乎也没有工作。请指导,因为我现在坚持了一段时间。

 TypeError: arguments did not match any overloaded call:
 addWidget(self, QWidget): argument 1 has unexpected type 'QVBoxLayout'
 addWidget(self, QWidget, int, int, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = 
 Qt.Alignment()): argument 1 has unexpected type 'QVBoxLayout'
 addWidget(self, QWidget, int, int, int, int, alignment: Union[Qt.Alignment, Qt.AlignmentFlag] = 
 Qt.Alignment()): argument 1 has unexpected type 'QVBoxLayout'

【问题讨论】:

  • grid.addWidget(vBox,i,0)更改为grid.addLayout(vBox,i,0)
  • @eyllanesc,非常感谢!它的工作。但是 addLayout 有什么不同呢?

标签: python-3.x python-2.7 pyqt pyqt5


【解决方案1】:

正如addWidget() 的文档中应该清楚的那样,该函数要求您使用 QWidget 子类作为第一个参数,而 QVBoxLayout 不是

如果要添加布局,需要改用addLayout()

目前还不是很清楚为什么需要使用 QVBoxLayout(因为除了表格之外,您没有添加任何其他内容,这使得该布局完全无用),但无论如何,只需更改以下行:

    grid.addWidget(vBox,i,0)

到这里:

    grid.addLayout(vBox, i, 0)

请务必在逗号后面加一个空格,正如官方Python code style guide所建议的那样。

【讨论】:

  • 实际上这是我的代码的一部分,我不想只添加一个表。顺便说一句,非常有帮助。非常感谢。
  • @RabiSiddique 不客气!如果我的回答解决了您的问题,请记住通过单击左侧的复选标记将其设置为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2015-08-09
  • 2018-11-25
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多