Python程序期待回归

时间:2016-10-06 21:29:46

标签: python python-3.x pyqt4

我在编写程序时遇到问题我正在编写以正确执行。我试图在一个单独的类中构建一个表。类中的方法似乎需要返回,以便表格显示并且我试图找出原因。如果我使用"返回"或"返回无"我运行程序时表格不会显示。但是,如果我使用像"返回垃圾"这样的无意义引用,它将编译错误,但未定义引用,但在运行程序时将出现该表。有人可以帮我们吗?

from PyQt4.QtCore import *
from PyQt4.QtGui  import *
import sys

class MyMainWindow(QMainWindow):

    def __init__(self, parent=None):

        super(MyMainWindow, self).__init__(parent)
        self.table_widget = TableWidget(self)
        self.setCentralWidget(self.table_widget)

class TableWidget(QWidget):

    def __init__(self, parent):
        super(TableWidget, self).__init__(parent)

        table = QTableWidget()
        tableItem = QTableWidgetItem()

        # initiate table
        table.setWindowTitle("test_table")
        table.resize(400, 250)
        table.setRowCount(4)
        table.setColumnCount(2)

        # set data
        table.setItem(0,0, QTableWidgetItem("Item (1,1)"))
        table.setItem(0,1, QTableWidgetItem("Item (1,2)"))
        table.setItem(1,0, QTableWidgetItem("Item (2,1)"))
        table.setItem(1,1, QTableWidgetItem("Item (2,2)"))
        table.setItem(2,0, QTableWidgetItem("Item (3,1)"))
        table.setItem(2,1, QTableWidgetItem("Item (3,2)"))
        table.setItem(3,0, QTableWidgetItem("Item (4,1)"))
        table.setItem(3,1, QTableWidgetItem("Item (4,2)"))
        table.setItem(3,0, QTableWidgetItem("Item (4,1)"))
        table.setItem(3,1, QTableWidgetItem("Item (4,2)"))

        # show table
        table.show()
        return junk

def main():
    app = QApplication(sys.argv)
    GUI = MyMainWindow()
    GUI.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

2 个答案:

答案 0 :(得分:0)

__init__作为构造函数无法返回值。

每个Widget都需要父母 - 所以QTableWidget也需要。

    table = QTableWidget(parent)

因为您将MainWindow作为父级发送到您的班级,所以现在MainWindowtable家长,MainWindow可以在其区域显示table

table不是(主要)窗口,因此无法设置WindowTitle。您必须在MainWindow中执行此操作(或使用parent中的TableWidget)。

resize()相同 - 要调整窗口大小,您必须在MainWindow中使用它(或在parent中使用TableWidget)。

show()用于显示(主)窗口。

您可以使用QTableWidget

定义您的课程
 class TableWidget(QTableWidget):

然后您可以使用self代替table

编辑:完整代码

from PyQt4.QtCore import *
from PyQt4.QtGui  import *
import sys


class MyMainWindow(QMainWindow):

    def __init__(self, parent=None):

        super(MyMainWindow, self).__init__(parent)
        self.table_widget = TableWidget(self)
        self.setCentralWidget(self.table_widget)

        #self.setWindowTitle("test_table")
        #self.resize(400, 250)

        self.show()


class TableWidget(QTableWidget):

    def __init__(self, parent):
        super(TableWidget, self).__init__(parent)

        # change main window
        parent.setWindowTitle("test_table")
        parent.resize(400, 250)

        # initiate table
        self.setRowCount(4)
        self.setColumnCount(2)

        # set data
        self.setItem(0,0, QTableWidgetItem("Item (1,1)"))
        self.setItem(0,1, QTableWidgetItem("Item (1,2)"))
        self.setItem(1,0, QTableWidgetItem("Item (2,1)"))
        self.setItem(1,1, QTableWidgetItem("Item (2,2)"))
        self.setItem(2,0, QTableWidgetItem("Item (3,1)"))
        self.setItem(2,1, QTableWidgetItem("Item (3,2)"))
        self.setItem(3,0, QTableWidgetItem("Item (4,1)"))
        self.setItem(3,1, QTableWidgetItem("Item (4,2)"))
        self.setItem(3,0, QTableWidgetItem("Item (4,1)"))
        self.setItem(3,1, QTableWidgetItem("Item (4,2)"))


def main():
    app = QApplication(sys.argv)
    win = MyMainWindow() # probably it has to be assigned to variable
    #win.show() # use if you don't have `self.show()` in class
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

答案 1 :(得分:0)

您没有保留对该表的引用,因此在__init__返回时会收集垃圾。您可以通过将表放在布局中来解决此问题,如下所示:

class TableWidget(QWidget):

    def __init__(self, parent):
        super(TableWidget, self).__init__(parent)

        table = QTableWidget()
        tableItem = QTableWidgetItem()

        table.setRowCount(4)
        table.setColumnCount(2)

        # set data
        table.setItem(0,0, QTableWidgetItem("Item (1,1)"))
        table.setItem(0,1, QTableWidgetItem("Item (1,2)"))
        table.setItem(1,0, QTableWidgetItem("Item (2,1)"))
        table.setItem(1,1, QTableWidgetItem("Item (2,2)"))
        table.setItem(2,0, QTableWidgetItem("Item (3,1)"))
        table.setItem(2,1, QTableWidgetItem("Item (3,2)"))
        table.setItem(3,0, QTableWidgetItem("Item (4,1)"))
        table.setItem(3,1, QTableWidgetItem("Item (4,2)"))
        table.setItem(3,0, QTableWidgetItem("Item (4,1)"))
        table.setItem(3,1, QTableWidgetItem("Item (4,2)"))

        layout = QVBoxLayout(self)
        layout.addWidget(table)