希望返回的Python程序
我无法正确执行我正在编写的程序。我试图在一个单独的类中构建一个表。类中的方法似乎需要一个返回,以便表显示,我试图找出原因。如果我使用“return”或“return None”,当我运行程序时,表将不会显示。但是,如果我使用一个无意义的引用,比如“return junk”,它将编译时出现一个错误,即引用未定义,但在我运行程序时,表将出现。有人能帮我们吗希望返回的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
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
将具有相同的效果。但我不知道它为什么会这样,因为构造函数不能返回值。