为什么我的GUI一直崩溃当我按下单选按钮(PYQT5)



我创建了一个GUI(如下),它打印出一个数据框,我希望用户能够根据他们按下的按钮过滤数据框的视图。例如,如果用户按下Filter单选按钮(根据列C的值过滤数据框),我希望GUI在GUI上显示这个新过滤的数据框。

然而,当我在GUI上按下过滤按钮(单选按钮)时,我的GUI/程序崩溃了。我知道过滤部分是有效的,但是我怎样才能让过滤后的数据帧在GUI上正确显示而不崩溃呢?

Console Message I get:Process finished with exit code -1073740791 (0xC0000409)

from PyQt5.QtCore import Qt, QSize, QAbstractTableModel
import os
import pandas as df
import numpy as np
import sys
import pandas.io.formats.style
from PyQt5 import QtGui, QtCore
df.set_option('display.max_columns', 25)
df.set_option('display.width', 2000)
from PyQt5.QtWidgets import QMainWindow, QPushButton, QListWidget, QPlainTextEdit, 
QScrollBar, QWidget, QCheckBox, QHBoxLayout, QApplication, QSizePolicy, QVBoxLayout, QScrollArea, QTableView,QTextEdit, 
QRadioButton
class MainWindow(QMainWindow):
def __init__(self, parent = None):
super().__init__(parent)
self.setWindowTitle('Test GUI')
self.setGeometry(0, 0, 1200, 650)
self.CoreFunctionality()


def Selected_Values(self,selected, df):
if selected:
print(df.loc[df['C'] == 50])
#         # print("helloworld")
def CoreFunctionality(self):
hbox = QHBoxLayout()
hbox.addStretch(1)
# textEdit = QPlainTextEdit()
randomDF = df.DataFrame(np.random.randint(0, 100, size=(100, 4)), columns=list('ABCD'))
self.centralwidget = QWidget(self)
self.pdtable = QTableView(self.centralwidget)
self.model = PandasTableModel(randomDF)
self.pdtable.setModel(self.model)
self.setCentralWidget(self.centralwidget)
self.pdtable.setGeometry(350, 100, 750, 500)
# self.pdtable.move(50,10)
self.pdtable.setShowGrid(False)
self.pdtable.resizeColumnsToContents()
hbox.addWidget(self.pdtable)
vbox = QVBoxLayout()
vbox.addStretch(1)
vbox.addLayout(hbox)
self.setLayout(vbox)
self.pdtable.resize(800, 500)
#Checkbox filter
filterCheckbox = QRadioButton('Filter Button', self)
filterCheckbox.move(20, 70)
filterCheckbox.toggled.connect(lambda: self.Selected_Values(randomDF))

class PandasTableModel(QtGui.QStandardItemModel):
def __init__(self, data, parent=None):
QtGui.QStandardItemModel.__init__(self, parent)
self._data = data
for col in data.columns:
data_col = [QtGui.QStandardItem("{}".format(x)) for x in data[col].values]
self.appendColumn(data_col)
return
def rowCount(self, parent=None):
return len(self._data.values)
def columnCount(self, parent=None):
return self._data.columns.size
def headerData(self, x, orientation, role):
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
return self._data.columns[x]
if orientation == Qt.Vertical and role == Qt.DisplayRole:
return self._data.index[x]
return None

if (__name__ == '__main__'):
application = QApplication([])
MainWindow = MainWindow()
MainWindow.show()
application.exec()

方法Selected_Values期望两个参数,特别是selecteddf参数

def Selected_Values(self, selected, df):
# ...

但你只是传递一个:

filterCheckbox.toggled.connect(lambda: self.Selected_Values(randomDF))
要解决这个问题,只需提供缺少的参数:
filterCheckbox.toggled.connect(lambda: self.Selected_Values(filterCheckbox.isChecked(), randomDF))

最新更新