【问题标题】:Embed a DataTable in my GUI with PyQt5使用 PyQt5 在我的 GUI 中嵌入一个 DataTable
【发布时间】:2017-12-23 15:43:46
【问题描述】:

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

当我单击文件浏览按钮时,我试图在我的 pyqt 程序中嵌入一个 QTableWidget。我的目标是创建一个类来创建多个表,但为了简化事情,我将类设为静态,因此当它被调用时,它会生成一个预定义的表。现在我只是想看看如何嵌入表格。

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

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

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

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

导入方法的代码。我的主窗口中有三个布局,左侧、右上角和右下角的垂直框。我希望我的表格进入窗口的右下角。

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

创建表格的类

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)"))

直觉上我知道我不能在另一种方法中从一种方法调用布局,但我不确定如何以其他方式嵌入我的表格。

对不起,如果代码没有正确缩进,当我复制/粘贴我的代码时堆栈是挑剔的。

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

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

【问题讨论】:

    标签: python user-interface embed pyqt5


    【解决方案1】:

    vboxRightBottom 似乎不在类中,首先你应该在它被调用的任何地方修复它(在它的 __init__ 和每个方法中的声明中):

    self.vboxRightBottom = QVBoxLayout()
    

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

    那么你处理类的方式不方便,你应该直接创建一个对象 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)"))
    

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

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

    【讨论】:

    • 哇,感谢您的建议,我完全忘记了我可以通过调用“self.”来引用变量。一旦我这样做,我就可以在右下角输入多个帧,但它们是空白的。不显示表格和表格数据。你知道是什么原因造成的吗?
    • 你改变了CreateTable类吗?
    • 没关系我很笨,我没有看到你对我的班级 CreateTable() 所做的完整编辑:
    • 非常感谢您的帮助!
    • @MarkusT。没问题,顺便说一句,不错的项目,继续!
    猜你喜欢
    • 2019-04-08
    • 2017-04-20
    • 2019-09-02
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多