我在编写程序时遇到问题我正在编写以正确执行。我试图在一个单独的类中构建一个表。类中的方法似乎需要返回,以便表格显示并且我试图找出原因。如果我使用"返回"或"返回无"我运行程序时表格不会显示。但是,如果我使用像"返回垃圾"这样的无意义引用,它将编译错误,但未定义引用,但在运行程序时将出现该表。有人可以帮我们吗?
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()
答案 0 :(得分:0)
__init__
作为构造函数无法返回值。
每个Widget
都需要父母 - 所以QTableWidget
也需要。
table = QTableWidget(parent)
因为您将MainWindow
作为父级发送到您的班级,所以现在MainWindow
为table
家长,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)