使用 PyQt5 在我的 GUI 中嵌入一个 DataTable

Embed a DataTable in my GUI with PyQt5

我对 python 还很陌生,对 PyQt 也非常陌生。

当我单击文件浏览按钮时,我试图在我的 pyqt 程序中嵌入一个 QTable 小部件。我的目标是拥有一个 class 以便生成多个 table,但为了简化事情,我将 class 设为静态,因此在调用它时会生成一个预定义的 table。现在我只是想看看如何嵌入 table.

我在 class MainWindow 中定义了两个方法“InitializeUI”和“import”。 InitializeUI 负责我的大部分小部件的创建和布局,我希望导入能够使用我在 InitializeUI 中创建的布局来创建和嵌入我的 table。我该怎么做呢?

此外,我的代码 运行 只给我错误“进程已完成,退出代码为 1”,因此很难调试。这是我当前的代码。

将我的浏览按钮连接到导入方法的代码

self.BrowseBtn.clicked.connect(self.import1)

导入方法代码。我的主要 window 中有三种布局,分别是左侧、右上和右下的垂直框。我想让 table 进入 window.

的右下角
    def import1(self):
        self.Table = CreateTable()
        vboxRightBottom.addWidget(self.Table)

class 用于创建 tables

class CreateTable(QTableWidget):
      def __init__(self):
         self.tableWidget = QTableWidget()
         self.tableWidget.setRowCount(4)
         self.tableWidget.setColumnCount(2)
         self.tableWidget.setItem(0,0, QTableWidgetItem("Cell (1,1)"))
         self.tableWidget.setItem(0,1, QTableWidgetItem("Cell (1,2)"))
         self.tableWidget.setItem(1,0, QTableWidgetItem("Cell (2,1)"))
         self.tableWidget.setItem(1,1, QTableWidgetItem("Cell (2,2)"))
         self.tableWidget.setItem(2,0, QTableWidgetItem("Cell (3,1)"))
         self.tableWidget.setItem(2,1, QTableWidgetItem("Cell (3,2)"))
         self.tableWidget.setItem(3,0, QTableWidgetItem("Cell (4,1)"))
         self.tableWidget.setItem(3,1, QTableWidgetItem("Cell (4,2)"))

凭直觉我知道我不能从一种方法调用布局到另一种方法,但我不确定如何以任何其他方式嵌入我的 Table。

抱歉,如果代码没有正确缩进,当我 copy/pasted 我的代码时,堆栈很挑剔。

如果您需要进一步参考这里是 link 我的完整代码

https://github.com/Silvuurleaf/Data-Analysis-and-Visualization-GUI/blob/master/Plotter3.1.py

vboxRightBottom 看起来不在 class 中,首先你应该在它被调用的任何地方修复它(在它在 __init__ 中的声明和每个方法内部):

self.vboxRightBottom = QVBoxLayout()

def import1(self):
    self.Table = CreateTable()
    self.vboxRightBottom.addWidget(self.Table)

那么你处理class的方式并不方便,你应该直接创建一个对象QTableWidget,如下所示:

class CreateTable(QTableWidget):
      def __init__(self):
         super(CreateTable, self).__init__()
         self.setRowCount(4)
         self.setColumnCount(2)
         self.setItem(0,0, QTableWidgetItem("Cell (1,1)"))
         self.setItem(0,1, QTableWidgetItem("Cell (1,2)"))
         self.setItem(1,0, QTableWidgetItem("Cell (2,1)"))
         self.setItem(1,1, QTableWidgetItem("Cell (2,2)"))
         self.setItem(2,0, QTableWidgetItem("Cell (3,1)"))
         self.setItem(2,1, QTableWidgetItem("Cell (3,2)"))
         self.setItem(3,0, QTableWidgetItem("Cell (4,1)"))
         self.setItem(3,1, QTableWidgetItem("Cell (4,2)"))

因此,当您实例化 class 时,它 returns 小部件,否则您应该将 self.Table.tableWidget 提供给 addWidget 方法

self.table = CreateTable()
self.vboxRightBottom.addWidget(self.table)