Python 如何将表格添加到PyQt5中的中心小部件中并保持菜单栏?

Python 如何将表格添加到PyQt5中的中心小部件中并保持菜单栏?,python,pyqt5,Python,Pyqt5,我在创建PyQt5 GUI时遇到了问题,我需要一个信息表作为中心小部件和一个菜单栏(我最终会将排序选项放入其中)。我的代码允许我拥有表格或菜单,但不能同时拥有两者,并且不能设置中心小部件,因为类没有定义。希望我错过的只是一些小东西。非常感谢您的帮助,谢谢 这是我的密码: class Main(QMainWindow): def __init__(self,parent = None): super().__init__() #self.grid_widget = App(gri

我在创建PyQt5 GUI时遇到了问题,我需要一个信息表作为中心小部件和一个菜单栏(我最终会将排序选项放入其中)。我的代码允许我拥有表格或菜单,但不能同时拥有两者,并且不能设置中心小部件,因为类没有定义。希望我错过的只是一些小东西。非常感谢您的帮助,谢谢

这是我的密码:

class Main(QMainWindow):

def __init__(self,parent = None):
    super().__init__()
    #self.grid_widget = App(grid)
    self.initUI()

def initUI(self):    


    exitAct = QAction(QIcon('exit.png'), '&Exit', self)        
    exitAct.setShortcut('Ctrl+Q')
    exitAct.setStatusTip('Exit application')
    exitAct.triggered.connect(qApp.quit)

    self.statusBar()

    menubar = self.menuBar()
    fileMenu = menubar.addMenu('&File')
    fileMenu.addAction(exitAct)

    #self.setCentralWidget(self.grid_widget)

    self.show()



if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Main()
    sys.exit(app.exec_())



class App(QWidget):

def __init__(self, parent = None):
    super(App, self).__init__(parent)
    self.title = 'PyQt5 table'
    self.left = 90
    self.top = 90
    self.width = 800
    self.height = 600
    self.initUI()

def initUI(self):
    self.setWindowTitle(self.title)
    self.setGeometry(self.left, self.top, self.width, self.height)

    self.createTable()

    # Add layout, add table to grid layout
    grid = QGridLayout()

    grid.addWidget(self.tableWidget)

    self.setLayout(grid) 

    # Show widget
    self.show()

def createTable(self):
   # Create table
    self.tableWidget = QTableWidget()
    self.tableWidget.setRowCount(len(q1.index))
    self.tableWidget.setColumnCount(len(q1.columns))
    self.tableWidget.setHorizontalHeaderLabels(heads) #set column names to headers in df
    for i in range(len(q1.index)):
        for j in range(len(q1.columns)):
            self.tableWidget.setItem(i, j, QTableWidgetItem(str(q1.iat[i, j])))

    self.tableWidget.resizeColumnsToContents()
    self.tableWidget.resizeRowsToContents()
    self.tableWidget.move(0,0)

    # table selection change
    self.tableWidget.doubleClicked.connect(self.on_click)


@pyqtSlot()
def on_click(self):
    print("\n")
    for currentQTableWidgetItem in self.tableWidget.selectedItems():
        print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())
这就产生了:

完全忽略了我的整个桌面部件

我已经注释掉了qmain窗口中的第三行,因为它产生了一个错误,表示应用程序未定义


如何设置中心小部件,使其也可以显示表格?谢谢。

应用程序应该只有一个main,只有多个main,第一个main将被执行,因此您需要的所有内容都不会被定义,因此应用程序的定义也不会如您所示

因此,解决方案是消除中间干管,并将其复制到最终干管

class Main(QMainWindow):
    def __init__(self,parent = None):
        super().__init__()
        self.grid_widget = App(self)
        self.initUI()
...

class App(QWidget):
    ...

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Main()
    sys.exit(app.exec_())

什么是
q1
??q1是我计算机上csv文件中的数据帧。请参阅我的答案:)谢谢,这已经消除了应用程序未定义错误。现在它说网格没有定义。我在App类中的定义有误吗?@shinobilou将
App(grid)
更改为
App(self)
,grid未在主类中定义,将其作为参数传递也没有意义。我随后意识到我必须将self.grid\u widget=App(grid)更改为self.grid\u widget=App(self)。哈。非常感谢。