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