def __init__(self, model: DataFrameModel, df_manager, **kwargs): QtGui.QMainWindow.__init__(self, parent=kwargs.pop('parent', None)) self.df_manager = df_manager self._df_model = None self._df_model_transposed = None self._view_transposed = False self._widget = DataTableWidget() self._widget.setModel(model) kwargs['parent'] = self self.setupUi(self) self.dialog_fields_edit = FieldsEditDialog(model, parent=self) self.dialog_export = DataFrameModelExportDialog( df_manager, filename=model.filePath, allow_multi_source=False, parent=self) self.dialog_split = SplitFileDialog(model, parent=self) self.dialog_analyze = FileAnalyzerDialog(model, parent=self) self.dialog_normalize = ColumnNormalizerDialog(model, parent=self) self.dialog_merge_purge = kwargs.pop( 'merge_purge_dialog', MergePurgeDialog( df_manager, source_model=model, )) self.connect_actions() self.connect_icons()
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.pandastablewidget = DataTableWidget(self.centralwidget) self.pandastablewidget.setGeometry(QtCore.QRect(10, 60, 591, 451)) self.pandastablewidget.setObjectName("pandastablewidget") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(630, 90, 93, 28)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_2.setGeometry(QtCore.QRect(640, 320, 93, 28)) self.pushButton_2.setObjectName("pushButton_2") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 26)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow)
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralWidget = QtWidgets.QWidget(MainWindow) self.centralWidget.setObjectName("centralWidget") self.pandastablewidget = DataTableWidget(self.centralWidget) self.pandastablewidget.setGeometry(QtCore.QRect(10, 30, 591, 331)) self.pandastablewidget.setObjectName("pandastablewidget") self.pushButton = QtWidgets.QPushButton(self.centralWidget) self.pushButton.setGeometry(QtCore.QRect(660, 70, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget) self.pushButton_2.setGeometry(QtCore.QRect(660, 240, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") MainWindow.setCentralWidget(self.centralWidget) self.menuBar = QtWidgets.QMenuBar(MainWindow) self.menuBar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menuBar.setObjectName("menuBar") MainWindow.setMenuBar(self.menuBar) self.statusBar = QtWidgets.QStatusBar(MainWindow) self.statusBar.setObjectName("statusBar") MainWindow.setStatusBar(self.statusBar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "数据初始化")) self.pushButton_2.setText(_translate("MainWindow", "保存数据"))
class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(903, 678) self.layoutWidget = QtWidgets.QWidget(Form) self.layoutWidget.setGeometry(QtCore.QRect(20, 40, 761, 541)) self.layoutWidget.setObjectName("layoutWidget") self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setObjectName("gridLayout") self.quit_btn_7 = QtWidgets.QPushButton(self.layoutWidget) self.quit_btn_7.setObjectName("quit_btn_7") self.gridLayout.addWidget(self.quit_btn_7, 0, 1, 1, 1) self.quit_btn = QtWidgets.QPushButton(self.layoutWidget) self.quit_btn.setObjectName("quit_btn") self.gridLayout.addWidget(self.quit_btn, 0, 2, 1, 1) self.widget_2 = DataTableWidget(self.layoutWidget) self.widget_2.setObjectName("widget_2") self.gridLayout.addWidget(self.widget_2, 2, 0, 2, 3) self.quit_btn_5 = QtWidgets.QPushButton(self.layoutWidget) self.quit_btn_5.setObjectName("quit_btn_5") self.gridLayout.addWidget(self.quit_btn_5, 0, 0, 1, 1) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.quit_btn_7.setText(_translate("Form", "保存数据")) self.quit_btn.setText(_translate("Form", "退出")) self.quit_btn_5.setText(_translate("Form", "导入数据"))
class FileTableWindow(QtGui.QMainWindow, Ui_FileWindow): def __init__(self, model: DataFrameModel, df_manager: DataFrameModelManager, **kwargs): QtGui.QMainWindow.__init__(self, parent=kwargs.pop('parent', None)) self.df_manager = df_manager self._widget = DataTableWidget() self._widget.setModel(model) kwargs['parent'] = self self.icons = Icons() self.setupUi(self) self.dialog_rename = None self.dialog_fields_edit = None self.connect_actions() self.connect_icons() @property def widget(self): # Overrides the Ui_FileWindow.widget return self._widget @widget.setter def widget(self, x): # Prevent the Ui_FileWindow from overriding our widget. pass @property def currentModel(self): return self.widget.model() @property def currentDataFrame(self): return self.currentModel._dataFrame def connect_actions(self): self.actionEditFields.triggered.connect(self.open_fields_edit_dialog) def connect_icons(self): self.setWindowTitle("{}".format(self.currentModel.filePath)) self.setWindowIcon(self.icons['spreadsheet']) self.actionExecuteScript.setIcon(self.icons['edit']) self.actionDelete.setIcon(self.icons['delete']) self.actionMergePurge.setVisible(False) self.actionSave.setIcon(self.icons['save']) self.actionSuppress.setIcon(self.icons['suppress']) self.actionEditFields.setIcon(self.icons['add_column']) def open_rename_dialog(self): if self.dialog_rename is None: self.dialog_rename = RenameDialog(parent=self, model=self.currentModel) self.dialog_rename.show() def open_fields_edit_dialog(self): if self.dialog_fields_edit is None: self.dialog_fields_edit = FieldsEditDialog(self.currentModel, parent=self) self.dialog_fields_edit.show()
def test_removeColumns(self, qtbot, dataModel2): widget = DataTableWidget() qtbot.addWidget(widget) widget.show() widget.setViewModel(dataModel2) df = dataModel2.dataFrame().copy() buttons = widget.findChildren(QtGui.QToolButton) for btn in buttons: if btn.isEnabled: qtbot.mouseClick(btn, QtCore.Qt.LeftButton) break for btn in buttons: if btn.objectName() == 'removecolumnbutton': qtbot.mouseClick(btn, QtCore.Qt.LeftButton) dlg = widget.findChildren(QtGui.QDialog)[-1] listview = dlg.findChildren(QtGui.QListView)[-1] listview.selectAll() dlg_buttons = dlg.findChildren(QtGui.QPushButton) for b in dlg_buttons: if b.text() == 'OK': qtbot.mouseClick(b, QtCore.Qt.LeftButton) break assert widget.view().model().columnCount() == 0
def show_data(self): """ 展示读取进来的数据 """ self.widget = DataTableWidget(self.ui) model = DataFrameModel() model.setDataFrame(self.DataHelper.data) self.widget.setViewModel(model) self.widget.move(30, 200) self.widget.resize(350, 350) self.widget.show()
def __init__(self, model: DataFrameModel, df_manager: DataFrameModelManager, **kwargs): QtGui.QMainWindow.__init__(self, parent=kwargs.pop('parent', None)) self.df_manager = df_manager self._widget = DataTableWidget() self._widget.setModel(model) kwargs['parent'] = self self.icons = Icons() self.setupUi(self) self.dialog_rename = None self.dialog_fields_edit = None self.connect_actions() self.connect_icons()
def test_click_each_button(self, qtbot, dataModel): widget = DataTableWidget() qtbot.addWidget(widget) widget.show() widget.setViewModel(dataModel) buttons = widget.findChildren(QtGui.QToolButton) for btn in buttons: if btn.isEnabled: qtbot.mouseClick(btn, QtCore.Qt.LeftButton) break for btn in buttons: if btn.objectName() == 'editbutton': continue if btn.objectName() in ['addcolumnbutton', 'removecolumnbutton']: qtbot.mouseClick(btn, QtCore.Qt.LeftButton) dlg = widget.findChildren(QtGui.QDialog)[-1] dlg_buttons = dlg.findChildren(QtGui.QPushButton) for b in dlg_buttons: if b.text() == 'Cancel': qtbot.mouseClick(b, QtCore.Qt.LeftButton) break else: qtbot.mouseClick(btn, QtCore.Qt.LeftButton)
def setupUi(self, offer_Form): offer_Form.setObjectName("offer_Form") offer_Form.resize(653, 500) self.pushButton = QtWidgets.QPushButton(offer_Form) self.pushButton.setGeometry(QtCore.QRect(680, 60, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(offer_Form) self.pushButton_2.setGeometry(QtCore.QRect(680, 170, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") self.offerwidget = DataTableWidget(offer_Form) self.offerwidget.setGeometry(QtCore.QRect(50, 30, 491, 391)) self.offerwidget.setObjectName("offerwidget") self.retranslateUi(offer_Form) QtCore.QMetaObject.connectSlotsByName(offer_Form)
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralWidget = QtWidgets.QWidget(MainWindow) self.centralWidget.setObjectName("centralWidget") self.pushButton = QtWidgets.QPushButton(self.centralWidget) self.pushButton.setGeometry(QtCore.QRect(680, 60, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget) self.pushButton_2.setGeometry(QtCore.QRect(680, 170, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") self.pandastablewidget = DataTableWidget(self.centralWidget) self.pandastablewidget.setGeometry(QtCore.QRect(10, 30, 591, 331)) self.pandastablewidget.setStyleSheet("") self.pandastablewidget.setObjectName("pandastablewidget") MainWindow.setCentralWidget(self.centralWidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow)
def test_setModel(self, qtbot, dataModel): widget = DataTableWidget() qtbot.addWidget(widget) widget.show() widget.setViewModel(dataModel) assert widget.view().model() is not None assert widget.view().model() == dataModel buttons = widget.findChildren(QtGui.QToolButton) for btn in buttons: if btn.isEnabled: qtbot.mouseClick(btn, QtCore.Qt.LeftButton) assert widget.view().model().editable qtbot.mouseClick(btn, QtCore.Qt.LeftButton) assert not widget.view().model().editable break
class Ui_Mine5(object): def click1(self): self.form.close() Form1 = QtWidgets.QMainWindow() self.ui = Mine.Ui_Mine() self.ui.setupUi(Form1) Form1.show() def setupUi(self, Mine5): Mine5.setObjectName("Mine5") Mine5.resize(1259, 879) Mine5.setStyleSheet("border-image: url(:/M11.jpg);") Mine5.setWindowFlags(Qt.FramelessWindowHint) self.form = Mine5 self.centralwidget = QtWidgets.QWidget(Mine5) self.centralwidget.setObjectName("centralwidget") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(20, -10, 861, 101)) self.pushButton.setStyleSheet("border-image: url(:/M16.jpg);\n" "font: 14pt \"华文新魏\";") self.pushButton.setObjectName("pushButton") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(890, 0, 361, 81)) self.label_2.setStyleSheet("\n" "border-image: url(:/M10.jpg);") self.label_2.setObjectName("label_2") self.pandastablewidget = DataTableWidget(self.centralwidget) self.pandastablewidget.setGeometry(QtCore.QRect(-10, 90, 1251, 741)) self.pandastablewidget.setStyleSheet("border-image: url(:/M8.png);") self.pandastablewidget.setObjectName("pandastablewidget") self.model = DataFrameModel() self.pandastablewidget.setViewModel(self.model) self.model.setDataFrame(db) Mine5.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(Mine5) self.menubar.setGeometry(QtCore.QRect(0, 0, 1259, 26)) self.menubar.setObjectName("menubar") Mine5.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(Mine5) self.statusbar.setObjectName("statusbar") Mine5.setStatusBar(self.statusbar) self.retranslateUi(Mine5) self.pushButton.clicked.connect(self.click1) QtCore.QMetaObject.connectSlotsByName(Mine5) def retranslateUi(self, Mine5): _translate = QtCore.QCoreApplication.translate Mine5.setWindowTitle(_translate("Mine5", "欢迎使用喵眼!")) self.pushButton.setText(_translate("Mine5", "返回")) self.label_2.setText(_translate("Mine5", "TextLabel"))
def setup_ui(self): self.setWindowTitle("查詢結果") self.setFont(PyQt5.QtGui.QFont("Times New Roman", 11)) self.buttonCopy = QPushButton("複製查詢結果 (Ctrl+C)") self.buttonCopy.clicked.connect(self.copy) self.labelInfo = QLabel("") self.shortcut = QShortcut(PyQt5.QtGui.QKeySequence("Ctrl+C"), self) self.shortcut.activated.connect(self.copy) self.formLayout = QFormLayout() self.formLayout.addRow(self.buttonCopy, self.labelInfo) self.widget = DataTableWidget() self.widget.setButtonsVisible(False) self.widget.setMinimumSize(600, 600) self.vbox = QVBoxLayout() self.vbox.addLayout(self.formLayout) self.vbox.addWidget(self.widget) self.setLayout(self.vbox)
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralWidget = QtWidgets.QWidget(MainWindow) self.centralWidget.setObjectName("centralWidget") self.pushButton = QtWidgets.QPushButton(self.centralWidget) self.pushButton.setGeometry(QtCore.QRect(680, 60, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget) self.pushButton_2.setGeometry(QtCore.QRect(680, 170, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") self.pandastablewidget = DataTableWidget(self.centralWidget) self.pandastablewidget.setGeometry(QtCore.QRect(10, 30, 591, 331)) self.pandastablewidget.setStyleSheet("") self.pandastablewidget.setObjectName("pandastablewidget") # self.pandastablewidget.setAcceptDrops(true)#打开拖拽 MainWindow.setCentralWidget(self.centralWidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "数据初始化")) self.pushButton_2.setText(_translate("MainWindow", "保存数据"))
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) self.centralWidget = QtWidgets.QWidget(MainWindow) self.centralWidget.setObjectName("centralWidget") self.pushButton = QtWidgets.QPushButton(self.centralWidget) self.pushButton.setGeometry(QtCore.QRect(680, 60, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget) self.pushButton_2.setGeometry(QtCore.QRect(680, 170, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") self.pandastablewidget = DataTableWidget(self.centralWidget) self.pandastablewidget.setGeometry(QtCore.QRect(10, 30, 591, 331)) self.pandastablewidget.setStyleSheet("") self.pandastablewidget.setObjectName("pandastablewidget") MainWindow.setCentralWidget(self.centralWidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "数据初始化")) self.pushButton_2.setText(_translate("MainWindow", "保存数据"))
def test_enableToolBar(self, qtbot): widget = DataTableWidget() qtbot.addWidget(widget) widget.show() assert widget.view().model() is None buttons = widget.findChildren(QtGui.QToolButton) exclude_button = None for btn in buttons: if btn.isEnabled: qtbot.mouseClick(btn, QtCore.Qt.LeftButton) exclude_button = btn assert btn.isChecked() break for button in buttons: assert button.isEnabled() qtbot.mouseClick(btn, QtCore.Qt.LeftButton) for button in buttons: if button == exclude_button: continue assert not button.isEnabled() assert not button.isChecked()
class Ui_offer_Form(object): def setupUi(self, offer_Form): offer_Form.setObjectName("offer_Form") offer_Form.resize(653, 500) self.pushButton = QtWidgets.QPushButton(offer_Form) self.pushButton.setGeometry(QtCore.QRect(680, 60, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(offer_Form) self.pushButton_2.setGeometry(QtCore.QRect(680, 170, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") self.offerwidget = DataTableWidget(offer_Form) self.offerwidget.setGeometry(QtCore.QRect(50, 30, 491, 391)) self.offerwidget.setObjectName("offerwidget") self.retranslateUi(offer_Form) QtCore.QMetaObject.connectSlotsByName(offer_Form) def retranslateUi(self, offer_Form): _translate = QtCore.QCoreApplication.translate offer_Form.setWindowTitle(_translate("offer_Form", "Form")) self.pushButton.setText(_translate("MainWindow", "数据初始化")) self.pushButton_2.setText(_translate("MainWindow", "保存数据"))
def setupUi(self, Mine5): Mine5.setObjectName("Mine5") Mine5.resize(1259, 879) Mine5.setStyleSheet("border-image: url(:/M11.jpg);") Mine5.setWindowFlags(Qt.FramelessWindowHint) self.form = Mine5 self.centralwidget = QtWidgets.QWidget(Mine5) self.centralwidget.setObjectName("centralwidget") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(20, -10, 861, 101)) self.pushButton.setStyleSheet("border-image: url(:/M16.jpg);\n" "font: 14pt \"华文新魏\";") self.pushButton.setObjectName("pushButton") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(890, 0, 361, 81)) self.label_2.setStyleSheet("\n" "border-image: url(:/M10.jpg);") self.label_2.setObjectName("label_2") self.pandastablewidget = DataTableWidget(self.centralwidget) self.pandastablewidget.setGeometry(QtCore.QRect(-10, 90, 1251, 741)) self.pandastablewidget.setStyleSheet("border-image: url(:/M8.png);") self.pandastablewidget.setObjectName("pandastablewidget") self.model = DataFrameModel() self.pandastablewidget.setViewModel(self.model) self.model.setDataFrame(db) Mine5.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(Mine5) self.menubar.setGeometry(QtCore.QRect(0, 0, 1259, 26)) self.menubar.setObjectName("menubar") Mine5.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(Mine5) self.statusbar.setObjectName("statusbar") Mine5.setStatusBar(self.statusbar) self.retranslateUi(Mine5) self.pushButton.clicked.connect(self.click1) QtCore.QMetaObject.connectSlotsByName(Mine5)
def setupUi(self, Form): Form.setObjectName("Form") Form.resize(903, 678) self.layoutWidget = QtWidgets.QWidget(Form) self.layoutWidget.setGeometry(QtCore.QRect(20, 40, 761, 541)) self.layoutWidget.setObjectName("layoutWidget") self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setObjectName("gridLayout") self.quit_btn_7 = QtWidgets.QPushButton(self.layoutWidget) self.quit_btn_7.setObjectName("quit_btn_7") self.gridLayout.addWidget(self.quit_btn_7, 0, 1, 1, 1) self.quit_btn = QtWidgets.QPushButton(self.layoutWidget) self.quit_btn.setObjectName("quit_btn") self.gridLayout.addWidget(self.quit_btn, 0, 2, 1, 1) self.widget_2 = DataTableWidget(self.layoutWidget) self.widget_2.setObjectName("widget_2") self.gridLayout.addWidget(self.widget_2, 2, 0, 2, 3) self.quit_btn_5 = QtWidgets.QPushButton(self.layoutWidget) self.quit_btn_5.setObjectName("quit_btn_5") self.gridLayout.addWidget(self.quit_btn_5, 0, 0, 1, 1) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form)
def test_init(self, qtbot): widget = DataTableWidget() qtbot.addWidget(widget) widget.show() assert widget.view().model() is None buttons = widget.findChildren(QtGui.QToolButton) enabled_counter = 0 for btn in buttons: assert not btn.isChecked() if btn.isEnabled(): enabled_counter += 1 assert enabled_counter == 1
from qtpandas.excepthook import excepthook # Use QtGui from the compat module to take care if correct sip version, etc. from qtpandas.compat import QtGui from qtpandas.models.DataFrameModel import DataFrameModel from qtpandas.views.DataTableView import DataTableWidget # from qtpandas.views._ui import icons_rc sys.excepthook = excepthook # 設定PyQt的異常鉤子,基本上在本例沒什麼作用 # 建立一個空的模型,該模型用來儲存與處理資料 model = DataFrameModel() # 建立一個應用程式顯示表格 app = QtGui.QApplication([]) widget = DataTableWidget() # 建立一個空的表格,用來呈現資料 widget.resize(500, 300) # 調整Widget的大小 widget.show() # 讓表格繫結模型,也就是呈現模型的內容 widget.setViewModel(model) # 建立測試資料 data = { 'A': [10, 11, 12], 'B': [20, 21, 22], 'C': ['Peter Pan', 'Cpt. Hook', 'Tinkerbell'] } df = pandas.DataFrame(data) # 下面兩列用來測試委託是否成立 df['A'] = df['A'].astype(numpy.int8) # A欄資料格式變成整數
from qtpandas.excepthook import excepthook # Use QtGui from the compat module to take care if correct sip version, etc. from qtpandas.compat import QtGui from qtpandas.models.DataFrameModel import DataFrameModel from qtpandas.views.DataTableView import DataTableWidget # from qtpandas.views._ui import icons_rc sys.excepthook = excepthook # 设置PyQt的异常钩子,在本例中基本没什么用 # 创建一个空的模型,该模型用于存储与处理数据 model = DataFrameModel() # 创建一个应用用于显示表格 app = QtGui.QApplication([]) widget = DataTableWidget() # 创建一个空的表格,主要用来呈现数据 widget.resize(500, 300) # 调整Widget的大小 widget.show() # 让表格绑定模型,也就是让表格呈现模型的内容 widget.setViewModel(model) # 创建测试数据 data = { 'A': [10, 11, 12], 'B': [20, 21, 22], 'C': ['Peter Pan', 'Cpt. Hook', 'Tinkerbell'] } df = pandas.DataFrame(data) # 下面两列用来测试委托是否成立 df['A'] = df['A'].astype(numpy.int8) # A列数据格式变成整型
def setupUi(self, Query_Form): Query_Form.setObjectName("Query_Form") Query_Form.resize(844, 678) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( Query_Form.sizePolicy().hasHeightForWidth()) Query_Form.setSizePolicy(sizePolicy) self.verticalLayout = QtWidgets.QVBoxLayout(Query_Form) self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize) self.gridLayout.setHorizontalSpacing(0) self.gridLayout.setObjectName("gridLayout") self.comboBox = QtWidgets.QComboBox(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.comboBox.sizePolicy().hasHeightForWidth()) self.comboBox.setSizePolicy(sizePolicy) self.comboBox.setObjectName("comboBox") self.gridLayout.addWidget(self.comboBox, 0, 0, 1, 1) self.comboBox_3 = QtWidgets.QComboBox(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.comboBox_3.sizePolicy().hasHeightForWidth()) self.comboBox_3.setSizePolicy(sizePolicy) self.comboBox_3.setObjectName("comboBox_3") self.gridLayout.addWidget(self.comboBox_3, 0, 1, 1, 1) self.comboBox_4 = QtWidgets.QComboBox(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.comboBox_4.sizePolicy().hasHeightForWidth()) self.comboBox_4.setSizePolicy(sizePolicy) self.comboBox_4.setObjectName("comboBox_4") self.gridLayout.addWidget(self.comboBox_4, 0, 2, 1, 1) self.comboBox_5 = QtWidgets.QComboBox(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.comboBox_5.sizePolicy().hasHeightForWidth()) self.comboBox_5.setSizePolicy(sizePolicy) self.comboBox_5.setObjectName("comboBox_5") self.gridLayout.addWidget(self.comboBox_5, 0, 3, 1, 1) self.comboBox_2 = QtWidgets.QComboBox(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.comboBox_2.sizePolicy().hasHeightForWidth()) self.comboBox_2.setSizePolicy(sizePolicy) self.comboBox_2.setObjectName("comboBox_2") self.gridLayout.addWidget(self.comboBox_2, 1, 0, 1, 1) self.lineEdit = QtWidgets.QLineEdit(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.lineEdit.sizePolicy().hasHeightForWidth()) self.lineEdit.setSizePolicy(sizePolicy) self.lineEdit.setMinimumSize(QtCore.QSize(90, 22)) self.lineEdit.setMaximumSize(QtCore.QSize(90, 22)) self.lineEdit.setObjectName("lineEdit") self.gridLayout.addWidget(self.lineEdit, 1, 1, 1, 1) self.lineEdit_2 = QtWidgets.QLineEdit(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.lineEdit_2.sizePolicy().hasHeightForWidth()) self.lineEdit_2.setSizePolicy(sizePolicy) self.lineEdit_2.setMinimumSize(QtCore.QSize(90, 22)) self.lineEdit_2.setMaximumSize(QtCore.QSize(90, 22)) self.lineEdit_2.setObjectName("lineEdit_2") self.gridLayout.addWidget(self.lineEdit_2, 1, 2, 1, 1) self.comboBox_6 = QtWidgets.QComboBox(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.comboBox_6.sizePolicy().hasHeightForWidth()) self.comboBox_6.setSizePolicy(sizePolicy) self.comboBox_6.setObjectName("comboBox_6") self.gridLayout.addWidget(self.comboBox_6, 1, 3, 1, 1) self.horizontalLayout_2.addLayout(self.gridLayout) spacerItem = QtWidgets.QSpacerItem(158, 20, QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize) self.horizontalLayout.setObjectName("horizontalLayout") self.PB_query = QtWidgets.QPushButton(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.PB_query.sizePolicy().hasHeightForWidth()) self.PB_query.setSizePolicy(sizePolicy) self.PB_query.setMinimumSize(QtCore.QSize(80, 24)) self.PB_query.setMaximumSize(QtCore.QSize(80, 24)) self.PB_query.setObjectName("PB_query") self.horizontalLayout.addWidget(self.PB_query) self.PB_edit = QtWidgets.QPushButton(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.PB_edit.sizePolicy().hasHeightForWidth()) self.PB_edit.setSizePolicy(sizePolicy) self.PB_edit.setMinimumSize(QtCore.QSize(80, 24)) self.PB_edit.setMaximumSize(QtCore.QSize(80, 24)) self.PB_edit.setObjectName("PB_edit") self.horizontalLayout.addWidget(self.PB_edit) self.PB_export = QtWidgets.QPushButton(Query_Form) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.PB_export.sizePolicy().hasHeightForWidth()) self.PB_export.setSizePolicy(sizePolicy) self.PB_export.setMinimumSize(QtCore.QSize(80, 24)) self.PB_export.setMaximumSize(QtCore.QSize(80, 24)) self.PB_export.setObjectName("PB_export") self.horizontalLayout.addWidget(self.PB_export) self.horizontalLayout_2.addLayout(self.horizontalLayout) self.verticalLayout.addLayout(self.horizontalLayout_2) self.pandastablewidget = DataTableWidget(Query_Form) self.pandastablewidget.setStyleSheet("") self.pandastablewidget.setObjectName("pandastablewidget") self.verticalLayout.addWidget(self.pandastablewidget) self.tabWidget = QtWidgets.QTabWidget(Query_Form) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.tabWidget.addTab(self.tab, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") self.tabWidget.addTab(self.tab_3, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.tabWidget.addTab(self.tab_2, "") self.tab_4 = QtWidgets.QWidget() self.tab_4.setObjectName("tab_4") self.tabWidget.addTab(self.tab_4, "") self.verticalLayout.addWidget(self.tabWidget) self.verticalLayout.setStretch(1, 1) self.verticalLayout.setStretch(2, 1) self.retranslateUi(Query_Form) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(Query_Form)
class FileTableWindow(QtGui.QMainWindow, Ui_FileWindow): """ A spreadsheet-like window that displays rows and columns of the source DataFrame. Menu actions in this window allow the user to make updates to the DataFrame and see the changes update in the view. """ def __init__(self, model: DataFrameModel, df_manager, **kwargs): QtGui.QMainWindow.__init__(self, parent=kwargs.pop('parent', None)) self.df_manager = df_manager self._df_model = None self._df_model_transposed = None self._view_transposed = False self._widget = DataTableWidget() self._widget.setModel(model) kwargs['parent'] = self self.setupUi(self) self.dialog_fields_edit = FieldsEditDialog(model, parent=self) self.dialog_export = DataFrameModelExportDialog( df_manager, filename=model.filePath, allow_multi_source=False, parent=self) self.dialog_split = SplitFileDialog(model, parent=self) self.dialog_analyze = FileAnalyzerDialog(model, parent=self) self.dialog_normalize = ColumnNormalizerDialog(model, parent=self) self.dialog_merge_purge = kwargs.pop( 'merge_purge_dialog', MergePurgeDialog( df_manager, source_model=model, )) self.connect_actions() self.connect_icons() @property def widget(self): # Overrides the Ui_FileWindow.widget return self._widget @widget.setter def widget(self, x): # Prevent the Ui_FileWindow from overriding our widget. pass @property def df_model(self) -> DataFrameModel: return self.widget.model() @property def df(self): return self.df_model.dataFrame() def connect_actions(self): self.actionAnalyze.triggered.connect(self.dialog_analyze.show) self.actionDropNaN.triggered.connect(self.drop_nan) self.actionEditFields.triggered.connect(self.dialog_fields_edit.show) self.actionMergePurge.triggered.connect(self.dialog_merge_purge.show) self.actionNormalize.triggered.connect(self.dialog_normalize.show) self.actionSave.triggered.connect(self.save) self.actionSaveAs.triggered.connect(self.dialog_export.show) self.actionSplit.triggered.connect(self.dialog_split.show) self.actionTranspose.triggered.connect(self.transpose) self.dialog_export.btnBrowseSource.setVisible(False) # TODO: Make these actions do something then activate. self.actionExecuteScript.setVisible(False) self.actionSuppress.setVisible(False) self.actionDelete.setVisible(False) self.df_model.dataChanged.connect(self.sync) self.sync() def connect_icons(self): self.setWindowIcon(QtGui.QIcon(':/standard_icons/spreadsheet.png')) def transpose(self): """ TODO: Give this functionality to the DataFrameModel :return: """ rows = self.df_model.dataFrame().index.size if rows > 150: raise Exception("Max size to transpose is 150 rows to columns.") if self._df_model_transposed is None: df = pandatools.dataframe_transpose(self.df_model.dataFrame()) self._df_model_transposed = DataFrameModel(dataFrame=df) self._df_model = self.df_model if self._view_transposed is True: self.widget.setModel(self._df_model) self._view_transposed = False else: self.widget.setModel(self._df_model_transposed) self._view_transposed = True def drop_nan(self): for c in self.df.columns: dtype = str(self.df[c].dtype) if 'float' in dtype: sum = self.df[c].sum() if sum == 0 or str(sum) == 'nan': self.df.loc[:, c] = self.df.loc[:, c].apply(lambda x: str(x)) if str(self.df[c].dtype) == 'object': self.df.loc[:, c] = pandatools.series_blank_na(self.df.loc[:, c]) self.df_model.dataChanged.emit() def sync(self): self.setWindowTitle("{}".format(self.df_model.filePath)) self.dialog_export.comboBoxSource.setModel( create_standard_item_model([self.df_model.filePath])) self._df_model_transposed = None if self._df_model is not None: self.widget.setModel(self._df_model) def save(self): self.dialog_export.set_destination_path_from_source() self.dialog_export.export()
class TestWidget(QtGui.QWidget): def __init__(self, parent=None): super(TestWidget, self).__init__(parent) #FIXME: Make resize adapt to users screen. self.resize(1680, 756) self.move(0, 0) self.df = pandas.DataFrame() self.dataModel = None # init the data view's self.dataTableView = DataTableWidget(self) # self.dataTableView.setSortingEnabled(True) # self.dataTableView.setAlternatingRowColors(True) self.dataListView = QtGui.QListView(self) self.dataListView.setAlternatingRowColors(True) self.dataComboBox = QtGui.QComboBox(self) # make combobox to choose the model column for dataComboBox and dataListView self.chooseColumnComboBox = QtGui.QComboBox(self) self.buttonCsvData = QtGui.QPushButton("load csv data") self.buttonRandomData = QtGui.QPushButton("load random data") importDialog = CSVImportDialog(self) importDialog.load.connect(self.updateModel) self.buttonCsvData.clicked.connect(lambda: importDialog.show()) self.buttonRandomData.clicked.connect(lambda: self.setDataFrame( getRandomData(rows=100, columns=100) )) self.exportDialog = CSVExportDialog(self) self.buttonCSVExport = QtGui.QPushButton("export to csv") self.buttonCSVExport.clicked.connect(self._exportModel) self.buttonLayout = QtGui.QHBoxLayout() self.buttonLayout.addWidget(self.buttonCsvData) self.buttonLayout.addWidget(self.buttonCSVExport) self.buttonLayout.addWidget(self.buttonRandomData) self.mainLayout = QtGui.QVBoxLayout() self.setLayout(self.mainLayout) self.mainLayout.addLayout(self.buttonLayout) self.mainLayout.addWidget(self.dataTableView) self.spinbox = QtGui.QSpinBox() self.mainLayout.addWidget(self.spinbox) self.spinbox.setMaximum(99999999999) self.spinbox.setValue(99999999999) self.rightLayout = QtGui.QVBoxLayout() self.chooseColumLayout = QtGui.QHBoxLayout() self.mainLayout.addLayout(self.rightLayout) self.rightLayout.addLayout(self.chooseColumLayout) self.chooseColumLayout.addWidget(QtGui.QLabel("Choose column:")) self.chooseColumLayout.addWidget(self.chooseColumnComboBox) self.rightLayout.addWidget(self.dataListView) self.rightLayout.addWidget(self.dataComboBox) self.tableViewColumnDtypes = QtGui.QTableView(self) self.rightLayout.addWidget(QtGui.QLabel('dtypes')) self.rightLayout.addWidget(self.tableViewColumnDtypes) self.buttonGoToColumn = QtGui.QPushButton("go to column") self.rightLayout.addWidget(self.buttonGoToColumn) self.buttonGoToColumn.clicked.connect(self.goToColumn) self.buttonSetFilter = QtGui.QPushButton("set filter") self.rightLayout.addWidget(self.buttonSetFilter) self.buttonSetFilter.clicked.connect(self.setFilter) self.buttonClearFilter = QtGui.QPushButton("clear filter") self.rightLayout.addWidget(self.buttonClearFilter) self.buttonClearFilter.clicked.connect(self.clearFilter) self.lineEditFilterCondition = QtGui.QLineEdit("freeSearch('am')") self.rightLayout.addWidget(self.lineEditFilterCondition) self.chooseColumnComboBox.currentIndexChanged.connect(self.setModelColumn) self.dataListView.mouseReleaseEvent = self.mouseReleaseEvent self.dropLineEdit = DropLineEdit("drop data from table here", self) self.rightLayout.addWidget(self.dropLineEdit) self.dropWidget = ComplexDropWidget(self) self.dropWidget.dropRecieved.connect(self.processDataDrops) self.rightLayout.addWidget(self.dropWidget) @Slot('QMimeData') def processDataDrops(self, mimeData): """if you have more complicated stuff to do and you want to match some models, might be possible like that""" mimeDataPayload = mimeData.data() if isinstance(mimeDataPayload, PandasCellPayload): if self.dataModel is not None: if hex(id(self.dataModel)) == mimeDataPayload.parentId: self.dropWidget.setText("complex stuff done after drop event. {0}".format(mimeDataPayload.column)) def setDataFrame(self, dataFrame): self.df = dataFrame dataModel = DataFrameModel() dataModel.setDataFrame(self.df) self.dataModel = dataModel self.dataListView.setModel(dataModel) self.dataTableView.setViewModel(dataModel) self.dataComboBox.setModel(dataModel) # self.dataTableView.resizeColumnsToContents() # create a simple item model for our choosing combobox columnModel = QtGui.QStandardItemModel() for column in self.df.columns: columnModel.appendRow(QtGui.QStandardItem(column)) self.chooseColumnComboBox.setModel(columnModel) self.tableViewColumnDtypes.setModel(dataModel.columnDtypeModel()) self.tableViewColumnDtypes.horizontalHeader().setDefaultSectionSize(200) self.tableViewColumnDtypes.setItemDelegateForColumn(1, DtypeComboDelegate(self.tableViewColumnDtypes)) dataModel.changingDtypeFailed.connect(self.changeColumnValue) @Slot() def _exportModel(self): model = self.dataTableView.view().model() self.exportDialog.setExportModel(model) self.exportDialog.show() @Slot('QAbstractItemModel') def updateModel(self, model): self.dataModel = model self.dataListView.setModel(model) self.dataTableView.setViewModel(model) self.dataComboBox.setModel(model) self.tableViewColumnDtypes.setModel(model.columnDtypeModel()) def setModelColumn(self, index): self.dataListView.setModelColumn(index) self.dataComboBox.setModelColumn(index) def goToColumn(self): print("go to column 7") index = self.dataTableView.view().model().index(7, 0) self.dataTableView.view().setCurrentIndex(index) def changeColumnValue(self, columnName, index, dtype): print("failed to change", columnName, "to", dtype) print(index.data(), index.isValid()) self.dataTableView.view().setCurrentIndex(index) def setFilter(self): #filterIndex = eval(self.lineEditFilterCondition.text()) search = DataSearch("Test", self.lineEditFilterCondition.text()) self.dataTableView.view().model().setFilter(search) #raise NotImplementedError def clearFilter(self): self.dataTableView.view().model().clearFilter()
class Main: def __init__(self): """ 初始化主界面 """ self.ui = loadUi("UI/main.ui") self.ui.setWindowTitle("聚类系统") self.DataHelper = None self.ui.btn_choose_data.clicked.connect(self.choose_path) self.ui.btn_set_parameter.clicked.connect(self.set_parameter) self.ui.btn_spin.addItems( ["KMeans", "GMM", "DBSCAN", "OPTICS","BIRCH", "MeanShift", "CLIQUE"]) self.ui.btn_run.clicked.connect(self.run) self.cluster = ClusterHelper() self.ui.btn_show_image.clicked.connect(self.show_image) def show_image(self): """ 展示聚类结果 """ try: self.cluster.imshow() except: QMessageBox.about(self.ui, "展示失败", "请先训练你的聚类器") def choose_path(self): """ 选择数据集 """ file_name = QtWidgets.QFileDialog.getOpenFileName( self.ui, "请选择你要打开数据的名字", "./data/", "Csv files(*.csv)") file_name = file_name[0] self.DataHelper = DataHelper(file_name) name = file_name.split("/")[-1] self.ui.ldata_name.setText(name) self.show_information() self.show_data() def show_information(self): """ 显示数据集的基本信息 """ self.ui.ldata_shape.setText(str(self.DataHelper.shape)) self.ui.ldata_class.setText(str(self.DataHelper.class_)) def set_parameter(self): """ 设置分类器 """ currentText = self.ui.btn_spin.currentText() self.newWindow = SecondWindow(algorithm=currentText) self.newWindow.btn_yes.clicked.connect(self.get_parameter) self.newWindow.show() def get_parameter(self): """ 获得参数信息 """ self.newWindow.window_exit() self.ui.tmessage_show.setText(self.newWindow.message) currentText = self.ui.btn_spin.currentText() param_dict = [eval(line.split(":")[1]) for line in self.newWindow.message.split("\n")[1:-1]] self.cluster.set_Cluster(currentText, param_dict) def show_data(self): """ 展示读取进来的数据 """ self.widget = DataTableWidget(self.ui) model = DataFrameModel() model.setDataFrame(self.DataHelper.data) self.widget.setViewModel(model) self.widget.move(30, 200) self.widget.resize(350, 350) self.widget.show() def run(self): """ 运行聚类算法 """ if(self.DataHelper == None): QMessageBox.about(self.ui, "运行失败", "请选择你的数据集") elif(self.cluster.cluster == None): QMessageBox.about(self.ui, "运行失败", "请初始化你的聚类器") else: self.cluster.fit(self.DataHelper.data) score = self.cluster.get_score() text = "" for item in score.items(): text += item[0] + str(item[1]) + "\n" self.ui.t_ans.setText(text)
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) MainWindow.setAutoFillBackground(False) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout_6 = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout_6.setObjectName("gridLayout_6") spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem, 1, 0, 1, 10) self.initDataButton = QtWidgets.QPushButton(self.centralwidget) self.initDataButton.setObjectName("initDataButton") self.gridLayout_6.addWidget(self.initDataButton, 2, 3, 1, 1) spacerItem1 = QtWidgets.QSpacerItem(18, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem1, 2, 5, 1, 1) self.plotButton = QtWidgets.QPushButton(self.centralwidget) self.plotButton.setObjectName("plotButton") self.gridLayout_6.addWidget(self.plotButton, 2, 8, 1, 1) self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.tab.sizePolicy().hasHeightForWidth()) self.tab.setSizePolicy(sizePolicy) self.tab.setObjectName("tab") self.gridLayout_3 = QtWidgets.QGridLayout(self.tab) self.gridLayout_3.setContentsMargins(0, 0, 0, 0) self.gridLayout_3.setObjectName("gridLayout_3") self.formLayout = QtWidgets.QFormLayout() self.formLayout.setContentsMargins(10, -1, -1, 0) self.formLayout.setVerticalSpacing(0) self.formLayout.setObjectName("formLayout") spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.formLayout.setItem(0, QtWidgets.QFormLayout.SpanningRole, spacerItem2) self.pushButton_openfile = QtWidgets.QPushButton(self.tab) self.pushButton_openfile.setObjectName("pushButton_openfile") self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.pushButton_openfile) spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.formLayout.setItem(1, QtWidgets.QFormLayout.FieldRole, spacerItem3) spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.formLayout.setItem(2, QtWidgets.QFormLayout.SpanningRole, spacerItem4) self.gridLayout_3.addLayout(self.formLayout, 0, 0, 1, 1) self.formLayout_2 = QtWidgets.QFormLayout() self.formLayout_2.setObjectName("formLayout_2") self.label_4 = QtWidgets.QLabel(self.tab) self.label_4.setObjectName("label_4") self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_4) self.dataDescTable = QtWidgets.QTableWidget(self.tab) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.dataDescTable.sizePolicy().hasHeightForWidth()) self.dataDescTable.setSizePolicy(sizePolicy) self.dataDescTable.setSizeAdjustPolicy( QtWidgets.QAbstractScrollArea.AdjustToContents) self.dataDescTable.setEditTriggers( QtWidgets.QAbstractItemView.NoEditTriggers) self.dataDescTable.setShowGrid(True) self.dataDescTable.setWordWrap(False) self.dataDescTable.setRowCount(0) self.dataDescTable.setObjectName("dataDescTable") self.dataDescTable.setColumnCount(0) self.dataDescTable.horizontalHeader().setDefaultSectionSize(50) self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.SpanningRole, self.dataDescTable) self.gridLayout_3.addLayout(self.formLayout_2, 1, 0, 1, 1) self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.gridLayout = QtWidgets.QGridLayout(self.tab_2) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setObjectName("gridLayout") self.groupBox_2 = QtWidgets.QGroupBox(self.tab_2) self.groupBox_2.setObjectName("groupBox_2") self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_2) self.gridLayout_5.setObjectName("gridLayout_5") self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.radioButton_ignorenan = QtWidgets.QRadioButton(self.groupBox_2) self.radioButton_ignorenan.setChecked(True) self.radioButton_ignorenan.setObjectName("radioButton_ignorenan") self.horizontalLayout_3.addWidget(self.radioButton_ignorenan) self.radioButton_delnan = QtWidgets.QRadioButton(self.groupBox_2) self.radioButton_delnan.setChecked(False) self.radioButton_delnan.setObjectName("radioButton_delnan") self.horizontalLayout_3.addWidget(self.radioButton_delnan) self.radioButton_fillnan = QtWidgets.QRadioButton(self.groupBox_2) self.radioButton_fillnan.setObjectName("radioButton_fillnan") self.horizontalLayout_3.addWidget(self.radioButton_fillnan) self.gridLayout_5.addLayout(self.horizontalLayout_3, 0, 0, 1, 6) self.checkNaNButton = QtWidgets.QPushButton(self.groupBox_2) self.checkNaNButton.setObjectName("checkNaNButton") self.gridLayout_5.addWidget(self.checkNaNButton, 1, 0, 1, 1) self.repealButton_nan = QtWidgets.QPushButton(self.groupBox_2) self.repealButton_nan.setObjectName("repealButton_nan") self.gridLayout_5.addWidget(self.repealButton_nan, 1, 4, 1, 1) spacerItem5 = QtWidgets.QSpacerItem(146, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_5.addItem(spacerItem5, 1, 5, 1, 1) self.okButton_nan = QtWidgets.QPushButton(self.groupBox_2) self.okButton_nan.setObjectName("okButton_nan") self.gridLayout_5.addWidget(self.okButton_nan, 1, 2, 1, 1) spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_5.addItem(spacerItem6, 1, 1, 1, 1) spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_5.addItem(spacerItem7, 1, 3, 1, 1) self.gridLayout.addWidget(self.groupBox_2, 0, 0, 1, 1) self.groupBox_3 = QtWidgets.QGroupBox(self.tab_2) self.groupBox_3.setObjectName("groupBox_3") self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox_3) self.gridLayout_4.setObjectName("gridLayout_4") spacerItem8 = QtWidgets.QSpacerItem(232, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_4.addItem(spacerItem8, 3, 5, 1, 1) self.initButton_nondim = QtWidgets.QPushButton(self.groupBox_3) self.initButton_nondim.setObjectName("initButton_nondim") self.gridLayout_4.addWidget(self.initButton_nondim, 3, 4, 1, 1) self.okButton_nondim = QtWidgets.QPushButton(self.groupBox_3) self.okButton_nondim.setObjectName("okButton_nondim") self.gridLayout_4.addWidget(self.okButton_nondim, 3, 0, 1, 1) self.repealButton_nondim = QtWidgets.QPushButton(self.groupBox_3) self.repealButton_nondim.setObjectName("repealButton_nondim") self.gridLayout_4.addWidget(self.repealButton_nondim, 3, 2, 1, 1) spacerItem9 = QtWidgets.QSpacerItem(74, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_4.addItem(spacerItem9, 3, 1, 1, 1) spacerItem10 = QtWidgets.QSpacerItem(73, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_4.addItem(spacerItem10, 3, 3, 1, 1) self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.radioButton_ignorenondim = QtWidgets.QRadioButton(self.groupBox_3) self.radioButton_ignorenondim.setObjectName("radioButton_ignorenondim") self.horizontalLayout_4.addWidget(self.radioButton_ignorenondim) self.radioButton_zstandard = QtWidgets.QRadioButton(self.groupBox_3) self.radioButton_zstandard.setChecked(True) self.radioButton_zstandard.setObjectName("radioButton_zstandard") self.horizontalLayout_4.addWidget(self.radioButton_zstandard) self.radioButton_01standard = QtWidgets.QRadioButton(self.groupBox_3) self.radioButton_01standard.setObjectName("radioButton_01standard") self.horizontalLayout_4.addWidget(self.radioButton_01standard) self.radioButton_normalizer = QtWidgets.QRadioButton(self.groupBox_3) self.radioButton_normalizer.setObjectName("radioButton_normalizer") self.horizontalLayout_4.addWidget(self.radioButton_normalizer) self.gridLayout_4.addLayout(self.horizontalLayout_4, 0, 0, 1, 6) self.gridLayout.addWidget(self.groupBox_3, 1, 0, 1, 1) self.tabWidget.addTab(self.tab_2, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") self.gridLayout_8 = QtWidgets.QGridLayout(self.tab_3) self.gridLayout_8.setContentsMargins(0, 0, 0, 0) self.gridLayout_8.setObjectName("gridLayout_8") self.groupBox_2D = QtWidgets.QGroupBox(self.tab_3) self.groupBox_2D.setEnabled(True) self.groupBox_2D.setCheckable(False) self.groupBox_2D.setObjectName("groupBox_2D") self.radioButton_2Dline = QtWidgets.QRadioButton(self.groupBox_2D) self.radioButton_2Dline.setGeometry(QtCore.QRect(10, 22, 59, 16)) self.radioButton_2Dline.setChecked(True) self.radioButton_2Dline.setObjectName("radioButton_2Dline") self.radioButton_2Dhist = QtWidgets.QRadioButton(self.groupBox_2D) self.radioButton_2Dhist.setGeometry(QtCore.QRect(108, 22, 59, 16)) self.radioButton_2Dhist.setObjectName("radioButton_2Dhist") self.radioButton_2Dscatter = QtWidgets.QRadioButton(self.groupBox_2D) self.radioButton_2Dscatter.setGeometry(QtCore.QRect(10, 44, 59, 16)) self.radioButton_2Dscatter.setObjectName("radioButton_2Dscatter") self.checkBox_histfit = QtWidgets.QCheckBox(self.groupBox_2D) self.checkBox_histfit.setEnabled(False) self.checkBox_histfit.setGeometry(QtCore.QRect(108, 44, 71, 16)) self.checkBox_histfit.setObjectName("checkBox_histfit") self.gridLayout_8.addWidget(self.groupBox_2D, 1, 0, 1, 1) self.groupBox_fit = QtWidgets.QGroupBox(self.tab_3) self.groupBox_fit.setEnabled(False) self.groupBox_fit.setObjectName("groupBox_fit") self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_fit) self.gridLayout_2.setObjectName("gridLayout_2") self.label_9 = QtWidgets.QLabel(self.groupBox_fit) self.label_9.setObjectName("label_9") self.gridLayout_2.addWidget(self.label_9, 0, 0, 1, 1) self.comboBox_fitmethod = QtWidgets.QComboBox(self.groupBox_fit) self.comboBox_fitmethod.setObjectName("comboBox_fitmethod") self.comboBox_fitmethod.addItem("") self.comboBox_fitmethod.addItem("") self.comboBox_fitmethod.addItem("") self.gridLayout_2.addWidget(self.comboBox_fitmethod, 1, 1, 1, 1) self.comboBox_2d_n = QtWidgets.QComboBox(self.groupBox_fit) self.comboBox_2d_n.setEnabled(False) self.comboBox_2d_n.setEditable(True) self.comboBox_2d_n.setObjectName("comboBox_2d_n") self.comboBox_2d_n.addItem("") self.comboBox_2d_n.addItem("") self.comboBox_2d_n.addItem("") self.comboBox_2d_n.addItem("") self.comboBox_2d_n.addItem("") self.gridLayout_2.addWidget(self.comboBox_2d_n, 2, 1, 1, 1) self.label_10 = QtWidgets.QLabel(self.groupBox_fit) self.label_10.setObjectName("label_10") self.gridLayout_2.addWidget(self.label_10, 1, 0, 1, 1) self.label_11 = QtWidgets.QLabel(self.groupBox_fit) self.label_11.setObjectName("label_11") self.gridLayout_2.addWidget(self.label_11, 2, 0, 1, 1) self.checkBox_fit = QtWidgets.QCheckBox(self.groupBox_fit) self.checkBox_fit.setEnabled(False) self.checkBox_fit.setText("") self.checkBox_fit.setObjectName("checkBox_fit") self.gridLayout_2.addWidget(self.checkBox_fit, 0, 1, 1, 1) self.gridLayout_8.addWidget(self.groupBox_fit, 1, 1, 2, 1) self.groupBox_3D = QtWidgets.QGroupBox(self.tab_3) self.groupBox_3D.setEnabled(False) self.groupBox_3D.setObjectName("groupBox_3D") self.radioButton_3Dline = QtWidgets.QRadioButton(self.groupBox_3D) self.radioButton_3Dline.setGeometry(QtCore.QRect(10, 37, 59, 16)) self.radioButton_3Dline.setChecked(True) self.radioButton_3Dline.setObjectName("radioButton_3Dline") self.radioButton_3Dsurface = QtWidgets.QRadioButton(self.groupBox_3D) self.radioButton_3Dsurface.setGeometry(QtCore.QRect(147, 37, 59, 16)) self.radioButton_3Dsurface.setObjectName("radioButton_3Dsurface") self.radioButton_3Dscatter = QtWidgets.QRadioButton(self.groupBox_3D) self.radioButton_3Dscatter.setGeometry(QtCore.QRect(79, 37, 59, 16)) self.radioButton_3Dscatter.setObjectName("radioButton_3Dscatter") self.gridLayout_8.addWidget(self.groupBox_3D, 2, 0, 1, 1) self.groupBox = QtWidgets.QGroupBox(self.tab_3) self.groupBox.setObjectName("groupBox") self.gridLayout_7 = QtWidgets.QGridLayout(self.groupBox) self.gridLayout_7.setObjectName("gridLayout_7") self.lineEdit_datax = QtWidgets.QLineEdit(self.groupBox) self.lineEdit_datax.setObjectName("lineEdit_datax") self.gridLayout_7.addWidget(self.lineEdit_datax, 1, 1, 1, 1) self.label_8 = QtWidgets.QLabel(self.groupBox) self.label_8.setObjectName("label_8") self.gridLayout_7.addWidget(self.label_8, 1, 4, 1, 1) self.label_6 = QtWidgets.QLabel(self.groupBox) self.label_6.setInputMethodHints(QtCore.Qt.ImhNone) self.label_6.setScaledContents(False) self.label_6.setWordWrap(True) self.label_6.setObjectName("label_6") self.gridLayout_7.addWidget(self.label_6, 0, 0, 1, 6) self.lineEdit_dataz = QtWidgets.QLineEdit(self.groupBox) self.lineEdit_dataz.setEnabled(False) self.lineEdit_dataz.setObjectName("lineEdit_dataz") self.gridLayout_7.addWidget(self.lineEdit_dataz, 1, 5, 1, 1) self.lineEdit_datay = QtWidgets.QLineEdit(self.groupBox) self.lineEdit_datay.setObjectName("lineEdit_datay") self.gridLayout_7.addWidget(self.lineEdit_datay, 1, 3, 1, 1) self.label_7 = QtWidgets.QLabel(self.groupBox) self.label_7.setObjectName("label_7") self.gridLayout_7.addWidget(self.label_7, 1, 2, 1, 1) self.label_5 = QtWidgets.QLabel(self.groupBox) self.label_5.setObjectName("label_5") self.gridLayout_7.addWidget(self.label_5, 1, 0, 1, 1) self.gridLayout_8.addWidget(self.groupBox, 3, 0, 1, 2) self.groupBox_6 = QtWidgets.QGroupBox(self.tab_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.groupBox_6.sizePolicy().hasHeightForWidth()) self.groupBox_6.setSizePolicy(sizePolicy) self.groupBox_6.setObjectName("groupBox_6") self.gridLayout_11 = QtWidgets.QGridLayout(self.groupBox_6) self.gridLayout_11.setObjectName("gridLayout_11") self.radioButton_2D = QtWidgets.QRadioButton(self.groupBox_6) self.radioButton_2D.setChecked(True) self.radioButton_2D.setObjectName("radioButton_2D") self.gridLayout_11.addWidget(self.radioButton_2D, 0, 0, 1, 1) self.radioButton_3D = QtWidgets.QRadioButton(self.groupBox_6) self.radioButton_3D.setObjectName("radioButton_3D") self.gridLayout_11.addWidget(self.radioButton_3D, 0, 1, 1, 1) self.gridLayout_8.addWidget(self.groupBox_6, 0, 0, 1, 2) self.tabWidget.addTab(self.tab_3, "") self.gridLayout_6.addWidget(self.tabWidget, 0, 0, 1, 10) self.saveDataButton = QtWidgets.QPushButton(self.centralwidget) self.saveDataButton.setObjectName("saveDataButton") self.gridLayout_6.addWidget(self.saveDataButton, 2, 6, 1, 1) spacerItem11 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.gridLayout_6.addItem(spacerItem11, 0, 10, 4, 1) spacerItem12 = QtWidgets.QSpacerItem(18, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem12, 2, 0, 1, 1) spacerItem13 = QtWidgets.QSpacerItem(18, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem13, 2, 7, 1, 1) spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem14, 3, 0, 1, 10) self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) self.textBrowser.setEnabled(True) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.textBrowser.sizePolicy().hasHeightForWidth()) self.textBrowser.setSizePolicy(sizePolicy) self.textBrowser.setSizeAdjustPolicy( QtWidgets.QAbstractScrollArea.AdjustToContentsOnFirstShow) self.textBrowser.setReadOnly(True) self.textBrowser.setObjectName("textBrowser") self.gridLayout_6.addWidget(self.textBrowser, 4, 0, 1, 12) spacerItem15 = QtWidgets.QSpacerItem(17, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem15, 2, 9, 1, 1) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setObjectName("label_2") self.horizontalLayout_2.addWidget(self.label_2) self.filenameLabel = QtWidgets.QLabel(self.centralwidget) self.filenameLabel.setText("") self.filenameLabel.setObjectName("filenameLabel") self.horizontalLayout_2.addWidget(self.filenameLabel) spacerItem16 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem16) self.label = QtWidgets.QLabel(self.centralwidget) self.label.setObjectName("label") self.horizontalLayout_2.addWidget(self.label) self.fileformatLabel = QtWidgets.QLabel(self.centralwidget) self.fileformatLabel.setText("") self.fileformatLabel.setObjectName("fileformatLabel") self.horizontalLayout_2.addWidget(self.fileformatLabel) spacerItem17 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem17) self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setObjectName("label_3") self.horizontalLayout_2.addWidget(self.label_3) self.dataDimLabel = QtWidgets.QLabel(self.centralwidget) self.dataDimLabel.setText("") self.dataDimLabel.setObjectName("dataDimLabel") self.horizontalLayout_2.addWidget(self.dataDimLabel) self.verticalLayout.addLayout(self.horizontalLayout_2) self.tableWidget = DataTableWidget(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.tableWidget.sizePolicy().hasHeightForWidth()) self.tableWidget.setSizePolicy(sizePolicy) self.tableWidget.setObjectName("tableWidget") self.verticalLayout.addWidget(self.tableWidget) self.gridLayout_6.addLayout(self.verticalLayout, 0, 11, 4, 1) self.pushButton_refresh = QtWidgets.QPushButton(self.centralwidget) self.pushButton_refresh.setObjectName("pushButton_refresh") self.gridLayout_6.addWidget(self.pushButton_refresh, 2, 1, 1, 1) spacerItem18 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem18, 2, 2, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") self.menu = QtWidgets.QMenu(self.menubar) self.menu.setObjectName("menu") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.menubar.addAction(self.menu.menuAction()) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) MainWindow.setTabOrder(self.tabWidget, self.pushButton_openfile) MainWindow.setTabOrder(self.pushButton_openfile, self.pushButton_refresh) MainWindow.setTabOrder(self.pushButton_refresh, self.initDataButton) MainWindow.setTabOrder(self.initDataButton, self.saveDataButton) MainWindow.setTabOrder(self.saveDataButton, self.plotButton) MainWindow.setTabOrder(self.plotButton, self.radioButton_ignorenan) MainWindow.setTabOrder(self.radioButton_ignorenan, self.radioButton_delnan) MainWindow.setTabOrder(self.radioButton_delnan, self.radioButton_fillnan) MainWindow.setTabOrder(self.radioButton_fillnan, self.checkNaNButton) MainWindow.setTabOrder(self.checkNaNButton, self.okButton_nan) MainWindow.setTabOrder(self.okButton_nan, self.repealButton_nan) MainWindow.setTabOrder(self.repealButton_nan, self.radioButton_ignorenondim) MainWindow.setTabOrder(self.radioButton_ignorenondim, self.radioButton_zstandard) MainWindow.setTabOrder(self.radioButton_zstandard, self.radioButton_01standard) MainWindow.setTabOrder(self.radioButton_01standard, self.radioButton_normalizer) MainWindow.setTabOrder(self.radioButton_normalizer, self.okButton_nondim) MainWindow.setTabOrder(self.okButton_nondim, self.radioButton_2D) MainWindow.setTabOrder(self.radioButton_2D, self.radioButton_3D) MainWindow.setTabOrder(self.radioButton_3D, self.radioButton_2Dline) MainWindow.setTabOrder(self.radioButton_2Dline, self.radioButton_3Dline) MainWindow.setTabOrder(self.radioButton_3Dline, self.lineEdit_datax) MainWindow.setTabOrder(self.lineEdit_datax, self.lineEdit_datay) MainWindow.setTabOrder(self.lineEdit_datay, self.lineEdit_dataz) MainWindow.setTabOrder(self.lineEdit_dataz, self.textBrowser)
from qtpandas.excepthook import excepthook # Use QtGui from the compat module to take care if correct sip version, etc. from qtpandas.compat import QtGui from qtpandas.models.DataFrameModel import DataFrameModel from qtpandas.views.DataTableView import DataTableWidget # from qtpandas.views._ui import icons_rc sys.excepthook = excepthook # Setup a new empty model model = DataFrameModel() # Setup an application and create a table view widget app = QtGui.QApplication([]) widget = DataTableWidget() widget.resize(800, 600) widget.show() # Asign the created model""" widget.setViewModel(model) # Create some test data data = { 'A': [10, 11, 12], 'B': [20, 21, 22], 'C': ['Peter Pan', 'Cpt. Hook', 'Tinkerbell'] } df = pandas.DataFrame(data) # Convert the column to the numpy.int8 datatype to test the delegates in the # table int8 is limited to -128-127
class ResultWindow(QWidget): def __init__(self): super(self.__class__, self).__init__() self.setup_ui() def setup_ui(self): self.setWindowTitle("查詢結果") self.setFont(PyQt5.QtGui.QFont("Times New Roman", 11)) self.buttonCopy = QPushButton("複製查詢結果 (Ctrl+C)") self.buttonCopy.clicked.connect(self.copy) self.labelInfo = QLabel("") self.shortcut = QShortcut(PyQt5.QtGui.QKeySequence("Ctrl+C"), self) self.shortcut.activated.connect(self.copy) self.formLayout = QFormLayout() self.formLayout.addRow(self.buttonCopy, self.labelInfo) self.widget = DataTableWidget() self.widget.setButtonsVisible(False) self.widget.setMinimumSize(600, 600) self.vbox = QVBoxLayout() self.vbox.addLayout(self.formLayout) self.vbox.addWidget(self.widget) self.setLayout(self.vbox) def update(self, data): self.df = data self.labelInfo.setText("") self.model = DataFrameModel() self.widget.resize(self.widget.sizeHint()) self.widget.show() self.widget.setViewModel(self.model) self.model.setDataFrame(data) def copy(self): count = 0 indexes = self.widget.tableView.selectionModel().selectedRows() if len(indexes) > 0: rows = [index.row() for index in indexes] count = len(indexes) else: rows = [i for i in range(self.widget.tableView.model().rowCount())] count = self.widget.tableView.model().rowCount() s = '' for i in rows: r = self.df.iloc[[i]] for v in r.values[0].astype(str): s += (v + '\t') s = s[:-1] + '\n' pyperclip.copy(s[:-1]) self.labelInfo.setText(str(count) + " 筆資料已複製至剪貼簿")
def __init__(self, parent=None): super(TestWidget, self).__init__(parent) #FIXME: Make resize adapt to users screen. self.resize(1680, 756) self.move(0, 0) self.df = pandas.DataFrame() self.dataModel = None # init the data view's self.dataTableView = DataTableWidget(self) # self.dataTableView.setSortingEnabled(True) # self.dataTableView.setAlternatingRowColors(True) self.dataListView = QtGui.QListView(self) self.dataListView.setAlternatingRowColors(True) self.dataComboBox = QtGui.QComboBox(self) # make combobox to choose the model column for dataComboBox and dataListView self.chooseColumnComboBox = QtGui.QComboBox(self) self.buttonCsvData = QtGui.QPushButton("load csv data") self.buttonRandomData = QtGui.QPushButton("load random data") importDialog = CSVImportDialog(self) importDialog.load.connect(self.updateModel) self.buttonCsvData.clicked.connect(lambda: importDialog.show()) self.buttonRandomData.clicked.connect(lambda: self.setDataFrame( getRandomData(rows=100, columns=100) )) self.exportDialog = CSVExportDialog(self) self.buttonCSVExport = QtGui.QPushButton("export to csv") self.buttonCSVExport.clicked.connect(self._exportModel) self.buttonLayout = QtGui.QHBoxLayout() self.buttonLayout.addWidget(self.buttonCsvData) self.buttonLayout.addWidget(self.buttonCSVExport) self.buttonLayout.addWidget(self.buttonRandomData) self.mainLayout = QtGui.QVBoxLayout() self.setLayout(self.mainLayout) self.mainLayout.addLayout(self.buttonLayout) self.mainLayout.addWidget(self.dataTableView) self.spinbox = QtGui.QSpinBox() self.mainLayout.addWidget(self.spinbox) self.spinbox.setMaximum(99999999999) self.spinbox.setValue(99999999999) self.rightLayout = QtGui.QVBoxLayout() self.chooseColumLayout = QtGui.QHBoxLayout() self.mainLayout.addLayout(self.rightLayout) self.rightLayout.addLayout(self.chooseColumLayout) self.chooseColumLayout.addWidget(QtGui.QLabel("Choose column:")) self.chooseColumLayout.addWidget(self.chooseColumnComboBox) self.rightLayout.addWidget(self.dataListView) self.rightLayout.addWidget(self.dataComboBox) self.tableViewColumnDtypes = QtGui.QTableView(self) self.rightLayout.addWidget(QtGui.QLabel('dtypes')) self.rightLayout.addWidget(self.tableViewColumnDtypes) self.buttonGoToColumn = QtGui.QPushButton("go to column") self.rightLayout.addWidget(self.buttonGoToColumn) self.buttonGoToColumn.clicked.connect(self.goToColumn) self.buttonSetFilter = QtGui.QPushButton("set filter") self.rightLayout.addWidget(self.buttonSetFilter) self.buttonSetFilter.clicked.connect(self.setFilter) self.buttonClearFilter = QtGui.QPushButton("clear filter") self.rightLayout.addWidget(self.buttonClearFilter) self.buttonClearFilter.clicked.connect(self.clearFilter) self.lineEditFilterCondition = QtGui.QLineEdit("freeSearch('am')") self.rightLayout.addWidget(self.lineEditFilterCondition) self.chooseColumnComboBox.currentIndexChanged.connect(self.setModelColumn) self.dataListView.mouseReleaseEvent = self.mouseReleaseEvent self.dropLineEdit = DropLineEdit("drop data from table here", self) self.rightLayout.addWidget(self.dropLineEdit) self.dropWidget = ComplexDropWidget(self) self.dropWidget.dropRecieved.connect(self.processDataDrops) self.rightLayout.addWidget(self.dropWidget)
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) MainWindow.setAutoFillBackground(False) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout_6 = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout_6.setObjectName("gridLayout_6") spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem, 1, 0, 1, 10) self.initDataButton = QtWidgets.QPushButton(self.centralwidget) self.initDataButton.setObjectName("initDataButton") self.gridLayout_6.addWidget(self.initDataButton, 2, 3, 1, 1) spacerItem1 = QtWidgets.QSpacerItem(18, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem1, 2, 5, 1, 1) self.plotButton = QtWidgets.QPushButton(self.centralwidget) self.plotButton.setObjectName("plotButton") self.gridLayout_6.addWidget(self.plotButton, 2, 8, 1, 1) self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) self.tabWidget.setObjectName("tabWidget") self.tab = QtWidgets.QWidget() sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.tab.sizePolicy().hasHeightForWidth()) self.tab.setSizePolicy(sizePolicy) self.tab.setObjectName("tab") self.gridLayout_3 = QtWidgets.QGridLayout(self.tab) self.gridLayout_3.setContentsMargins(0, 0, 0, 0) self.gridLayout_3.setObjectName("gridLayout_3") self.formLayout = QtWidgets.QFormLayout() self.formLayout.setContentsMargins(10, -1, -1, 0) self.formLayout.setVerticalSpacing(0) self.formLayout.setObjectName("formLayout") spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.formLayout.setItem(0, QtWidgets.QFormLayout.SpanningRole, spacerItem2) self.pushButton_openfile = QtWidgets.QPushButton(self.tab) self.pushButton_openfile.setObjectName("pushButton_openfile") self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.pushButton_openfile) spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.formLayout.setItem(1, QtWidgets.QFormLayout.FieldRole, spacerItem3) spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.formLayout.setItem(2, QtWidgets.QFormLayout.SpanningRole, spacerItem4) self.gridLayout_3.addLayout(self.formLayout, 0, 0, 1, 1) self.formLayout_2 = QtWidgets.QFormLayout() self.formLayout_2.setObjectName("formLayout_2") self.label_4 = QtWidgets.QLabel(self.tab) self.label_4.setObjectName("label_4") self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_4) self.dataDescTable = QtWidgets.QTableWidget(self.tab) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.dataDescTable.sizePolicy().hasHeightForWidth()) self.dataDescTable.setSizePolicy(sizePolicy) self.dataDescTable.setSizeAdjustPolicy( QtWidgets.QAbstractScrollArea.AdjustToContents) self.dataDescTable.setEditTriggers( QtWidgets.QAbstractItemView.NoEditTriggers) self.dataDescTable.setShowGrid(True) self.dataDescTable.setWordWrap(False) self.dataDescTable.setRowCount(0) self.dataDescTable.setObjectName("dataDescTable") self.dataDescTable.setColumnCount(0) self.dataDescTable.horizontalHeader().setDefaultSectionSize(50) self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.SpanningRole, self.dataDescTable) self.gridLayout_3.addLayout(self.formLayout_2, 1, 0, 1, 1) self.tabWidget.addTab(self.tab, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.gridLayout = QtWidgets.QGridLayout(self.tab_2) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setObjectName("gridLayout") self.groupBox_2 = QtWidgets.QGroupBox(self.tab_2) self.groupBox_2.setObjectName("groupBox_2") self.gridLayout_5 = QtWidgets.QGridLayout(self.groupBox_2) self.gridLayout_5.setObjectName("gridLayout_5") self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.radioButton_ignorenan = QtWidgets.QRadioButton(self.groupBox_2) self.radioButton_ignorenan.setChecked(True) self.radioButton_ignorenan.setObjectName("radioButton_ignorenan") self.horizontalLayout_3.addWidget(self.radioButton_ignorenan) self.radioButton_delnan = QtWidgets.QRadioButton(self.groupBox_2) self.radioButton_delnan.setChecked(False) self.radioButton_delnan.setObjectName("radioButton_delnan") self.horizontalLayout_3.addWidget(self.radioButton_delnan) self.radioButton_fillnan = QtWidgets.QRadioButton(self.groupBox_2) self.radioButton_fillnan.setObjectName("radioButton_fillnan") self.horizontalLayout_3.addWidget(self.radioButton_fillnan) self.gridLayout_5.addLayout(self.horizontalLayout_3, 0, 0, 1, 6) self.checkNaNButton = QtWidgets.QPushButton(self.groupBox_2) self.checkNaNButton.setObjectName("checkNaNButton") self.gridLayout_5.addWidget(self.checkNaNButton, 1, 0, 1, 1) self.repealButton_nan = QtWidgets.QPushButton(self.groupBox_2) self.repealButton_nan.setObjectName("repealButton_nan") self.gridLayout_5.addWidget(self.repealButton_nan, 1, 4, 1, 1) spacerItem5 = QtWidgets.QSpacerItem(146, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_5.addItem(spacerItem5, 1, 5, 1, 1) self.okButton_nan = QtWidgets.QPushButton(self.groupBox_2) self.okButton_nan.setObjectName("okButton_nan") self.gridLayout_5.addWidget(self.okButton_nan, 1, 2, 1, 1) spacerItem6 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_5.addItem(spacerItem6, 1, 1, 1, 1) spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_5.addItem(spacerItem7, 1, 3, 1, 1) self.gridLayout.addWidget(self.groupBox_2, 0, 0, 1, 1) self.groupBox_3 = QtWidgets.QGroupBox(self.tab_2) self.groupBox_3.setObjectName("groupBox_3") self.gridLayout_4 = QtWidgets.QGridLayout(self.groupBox_3) self.gridLayout_4.setObjectName("gridLayout_4") spacerItem8 = QtWidgets.QSpacerItem(232, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_4.addItem(spacerItem8, 3, 5, 1, 1) self.initButton_nondim = QtWidgets.QPushButton(self.groupBox_3) self.initButton_nondim.setObjectName("initButton_nondim") self.gridLayout_4.addWidget(self.initButton_nondim, 3, 4, 1, 1) self.okButton_nondim = QtWidgets.QPushButton(self.groupBox_3) self.okButton_nondim.setObjectName("okButton_nondim") self.gridLayout_4.addWidget(self.okButton_nondim, 3, 0, 1, 1) self.repealButton_nondim = QtWidgets.QPushButton(self.groupBox_3) self.repealButton_nondim.setObjectName("repealButton_nondim") self.gridLayout_4.addWidget(self.repealButton_nondim, 3, 2, 1, 1) spacerItem9 = QtWidgets.QSpacerItem(74, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_4.addItem(spacerItem9, 3, 1, 1, 1) spacerItem10 = QtWidgets.QSpacerItem(73, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_4.addItem(spacerItem10, 3, 3, 1, 1) self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.radioButton_ignorenondim = QtWidgets.QRadioButton(self.groupBox_3) self.radioButton_ignorenondim.setObjectName("radioButton_ignorenondim") self.horizontalLayout_4.addWidget(self.radioButton_ignorenondim) self.radioButton_zstandard = QtWidgets.QRadioButton(self.groupBox_3) self.radioButton_zstandard.setChecked(True) self.radioButton_zstandard.setObjectName("radioButton_zstandard") self.horizontalLayout_4.addWidget(self.radioButton_zstandard) self.radioButton_01standard = QtWidgets.QRadioButton(self.groupBox_3) self.radioButton_01standard.setObjectName("radioButton_01standard") self.horizontalLayout_4.addWidget(self.radioButton_01standard) self.radioButton_normalizer = QtWidgets.QRadioButton(self.groupBox_3) self.radioButton_normalizer.setObjectName("radioButton_normalizer") self.horizontalLayout_4.addWidget(self.radioButton_normalizer) self.gridLayout_4.addLayout(self.horizontalLayout_4, 0, 0, 1, 6) self.gridLayout.addWidget(self.groupBox_3, 1, 0, 1, 1) self.tabWidget.addTab(self.tab_2, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") self.gridLayout_8 = QtWidgets.QGridLayout(self.tab_3) self.gridLayout_8.setContentsMargins(0, 0, 0, 0) self.gridLayout_8.setObjectName("gridLayout_8") self.groupBox_2D = QtWidgets.QGroupBox(self.tab_3) self.groupBox_2D.setEnabled(True) self.groupBox_2D.setCheckable(False) self.groupBox_2D.setObjectName("groupBox_2D") self.radioButton_2Dline = QtWidgets.QRadioButton(self.groupBox_2D) self.radioButton_2Dline.setGeometry(QtCore.QRect(10, 22, 59, 16)) self.radioButton_2Dline.setChecked(True) self.radioButton_2Dline.setObjectName("radioButton_2Dline") self.radioButton_2Dhist = QtWidgets.QRadioButton(self.groupBox_2D) self.radioButton_2Dhist.setGeometry(QtCore.QRect(108, 22, 59, 16)) self.radioButton_2Dhist.setObjectName("radioButton_2Dhist") self.radioButton_2Dscatter = QtWidgets.QRadioButton(self.groupBox_2D) self.radioButton_2Dscatter.setGeometry(QtCore.QRect(10, 44, 59, 16)) self.radioButton_2Dscatter.setObjectName("radioButton_2Dscatter") self.checkBox_histfit = QtWidgets.QCheckBox(self.groupBox_2D) self.checkBox_histfit.setEnabled(False) self.checkBox_histfit.setGeometry(QtCore.QRect(108, 44, 71, 16)) self.checkBox_histfit.setObjectName("checkBox_histfit") self.gridLayout_8.addWidget(self.groupBox_2D, 1, 0, 1, 1) self.groupBox_fit = QtWidgets.QGroupBox(self.tab_3) self.groupBox_fit.setEnabled(False) self.groupBox_fit.setObjectName("groupBox_fit") self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_fit) self.gridLayout_2.setObjectName("gridLayout_2") self.label_9 = QtWidgets.QLabel(self.groupBox_fit) self.label_9.setObjectName("label_9") self.gridLayout_2.addWidget(self.label_9, 0, 0, 1, 1) self.comboBox_fitmethod = QtWidgets.QComboBox(self.groupBox_fit) self.comboBox_fitmethod.setObjectName("comboBox_fitmethod") self.comboBox_fitmethod.addItem("") self.comboBox_fitmethod.addItem("") self.comboBox_fitmethod.addItem("") self.gridLayout_2.addWidget(self.comboBox_fitmethod, 1, 1, 1, 1) self.comboBox_2d_n = QtWidgets.QComboBox(self.groupBox_fit) self.comboBox_2d_n.setEnabled(False) self.comboBox_2d_n.setEditable(True) self.comboBox_2d_n.setObjectName("comboBox_2d_n") self.comboBox_2d_n.addItem("") self.comboBox_2d_n.addItem("") self.comboBox_2d_n.addItem("") self.comboBox_2d_n.addItem("") self.comboBox_2d_n.addItem("") self.gridLayout_2.addWidget(self.comboBox_2d_n, 2, 1, 1, 1) self.label_10 = QtWidgets.QLabel(self.groupBox_fit) self.label_10.setObjectName("label_10") self.gridLayout_2.addWidget(self.label_10, 1, 0, 1, 1) self.label_11 = QtWidgets.QLabel(self.groupBox_fit) self.label_11.setObjectName("label_11") self.gridLayout_2.addWidget(self.label_11, 2, 0, 1, 1) self.checkBox_fit = QtWidgets.QCheckBox(self.groupBox_fit) self.checkBox_fit.setEnabled(False) self.checkBox_fit.setText("") self.checkBox_fit.setObjectName("checkBox_fit") self.gridLayout_2.addWidget(self.checkBox_fit, 0, 1, 1, 1) self.gridLayout_8.addWidget(self.groupBox_fit, 1, 1, 2, 1) self.groupBox_3D = QtWidgets.QGroupBox(self.tab_3) self.groupBox_3D.setEnabled(False) self.groupBox_3D.setObjectName("groupBox_3D") self.radioButton_3Dline = QtWidgets.QRadioButton(self.groupBox_3D) self.radioButton_3Dline.setGeometry(QtCore.QRect(10, 37, 59, 16)) self.radioButton_3Dline.setChecked(True) self.radioButton_3Dline.setObjectName("radioButton_3Dline") self.radioButton_3Dsurface = QtWidgets.QRadioButton(self.groupBox_3D) self.radioButton_3Dsurface.setGeometry(QtCore.QRect(147, 37, 59, 16)) self.radioButton_3Dsurface.setObjectName("radioButton_3Dsurface") self.radioButton_3Dscatter = QtWidgets.QRadioButton(self.groupBox_3D) self.radioButton_3Dscatter.setGeometry(QtCore.QRect(79, 37, 59, 16)) self.radioButton_3Dscatter.setObjectName("radioButton_3Dscatter") self.gridLayout_8.addWidget(self.groupBox_3D, 2, 0, 1, 1) self.groupBox = QtWidgets.QGroupBox(self.tab_3) self.groupBox.setObjectName("groupBox") self.gridLayout_7 = QtWidgets.QGridLayout(self.groupBox) self.gridLayout_7.setObjectName("gridLayout_7") self.lineEdit_datax = QtWidgets.QLineEdit(self.groupBox) self.lineEdit_datax.setObjectName("lineEdit_datax") self.gridLayout_7.addWidget(self.lineEdit_datax, 1, 1, 1, 1) self.label_8 = QtWidgets.QLabel(self.groupBox) self.label_8.setObjectName("label_8") self.gridLayout_7.addWidget(self.label_8, 1, 4, 1, 1) self.label_6 = QtWidgets.QLabel(self.groupBox) self.label_6.setInputMethodHints(QtCore.Qt.ImhNone) self.label_6.setScaledContents(False) self.label_6.setWordWrap(True) self.label_6.setObjectName("label_6") self.gridLayout_7.addWidget(self.label_6, 0, 0, 1, 6) self.lineEdit_dataz = QtWidgets.QLineEdit(self.groupBox) self.lineEdit_dataz.setEnabled(False) self.lineEdit_dataz.setObjectName("lineEdit_dataz") self.gridLayout_7.addWidget(self.lineEdit_dataz, 1, 5, 1, 1) self.lineEdit_datay = QtWidgets.QLineEdit(self.groupBox) self.lineEdit_datay.setObjectName("lineEdit_datay") self.gridLayout_7.addWidget(self.lineEdit_datay, 1, 3, 1, 1) self.label_7 = QtWidgets.QLabel(self.groupBox) self.label_7.setObjectName("label_7") self.gridLayout_7.addWidget(self.label_7, 1, 2, 1, 1) self.label_5 = QtWidgets.QLabel(self.groupBox) self.label_5.setObjectName("label_5") self.gridLayout_7.addWidget(self.label_5, 1, 0, 1, 1) self.gridLayout_8.addWidget(self.groupBox, 3, 0, 1, 2) self.groupBox_6 = QtWidgets.QGroupBox(self.tab_3) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.groupBox_6.sizePolicy().hasHeightForWidth()) self.groupBox_6.setSizePolicy(sizePolicy) self.groupBox_6.setObjectName("groupBox_6") self.gridLayout_11 = QtWidgets.QGridLayout(self.groupBox_6) self.gridLayout_11.setObjectName("gridLayout_11") self.radioButton_2D = QtWidgets.QRadioButton(self.groupBox_6) self.radioButton_2D.setChecked(True) self.radioButton_2D.setObjectName("radioButton_2D") self.gridLayout_11.addWidget(self.radioButton_2D, 0, 0, 1, 1) self.radioButton_3D = QtWidgets.QRadioButton(self.groupBox_6) self.radioButton_3D.setObjectName("radioButton_3D") self.gridLayout_11.addWidget(self.radioButton_3D, 0, 1, 1, 1) self.gridLayout_8.addWidget(self.groupBox_6, 0, 0, 1, 2) self.tabWidget.addTab(self.tab_3, "") self.gridLayout_6.addWidget(self.tabWidget, 0, 0, 1, 10) self.saveDataButton = QtWidgets.QPushButton(self.centralwidget) self.saveDataButton.setObjectName("saveDataButton") self.gridLayout_6.addWidget(self.saveDataButton, 2, 6, 1, 1) spacerItem11 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.gridLayout_6.addItem(spacerItem11, 0, 10, 4, 1) spacerItem12 = QtWidgets.QSpacerItem(18, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem12, 2, 0, 1, 1) spacerItem13 = QtWidgets.QSpacerItem(18, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem13, 2, 7, 1, 1) spacerItem14 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem14, 3, 0, 1, 10) self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) self.textBrowser.setEnabled(True) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.textBrowser.sizePolicy().hasHeightForWidth()) self.textBrowser.setSizePolicy(sizePolicy) self.textBrowser.setSizeAdjustPolicy( QtWidgets.QAbstractScrollArea.AdjustToContentsOnFirstShow) self.textBrowser.setReadOnly(True) self.textBrowser.setObjectName("textBrowser") self.gridLayout_6.addWidget(self.textBrowser, 4, 0, 1, 12) spacerItem15 = QtWidgets.QSpacerItem(17, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem15, 2, 9, 1, 1) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setObjectName("label_2") self.horizontalLayout_2.addWidget(self.label_2) self.filenameLabel = QtWidgets.QLabel(self.centralwidget) self.filenameLabel.setText("") self.filenameLabel.setObjectName("filenameLabel") self.horizontalLayout_2.addWidget(self.filenameLabel) spacerItem16 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem16) self.label = QtWidgets.QLabel(self.centralwidget) self.label.setObjectName("label") self.horizontalLayout_2.addWidget(self.label) self.fileformatLabel = QtWidgets.QLabel(self.centralwidget) self.fileformatLabel.setText("") self.fileformatLabel.setObjectName("fileformatLabel") self.horizontalLayout_2.addWidget(self.fileformatLabel) spacerItem17 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem17) self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setObjectName("label_3") self.horizontalLayout_2.addWidget(self.label_3) self.dataDimLabel = QtWidgets.QLabel(self.centralwidget) self.dataDimLabel.setText("") self.dataDimLabel.setObjectName("dataDimLabel") self.horizontalLayout_2.addWidget(self.dataDimLabel) self.verticalLayout.addLayout(self.horizontalLayout_2) self.tableWidget = DataTableWidget(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.tableWidget.sizePolicy().hasHeightForWidth()) self.tableWidget.setSizePolicy(sizePolicy) self.tableWidget.setObjectName("tableWidget") self.verticalLayout.addWidget(self.tableWidget) self.gridLayout_6.addLayout(self.verticalLayout, 0, 11, 4, 1) self.pushButton_refresh = QtWidgets.QPushButton(self.centralwidget) self.pushButton_refresh.setObjectName("pushButton_refresh") self.gridLayout_6.addWidget(self.pushButton_refresh, 2, 1, 1, 1) spacerItem18 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_6.addItem(spacerItem18, 2, 2, 1, 1) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") self.menu = QtWidgets.QMenu(self.menubar) self.menu.setObjectName("menu") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.menubar.addAction(self.menu.menuAction()) self.retranslateUi(MainWindow) self.tabWidget.setCurrentIndex(0) QtCore.QMetaObject.connectSlotsByName(MainWindow) MainWindow.setTabOrder(self.tabWidget, self.pushButton_openfile) MainWindow.setTabOrder(self.pushButton_openfile, self.pushButton_refresh) MainWindow.setTabOrder(self.pushButton_refresh, self.initDataButton) MainWindow.setTabOrder(self.initDataButton, self.saveDataButton) MainWindow.setTabOrder(self.saveDataButton, self.plotButton) MainWindow.setTabOrder(self.plotButton, self.radioButton_ignorenan) MainWindow.setTabOrder(self.radioButton_ignorenan, self.radioButton_delnan) MainWindow.setTabOrder(self.radioButton_delnan, self.radioButton_fillnan) MainWindow.setTabOrder(self.radioButton_fillnan, self.checkNaNButton) MainWindow.setTabOrder(self.checkNaNButton, self.okButton_nan) MainWindow.setTabOrder(self.okButton_nan, self.repealButton_nan) MainWindow.setTabOrder(self.repealButton_nan, self.radioButton_ignorenondim) MainWindow.setTabOrder(self.radioButton_ignorenondim, self.radioButton_zstandard) MainWindow.setTabOrder(self.radioButton_zstandard, self.radioButton_01standard) MainWindow.setTabOrder(self.radioButton_01standard, self.radioButton_normalizer) MainWindow.setTabOrder(self.radioButton_normalizer, self.okButton_nondim) MainWindow.setTabOrder(self.okButton_nondim, self.radioButton_2D) MainWindow.setTabOrder(self.radioButton_2D, self.radioButton_3D) MainWindow.setTabOrder(self.radioButton_3D, self.radioButton_2Dline) MainWindow.setTabOrder(self.radioButton_2Dline, self.radioButton_3Dline) MainWindow.setTabOrder(self.radioButton_3Dline, self.lineEdit_datax) MainWindow.setTabOrder(self.lineEdit_datax, self.lineEdit_datay) MainWindow.setTabOrder(self.lineEdit_datay, self.lineEdit_dataz) MainWindow.setTabOrder(self.lineEdit_dataz, self.textBrowser) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "数据分析工具")) self.initDataButton.setText(_translate("MainWindow", "数据初始化")) self.plotButton.setToolTip( _translate( "MainWindow", "<html><head/><body><p><span style=\" font-size:8pt;\">根据绘图设置对当前数据集进行绘图</span></p></body></html>" )) self.plotButton.setText(_translate("MainWindow", "绘图")) self.pushButton_openfile.setText(_translate("MainWindow", "选择文件")) self.label_4.setText(_translate("MainWindow", "数据基本特征信息如下:")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("MainWindow", "数据导入")) self.groupBox_2.setTitle(_translate("MainWindow", "缺失值处理")) self.radioButton_ignorenan.setText(_translate("MainWindow", "忽略")) self.radioButton_delnan.setToolTip( _translate("MainWindow", "<html><head/><body><p>删除含缺失值的样本</p></body></html>")) self.radioButton_delnan.setText(_translate("MainWindow", "删除")) self.radioButton_fillnan.setToolTip( _translate( "MainWindow", "<html><head/><body><p>使用对应特征均值来填充缺失值</p></body></html>")) self.radioButton_fillnan.setText(_translate("MainWindow", "均值代替")) self.checkNaNButton.setToolTip( _translate( "MainWindow", "<html><head/><body><p>统计含有缺失值的样本数,并给出建议操作</p></body></html>")) self.checkNaNButton.setText(_translate("MainWindow", "检查NaN值")) self.repealButton_nan.setToolTip( _translate( "MainWindow", "<html><head/><body><p><span style=\" font-size:8pt;\">撤回该操作</span></p></body></html>" )) self.repealButton_nan.setText(_translate("MainWindow", "撤回")) self.okButton_nan.setToolTip( _translate( "MainWindow", "<html><head/><body><p><span style=\" font-size:8pt;\">执行该操作</span></p></body></html>" )) self.okButton_nan.setText(_translate("MainWindow", "确认")) self.groupBox_3.setTitle(_translate("MainWindow", "无量纲化处理")) self.initButton_nondim.setText(_translate("MainWindow", "撤回初始数据")) self.okButton_nondim.setToolTip( _translate( "MainWindow", "<html><head/><body><p><span style=\" font-size:8pt;\">执行该操作</span></p></body></html>" )) self.okButton_nondim.setText(_translate("MainWindow", "确认")) self.repealButton_nondim.setToolTip( _translate("MainWindow", "<html><head/><body><p>撤回该操作</p></body></html>")) self.repealButton_nondim.setText(_translate("MainWindow", "撤回上一步")) self.radioButton_ignorenondim.setText(_translate("MainWindow", "忽略")) self.radioButton_zstandard.setToolTip( _translate( "MainWindow", "<html><head/><body><p><span style=\" font-family:\'-apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,Microsoft YaHei,Source Han Sans SC,Noto Sans CJK SC,WenQuanYi Micro Hei,sans-serif\'; font-size:8pt; color:#1a1a1a; background-color:#ffffff;\">基于特征值的均值(mean)和标准差(standard deviation)进行数据的标准化</span></p><p><span style=\" font-family:\'-apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,Microsoft YaHei,Source Han Sans SC,Noto Sans CJK SC,WenQuanYi Micro Hei,sans-serif\'; font-size:8pt; color:#1a1a1a; background-color:#ffffff;\">目的:1.对于方差非常小的属性可以增强其稳定性;2.维持稀疏矩阵中为0的条目。</span></p></body></html>" )) self.radioButton_zstandard.setText(_translate("MainWindow", "Z标准化")) self.radioButton_01standard.setToolTip( _translate( "MainWindow", "<html><head/><body><p><span style=\" font-family:\'-apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,Microsoft YaHei,Source Han Sans SC,Noto Sans CJK SC,WenQuanYi Micro Hei,sans-serif\'; font-size:8pt; color:#1a1a1a; background-color:#ffffff;\">对原始数据进行线性变换,将特征值映射成区间为[0,1]的标准值中</span></p></body></html>" )) self.radioButton_01standard.setText(_translate("MainWindow", "归一化")) self.radioButton_normalizer.setToolTip( _translate( "MainWindow", "<html><head/><body><p><span style=\" font-family:\'-apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,Microsoft YaHei,Source Han Sans SC,Noto Sans CJK SC,WenQuanYi Micro Hei,sans-serif\'; font-size:8pt; color:#1a1a1a; background-color:#ffffff;\">将每个样本缩放到单位范数(每个样本的范数为1)</span></p><p><span style=\" font-family:\'-apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,Microsoft YaHei,Source Han Sans SC,Noto Sans CJK SC,WenQuanYi Micro Hei,sans-serif\'; font-size:8pt; color:#1a1a1a; background-color:#ffffff;\">该方法主要应用于文本分类和聚类中。</span></p></body></html>" )) self.radioButton_normalizer.setText(_translate("MainWindow", "正则化")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("MainWindow", "特征预处理")) self.groupBox_2D.setTitle(_translate("MainWindow", "2D绘图设置")) self.radioButton_2Dline.setText(_translate("MainWindow", "折线图")) self.radioButton_2Dhist.setText(_translate("MainWindow", "直方图")) self.radioButton_2Dscatter.setText(_translate("MainWindow", "散点图")) self.checkBox_histfit.setToolTip( _translate( "MainWindow", "<html><head/><body><p>是否对柱状图中数据进行拟合</p></body></html>")) self.checkBox_histfit.setText(_translate("MainWindow", "密度曲线")) self.groupBox_fit.setTitle(_translate("MainWindow", "数据拟合")) self.label_9.setText(_translate("MainWindow", "是否拟合:")) self.comboBox_fitmethod.setItemText(0, _translate("MainWindow", "多项式拟合")) self.comboBox_fitmethod.setItemText(1, _translate("MainWindow", "e指数拟合")) self.comboBox_fitmethod.setItemText(2, _translate("MainWindow", "对数拟合")) self.comboBox_2d_n.setCurrentText(_translate("MainWindow", "1")) self.comboBox_2d_n.setItemText(0, _translate("MainWindow", "1")) self.comboBox_2d_n.setItemText(1, _translate("MainWindow", "2")) self.comboBox_2d_n.setItemText(2, _translate("MainWindow", "3")) self.comboBox_2d_n.setItemText(3, _translate("MainWindow", "4")) self.comboBox_2d_n.setItemText(4, _translate("MainWindow", "5")) self.label_10.setText(_translate("MainWindow", "拟合方式:")) self.label_11.setText(_translate("MainWindow", "拟合阶数:")) self.groupBox_3D.setTitle(_translate("MainWindow", "3D绘图设置")) self.radioButton_3Dline.setText(_translate("MainWindow", "折线图")) self.radioButton_3Dsurface.setText(_translate("MainWindow", "曲面图")) self.radioButton_3Dscatter.setText(_translate("MainWindow", "散点图")) self.groupBox.setTitle(_translate("MainWindow", "绘图数据")) self.lineEdit_datax.setText(_translate("MainWindow", "0")) self.label_8.setText(_translate("MainWindow", "z:")) self.label_6.setText( _translate( "MainWindow", "Tips: 请输入需要绘图的数据,可选择列标形式(从0开始)或者特征名称形式,如有多个特征,请用英文逗号,隔开!")) self.lineEdit_dataz.setText(_translate("MainWindow", "2")) self.lineEdit_datay.setText(_translate("MainWindow", "1")) self.label_7.setText(_translate("MainWindow", "y:")) self.label_5.setText(_translate("MainWindow", "x:")) self.groupBox_6.setTitle(_translate("MainWindow", "图像类型")) self.radioButton_2D.setText(_translate("MainWindow", "2D")) self.radioButton_3D.setText(_translate("MainWindow", "3D")) self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("MainWindow", "绘图设置")) self.saveDataButton.setText(_translate("MainWindow", "保存数据")) self.label_2.setText(_translate("MainWindow", "文件名称:")) self.label.setText(_translate("MainWindow", "文件格式:")) self.label_3.setText(_translate("MainWindow", "数据维度:")) self.pushButton_refresh.setToolTip( _translate("MainWindow", "<html><head/><body><p>刷新界面</p></body></html>")) self.pushButton_refresh.setText(_translate("MainWindow", "刷新")) self.menu.setTitle(_translate("MainWindow", "帮助"))