Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
希望返回的Python程序_Python_Python 3.x_Pyqt4 - Fatal编程技术网

希望返回的Python程序

希望返回的Python程序,python,python-3.x,pyqt4,Python,Python 3.x,Pyqt4,我无法正确执行我正在编写的程序。我试图在一个单独的类中构建一个表。类中的方法似乎需要一个返回,以便表显示,我试图找出原因。如果我使用“return”或“return None”,当我运行程序时,表将不会显示。但是,如果我使用一个无意义的引用,比如“return junk”,它将编译时出现一个错误,即引用未定义,但在我运行程序时,表将出现。有人能帮我们吗 from PyQt4.QtCore import * from PyQt4.QtGui import * import sys class

我无法正确执行我正在编写的程序。我试图在一个单独的类中构建一个表。类中的方法似乎需要一个返回,以便表显示,我试图找出原因。如果我使用“return”或“return None”,当我运行程序时,表将不会显示。但是,如果我使用一个无意义的引用,比如“return junk”,它将编译时出现一个错误,即引用未定义,但在我运行程序时,表将出现。有人能帮我们吗

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

\uuuu init\uuuu
作为构造函数无法返回值


每个
Widget
都需要一个父级,因此
QTableWidget
也需要父级

    table = QTableWidget(parent)
因为您将
MainWindow
作为父对象发送给您的类,所以现在
MainWindow
table
父对象,
MainWindow
可以在其区域中显示
table


表格
不是(主)窗口,因此无法设置
窗口标题
。您必须在
main窗口
(或在
TableWidget
中使用
parent
)中执行此操作

resize()
-要调整窗口大小,必须在
main窗口中使用它(或在
TableWidget
中使用
parent

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

\uuuu init\uuuu
作为构造函数无法返回值


每个
Widget
都需要一个父级,因此
QTableWidget
也需要父级

    table = QTableWidget(parent)
因为您将
MainWindow
作为父对象发送给您的类,所以现在
MainWindow
table
父对象,
MainWindow
可以在其区域中显示
table


表格
不是(主)窗口,因此无法设置
窗口标题
。您必须在
main窗口
(或在
TableWidget
中使用
parent
)中执行此操作

resize()
-要调整窗口大小,必须在
main窗口中使用它(或在
TableWidget
中使用
parent

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

您没有保留对该表的引用,因此当
\uuuu init\uuuu
返回时,它会被垃圾回收。您可以通过将表放入布局来解决此问题,如下所示:

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)

您没有保留对该表的引用,因此当
\uuuu init\uuuu
返回时,它会被垃圾回收。您可以通过将表放入布局来解决此问题,如下所示:

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)

返回垃圾
引发异常。这与返回无关<代码>1/0
将具有相同的效果。但我不知道它为什么会这样做。
\uuuu init\uuu
作为构造函数不能返回值。
返回垃圾
引发异常。这与返回无关<代码>1/0
将具有相同的效果。但我不知道它为什么会这样,因为构造函数不能返回值。