Python中的正确另存为功能

时间:2018-02-19 10:59:29

标签: python pyqt desktop-application

我有一个默认的“另存为”功能绑定到一个按钮单击,它调用一个模态窗口。 另外,我有一个函数,它将所需的数组保存为.xlsx文件。

 self.data_processing.clicked.connect(self.process)


 def process(self):
    sample = pd.read_excel(self.fileName)
    list_of_index = []
    for i in range(len(sample.columns)):
        sample2 = sample.iloc[:, lambda sample: [i]]
        sample2 = sample2.columns[0]
        list_of_index.append(sample2)
    list_of_index     
    ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
    ... ... Area where all the data is computed     ... ... ...
    ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
    workbook = xlsxwriter.Workbook('Sample.xlsx')
    worksheet1 = workbook.add_worksheet()
    worksheet2 = workbook.add_worksheet()
    worksheet3 = workbook.add_worksheet()
    worksheet4 = workbook.add_worksheet()

    row = 0

    for col, data in enumerate(fulllist):
        worksheet1.write_column(row, col, data)
    for col, data in enumerate(fulllist_percent):
        worksheet2.write_column(row, col, data)   
    for col, data in enumerate(fulllist_click):
        worksheet3.write_column(row, col, data) 
    for col, data in enumerate(additional_info):
        worksheet4.write_column(row, col, data)

    workbook.close()

基本上,我要问的是:如何将xlsx writer插入saveFile(),以便使用默认的saveAs窗口将我的数组保存为xlsx

我的用户界面代码

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(802, 996)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.dataChoose_label = QtWidgets.QLabel(self.centralwidget)
        self.dataChoose_label.setGeometry(QtCore.QRect(20, 10, 211, 31))
        font = QtGui.QFont()
        font.setPointSize(13)
        self.dataChoose_label.setFont(font)
        self.dataChoose_label.setObjectName("dataChoose_label")
        self.data_processing = QtWidgets.QPushButton(self.centralwidget)
        self.data_processing.setGeometry(QtCore.QRect(640, 50, 141, 61))
        self.data_processing.setObjectName("data_processing")
        self.paramInput_label = QtWidgets.QLabel(self.centralwidget)
        self.paramInput_label.setGeometry(QtCore.QRect(20, 70, 261, 21))
        self.paramInput_label.setObjectName("paramInput_label")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(10, 110, 771, 21))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.saveSample_label = QtWidgets.QLabel(self.centralwidget)
        self.saveSample_label.setGeometry(QtCore.QRect(10, 150, 271, 41))
        self.saveSample_label.setObjectName("saveSample_label")
        self.saveSample_btn = QtWidgets.QToolButton(self.centralwidget)
        self.saveSample_btn.setGeometry(QtCore.QRect(290, 150, 131, 41))
        self.saveSample_btn.setObjectName("saveSample_btn")
        self.line_2 = QtWidgets.QFrame(self.centralwidget)
        self.line_2.setGeometry(QtCore.QRect(10, 200, 771, 20))
        self.line_2.setFrameShape(QtWidgets.QFrame.HLine)
        self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_2.setObjectName("line_2")
        self.stringInput_label = QtWidgets.QLabel(self.centralwidget)
        self.stringInput_label.setGeometry(QtCore.QRect(20, 260, 281, 16))
        self.stringInput_label.setObjectName("stringInput_label")
        self.stringInput_label_2 = QtWidgets.QLabel(self.centralwidget)
        self.stringInput_label_2.setGeometry(QtCore.QRect(30, 270, 271, 16))
        font = QtGui.QFont()
        font.setPointSize(6)
        self.stringInput_label_2.setFont(font)
        self.stringInput_label_2.setObjectName("stringInput_label_2")
        self.stringInput_field = QtWidgets.QTextEdit(self.centralwidget)
        self.stringInput_field.setGeometry(QtCore.QRect(320, 220, 461, 121))
        self.stringInput_field.setObjectName("stringInput_field")
        self.sampleChoose_label = QtWidgets.QLabel(self.centralwidget)
        self.sampleChoose_label.setGeometry(QtCore.QRect(20, 410, 281, 21))
        self.sampleChoose_label.setObjectName("sampleChoose_label")
        self.sampleChoose_list = QtWidgets.QListView(self.centralwidget)
        self.sampleChoose_list.setGeometry(QtCore.QRect(320, 350, 461, 151))
        self.sampleChoose_list.setObjectName("sampleChoose_list")
        self.clickSample_label = QtWidgets.QLabel(self.centralwidget)
        self.clickSample_label.setGeometry(QtCore.QRect(20, 580, 461, 41))
        self.clickSample_label.setObjectName("clickSample_label")
        self.clickSamle_list = QtWidgets.QColumnView(self.centralwidget)
        self.clickSamle_list.setGeometry(QtCore.QRect(520, 510, 256, 192))
        self.clickSamle_list.setObjectName("clickSamle_list")
        self.paramInput_label_2 = QtWidgets.QLabel(self.centralwidget)
        self.paramInput_label_2.setGeometry(QtCore.QRect(40, 90, 191, 16))
        self.paramInput_label_2.setObjectName("paramInput_label_2")
        self.saveClick_label = QtWidgets.QLabel(self.centralwidget)
        self.saveClick_label.setGeometry(QtCore.QRect(20, 790, 431, 21))
        self.saveClick_label.setObjectName("saveClick_label")
        self.saveClick_list = QtWidgets.QListView(self.centralwidget)
        self.saveClick_list.setGeometry(QtCore.QRect(520, 710, 141, 191))
        self.saveClick_list.setObjectName("saveClick_list")
        self.saveClick_btn = QtWidgets.QToolButton(self.centralwidget)
        self.saveClick_btn.setGeometry(QtCore.QRect(670, 770, 101, 71))
        self.saveClick_btn.setObjectName("saveClick_btn")
        self.dataChooseBtn = QtWidgets.QPushButton(self.centralwidget)
        self.dataChooseBtn.setGeometry(QtCore.QRect(260, 0, 151, 51))
        self.dataChooseBtn.setObjectName("dataChooseBtn")
        self.line_3 = QtWidgets.QFrame(self.centralwidget)
        self.line_3.setGeometry(QtCore.QRect(620, -10, 20, 121))
        self.line_3.setFrameShape(QtWidgets.QFrame.VLine)
        self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line_3.setObjectName("line_3")
        self.paramInput_accept = QtWidgets.QPushButton(self.centralwidget)
        self.paramInput_accept.setGeometry(QtCore.QRect(500, 70, 111, 41))
        self.paramInput_accept.setObjectName("paramInput_accept")
        self.paramInput_field_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.paramInput_field_2.setGeometry(QtCore.QRect(270, 70, 221, 31))
        self.paramInput_field_2.setObjectName("paramInput_field_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 802, 22))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        self.menu_2 = QtWidgets.QMenu(self.menubar)
        self.menu_2.setObjectName("menu_2")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.action = QtWidgets.QAction(MainWindow)
        self.action.setObjectName("action")
        self.action_2 = QtWidgets.QAction(MainWindow)
        self.action_2.setObjectName("action_2")
        self.action_4 = QtWidgets.QAction(MainWindow)
        self.action_4.setObjectName("action_4")
        self.action_5 = QtWidgets.QAction(MainWindow)
        self.action_5.setObjectName("action_5")
        self.action_6 = QtWidgets.QAction(MainWindow)
        self.action_6.setObjectName("action_6")
        self.action_7 = QtWidgets.QAction(MainWindow)
        self.action_7.setObjectName("action_7")
        self.action_8 = QtWidgets.QAction(MainWindow)
        self.action_8.setObjectName("action_8")
        self.menu.addAction(self.action)
        self.menu.addAction(self.action_2)
        self.menu.addSeparator()
        self.menu.addAction(self.action_4)
        self.menu_2.addAction(self.action_5)
        self.menu_2.addSeparator()
        self.menu_2.addAction(self.action_6)
        self.menu_2.addAction(self.action_7)
        self.menu_2.addAction(self.action_8)
        self.menu_2.addSeparator()
        self.menubar.addAction(self.menu.menuAction())
        self.menubar.addAction(self.menu_2.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.dataChoose_label.setText(_translate("MainWindow", "Выберите выборку для анализа:"))
        self.data_processing.setText(_translate("MainWindow", "Обработать"))
        self.paramInput_label.setText(_translate("MainWindow", "Значения параметрического столбца:"))
        self.saveSample_label.setText(_translate("MainWindow", "Сохранить файл обработанной выборки :"))
        self.saveSample_btn.setText(_translate("MainWindow", "Сохранить как..."))
        self.stringInput_label.setText(_translate("MainWindow", "Вставьте строку для анализа по выборкам:"))
        self.stringInput_label_2.setText(_translate("MainWindow", "(помните, что размерность строки должна совпадать с размерностью выборки)"))
        self.stringInput_field.setPlaceholderText(_translate("MainWindow", "12.0092    16.3209    13.5649    8.2123    3.8459    2.1767    4.2975    6.0223    4.104    1.6001    1.2444    1.6035    1.0391    0.3194    0.4114    1.0386    1.4205    1.2496    0.9781    0.8515    0.7001    0.5825    0.4005    0.056    -0.0761    -0.1211    -0.5841    -0.9534    -0.5585    -0.043    0.1195    0.4775    0.8882    0.5579    -0.3917    -1.0096    -0.8487    -0.191    0.558    0.888    0.6353    0.2705    0.1206    0.0296    -0.2056    -0.3782    -0.2085    0.0363    -0.0919    -0.5511    -0.7785    -0.4769    -0.1874    -0.2101    -0.1309    -0.0181    -0.0812    0.0797    0.4885    0.5797    0.1142    -0.6158    -1.0995    -1.1537    -1.0385    -0.8175    -0.5396    -0.5002    -0.5649    -0.3875    -0.1347    -0.0554    -0.1495    -0.5774    -1.4059    -2.0242    -1.7347    -0.9614    -1.134    -2.75    -4.3387    -3.9483    -1.3619    1.0278    1.8453    2.6694    3.0748    1.6349    0.4356    0.0892    -1.9074    -3.4085    0.0632    5.6347    6.9852    2.996    -1.9341    -2.9032    -1.3316    -1.4645    -2.346    -1.8374    -0.7552    -0.1104    -0.0739    -0.2815    -0.2086    -0.0079    -0.01    23.0892    29.1765    23.5674    13.5347    6.7836    4.7064    7.4076    9.8512    7.711    4.421    3.8218    3.8774    2.4927    1.509    1.7488    2.2334    2.6185    2.666    2.4429    2.1909    1.6602    1.1591    1.0329    0.8772    0.5525    -0.0326    -0.9759    -1.4809    -1.0451    -0.5877    -0.365    0.4304    1.2717    0.8605    -0.7115    -1.9355    -1.6475    -0.4566    0.3175    0.4504    0.4514    0.3418    0.0385    -0.2063    -0.5039    -0.9804    -1.0378    -0.3791    0.1789    0.0051    -0.3564    -0.2833    0.0033    0.2184    0.3963    0.2137    -0.3378    -0.3548    0.2524    0.5642    0.4861    0.3833    0.2324    0.0401    -0.2    -0.4625    -0.6773    -0.9002    -1.0058    -0.9126    -0.7887    -0.5017    0.0166    0.089    -0.5678    -0.9103    -0.2846    0.1344    -0.6565    -1.8617    -2.8639    -3.2946    -1.7414    0.8095    1.8218    2.913    5.5284    6.8624    5.5749    2.9869    0.5648    0.1551    2.0738    3.9631    3.9425    2.2731    0.3942    -0.3964    -0.4147    -0.5376    -0.6139    -0.4817    -0.3295    -0.1489    -0.037    -0.0827    -0.1574    -0.2141    -0.2027    49.6999    69.7767    59.835    35.0647    17.4911    12.3939    17.0397    19.9471    15.007    9.2894    7.5289    6.9816    5.058    3.5523    3.8629    4.2375    3.6877    3.1812    3.0437    2.5079    1.5437    1.0561    0.9955    0.6981    0.2919    -0.2281    -1.0574    -1.3007    -0.1233    1.1392    1.1779    1.0094    1.3004    0.9836    -0.3246    -1.2542    -0.8339    0.1268    0.6459    0.6081    0.2417    -0.0669    -0.1116    -0.0771    -0.1855    -0.5842    -0.829    -0.2147    0.6164    0.5564    -0.0103    -0.2302    -0.2281    -0.2369    -0.0665    -0.042    -0.5462    -0.9621    -0.6502    0.0652    0.5529    0.5899    0.3647    0.1206    -0.0448    -0.0984    -0.0704    -0.054    -0.1167    -0.2596    -0.3558    -0.0412    0.4906    0.2146    -0.8041    -1.1069    -0.2334    0.6806    0.5641    -0.7375    -2.3345    -2.6284    -1.1741    0.2974    0.2609    -0.348    -0.4119    -0.3005    -0.2052    -0.5323    -1.2313    -0.5117    1.5922    2.7109    2.1302    0.581    -1.2169    -2.1012    -1.7068    -1.1139    -1.0359    -1.0811    -0.8442    -0.5725    -0.515    -0.4083    -0.0985    0.1166    0.0764    23.5902    34.8167    29.9879    16.4722    5.4736    2.181    6.7235    10.2094    7.094    2.9677    2.1246    2.5647    1.9333    1.0593    1.2674    1.9215    2.0104    1.6322    1.4533    1.5853    1.5679    1.3903    1.2074    0.8589    0.5309    0.274    -0.2856    -0.7007    -0.1369    0.8568    1.19    0.8973    0.617    0.3567    -0.3107    -0.9505    -0.8385    -0.1632    0.5551    1.0729    1.2167    0.6402    -0.3775    -0.9034    -0.9189    -0.9266    -0.6947    -0.1    0.1831    -0.1596    -0.5045    -0.4391    -0.5047    -0.9824    -1.1132    -0.7724    -0.583    -0.3597    0.1779    0.5606    0.1891    -0.9182    -1.8643    -2.015    -1.7303    -1.2444    -0.5691    -0.1537    -0.1987    -0.3384    -0.3042    -0.028    0.2469    -0.2079    -1.4522    -2.3573    -1.9341    -0.6466    -0.913    -4.3801    -7.9001    -6.6034    -1.4666    1.7396    2.0908    2.8658    2.1172    -1.9873    -4.8558    -5.6181    -7.1121    -5.4427    2.5583    9.8955    9.4869    2.8168    -3.7388    -4.6938    -1.7796    -0.9772    -2.3755    -2.5732    -1.3491    -0.1918    0.0832    -0.1739    -0.1287    0.1745    0.2329    10.9524    14.2529    10.6435    4.9582    1.9521    1.6169    2.798    3.7354    3.8803    4.2305    4.3    3.3745    2.361    2.0548    1.9706    1.4763    0.8167    0.3832    0.1208    -0.0447    -0.1531    -0.0436    0.3202    0.4171    -0.0697    -0.7665    -1.0122    -0.636    -0.1998    -0.1933    -0.4417    -0.5925    -0.6307    -0.5539    -0.3035    -0.0407    0.1644    0.5    1.0221    1.4231    1.3673    0.7837    -0.0852    -0.5517    -0.4074    -0.3756    -0.5013    -0.1606    0.4632    0.752    0.4683    -0.0725    -0.3727    -0.5529    -0.9097    -1.1661    -1.0929    -0.8594    -0.6232    -0.5495    -0.7225    -0.9037    -0.9698    -0.9907    -0.7276    -0.1471    0.2418    0.251    0.062    -0.255    -0.5458    -0.6746    -0.6797    -0.5133    -0.2586    -0.1598    -0.1986    -0.3142    -1.0576    -2.8278    -4.1382    -3.4232    -1.3599    1.3626    3.6212    2.6097    -0.4519    -1.445    -1.4249    -4.3882    -10.5879    -13.5279    -7.4621    3.0363    10.3816    10.2443    3.0927    -3.2072    -3.8023    -2.2997    -1.6427    -1.1828    -0.3508    0.3342    0.4442    0.3325    0.5332    0.924    0.8647    20.8696    27.1891    21.6745    11.839    6.2656    5.5586    7.4727    8.2034    6.8261    5.9256    5.8057    5.0093    3.6226    2.7789    2.5921    2.29    1.7347    1.2871    0.9973    0.7089    0.361    0.3081    0.6116    0.5802    -0.1118    -0.9791    -1.3397    -0.8983    -0.1141    0.0817    -0.3459    -0.3375    0.32    0.6936    0.3626    -0.1519    -0.2493    0.063    0.3576    0.4193    0.4442    0.457    0.1041    -0.4185    -0.5981    -0.6161    -0.6173    -0.2822    0.3205    0.7469    0.681    0.1792    -0.2842    -0.4016    -0.3742    -0.4325    -0.5638    -0.5962    -0.4603    -0.4061    -0.4795    -0.3646    -0.2065    -0.3974    -0.5597    -0.2419    0.1404    0.1841    0.0232    -0.1716    -0.3105    -0.388    -0.3489    -0.1462    0.0227    0.0825    0.0584    -0.1485    -0.6376    -1.44    -1.9336    -1.2505    0.2067    1.7441    2.735    1.8703    0.396    0.5912    1.1902    0.4427    -2.003    -4.3035    -3.2353    -0.1565    1.6481    1.7801    0.4805    -1.2714    -1.8955    -1.4548    -0.8987    -0.5058    -0.0902    0.2493    0.3019    0.2254    0.3217    0.5682    0.6039    44.7774    59.2644    48.3444    25.6805    12.7331    11.518    15.1719    15.6678    12.5041    11.6583    12.2632    10.3639    7.2073    5.7946    5.786    4.9055    3.2123    2.2999    1.9652    1.327    0.6183    0.6235    1.2602    1.5138    0.9206    -0.1558    -0.8477    -0.4624    0.4653    0.8362    0.5566    0.5153    1.1414    1.6521    1.2413    0.3184    -0.3617    -0.5259    -0.173    0.1837    0.166    0.1927    0.4739    0.8132    0.9718    0.5724    -0.0814    -0.2193    -0.0169    0.0211    -0.0229    -0.1343    -0.3588    -0.3259    0.1188    0.4219    -0.0175    -0.8971    -1.2925    -1.0202    -0.6154    -0.3013    -0.1924    -0.4746    -0.692    -0.3546    0.137    0.3454    0.1956    -0.3318    -0.7643    -0.6234    -0.2666    -0.3225    -0.7777    -0.9072    -0.3201    0.4168    0.3082    -0.8645    -1.542    -0.3366    1.5401    2.4102    2.1885    0.7324    -1.6746    -3.6351    -4.4016    -4.5757    -5.476    -5.747    -3.0459    0.9132    4.0289    5.1989    3.2462    0.3871    -0.5417    -0.1191    0.2969    0.4394    0.3879    0.1941    -0.0016    0.0158    0.3095    0.5857    0.411    30.2006    39.3582    29.9576    14.0813    7.3008    9.0822    11.8449    10.5825    7.8682    8.9961    10.9417    9.5758    7.2909    6.7268    6.7451    5.2366    2.8996    1.7664    1.6456    1.4861    1.26    1.5259    2.0742    1.9703    1.1513    0.1103    -0.4006    0.073    0.5807    0.3707    -0.1779    -0.656    -0.6826    -0.0756    0.6797    1.0599    0.9552    0.737    0.7427    0.4973    -0.218    -0.7341    -0.6726    -0.1082    0.4481    0.0778    -0.9304    -1.3084    -0.9726    -0.6918    -0.7392    -0.9288    -0.9103    -0.6299    -0.6061    -1.0453    -1.4129    -1.3664    -1.1234    -0.9574    -0.9611    -1.0098    -1.0153    -0.9935    -0.6263    0.0147    0.1319    -0.3184    -0.7648    -1.0499    -0.9592    -0.593    -0.5487    -0.7664    -0.8247    -0.5693    0.2136    1.3327    1.0359    -1.7183    -3.9489    -3.0081    -0.4778    2.0716    4.0662    3.2434    -1.292    -6.2305    -8.7793    -12.8573    -21.6219    -23.7086    -9.6675    9.8865    22.0893    20.9908    8.476    -1.5682    -2.1344    -0.4314    -0.8335    -1.3351    -0.7732    -0.0697    0.0553    0.1637    0.8374    1.4351    1.0663"))
        self.sampleChoose_label.setText(_translate("MainWindow", "Выбери выборку(-ки) для анализа строки:"))
        self.clickSample_label.setText(_translate("MainWindow", "Значения суммарных весовых откликов и степени валидности строки:"))
        self.paramInput_label_2.setText(_translate("MainWindow", "для определения корреляций"))
        self.saveClick_label.setText(_translate("MainWindow", "Сохранение данных по проверямой строке в выбранной выборке:"))
        self.saveClick_btn.setText(_translate("MainWindow", "Сохранить как..."))
        self.dataChooseBtn.setText(_translate("MainWindow", "Выберите файл..."))
        self.paramInput_accept.setText(_translate("MainWindow", "Подтвердить"))
        self.paramInput_field_2.setPlaceholderText(_translate("MainWindow", "50.0, 100.0, 150.0, 200.0, 250.0, 300.0, 350.0, 400.0, 450.0, 500.0, 550.0, 600.0, 650.0, 700.0, 750.0, 800.0, 850.0, 900.0, 950.0, 1000.0, 1100.0, 1150.0, 1200.0, 1250.0, 1300.0, 1350.0, 1400.0, 1450.0, 1500.0, 1550.0, 1600.0, 1650.0, 1700.0, 1750.0, 1800.0, 1850.0, 1900.0, 1950.0, 2000.0, 2050.0, 2100.0, 2150.0, 2200.0, 2250.0, 2300.0, 2350.0, 2400.0, 2450.0, 2500.0, 2550.0, 2600.0, 2650.0, 2700.0, 2750.0, 2800.0, 2850.0, 2900.0, 2950.0, 3000.0"))
        self.menu.setTitle(_translate("MainWindow", "Файл"))
        self.menu_2.setTitle(_translate("MainWindow", "Правка"))
        self.action.setText(_translate("MainWindow", "Открыть..."))
        self.action_2.setText(_translate("MainWindow", "Сохранить..."))
        self.action_4.setText(_translate("MainWindow", "Печать"))
        self.action_5.setText(_translate("MainWindow", "Отменить"))
        self.action_6.setText(_translate("MainWindow", "Копировать"))
        self.action_7.setText(_translate("MainWindow", "Вырезать"))
        self.action_8.setText(_translate("MainWindow", "Вставить"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我的主要节目

import os
import sys
import pandas as pd
import numpy
import scipy.stats
import xlsxwriter
from PyQt5.QtWidgets import QApplication, QMainWindow, qApp, QWidget, QInputDialog, QLineEdit, QFileDialog, QMessageBox
from PyQt5.QtCore import Qt, QEvent, QObject
from PyQt5.QtCore import pyqtSlot
from ui_main import Ui_MainWindow

class MyMainWindow(QMainWindow, Ui_MainWindow):

    def __init__(self, parent=None):
        super(MyMainWindow, self).__init__(parent)
        qApp.installEventFilter(self)
        self.setupUi(self)
        self.dataChooseBtn.clicked.connect(self.selectFile)
        self.saveClick_btn.clicked.connect(self.saveFile)

        self.saveSample_btn.clicked.connect(self.saveSample)

        self.paramInput_accept.clicked.connect(self.accept)
        self.data_processing.clicked.connect(self.process)
        self.show()





    def eventFilter(self, obj, event):
        if event.type() == QEvent.KeyPress:
            if event.key() == Qt.Key_Escape:
                self.close()
        return super(MyMainWindow, self).eventFilter(obj, event)


    @pyqtSlot()
    def accept(self):
        textboxValue = self.paramInput_field_2.text()
        QMessageBox.information(self, 'Message', "Значения параметрического столбца: " + textboxValue, QMessageBox.Ok, QMessageBox.Ok)



    def selectFile(self):
        self.fileName = None
        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileName, _ = QFileDialog.getOpenFileName(self,"Выберите стандартизированную выборку", "","All Files (*);;Python Files (*.py)", options=options)
        if fileName:
            print(fileName)
            self.fileName = fileName





    def process(self):
        sample = pd.read_excel(self.fileName)
        list_of_index = []
        for i in range(len(sample.columns)):
            sample2 = sample.iloc[:, lambda sample: [i]]
            sample2 = sample2.columns[0]
            list_of_index.append(sample2)
        list_of_index   

        fulllist = []
        for i in list_of_index:
            sample3 = sample[i].tolist()
            fulllist.append(sample3)

        fulllist_percent = []
        column_percent = []
        len(fulllist)
        for i in range(len(fulllist)):
            for j in range(len(fulllist[i])):
                percent_rank = scipy.stats.percentileofscore(fulllist[i], fulllist[i][j])
                column_percent.append(percent_rank)
            fulllist_percent.append(column_percent)
            column_percent = []

        fulllist_rank = []
        for i in range(len(fulllist)):
            rank = len(fulllist[i]) - scipy.stats.rankdata(fulllist[i]) + 1
            fulllist_rank.append(rank)

        param = self.paramInput_field_2.text()    
        param = [float(i) for i in param.split(',')]
        param_rank = scipy.stats.rankdata(param).astype(int)


        column_corr = []
        for i in range(len(fulllist)):
            correlation = scipy.stats.spearmanr(param_rank[::-1], fulllist_rank[i])
            column_corr.append(correlation[0])



        fulllist_click = []
        for j in range (len(fulllist_percent)):
            middle = []
            if column_corr[j] > 0:
                for i in range(len(fulllist_percent[j])):
                    solve = column_corr[j] * fulllist_percent[j][i]
                    middle.append(solve)
            else:
                for i in range (len(fulllist_percent[j])):    
                    solve = abs(column_corr[j]) * (100 - fulllist_percent[j][i])
                    middle.append(solve)
            fulllist_click.append(middle)

        list_of_rowsumm = []
        rowsumm = 0
        fulllist_clickT = numpy.asarray(fulllist_click).T.tolist()

        for i in range(len(fulllist_clickT)):
            rowsumm = sum(fulllist_clickT[i])
            list_of_rowsumm.append(rowsumm)

        percent_rowsumm = []
        for i in list_of_rowsumm:
            x = scipy.stats.percentileofscore(list_of_rowsumm, i)
            percent_rowsumm.append(x)

        additional_info = []
        additional_info.append(list_of_rowsumm)
        additional_info.append(percent_rowsumm)

        self.fulllist = fulllist
        self.fulllist_percent = fulllist_percent
        self.fulllist_click = fulllist_click
        self.additional_info = additional_info


        workbook = xlsxwriter.Workbook('Sample.xlsx')
        worksheet1 = workbook.add_worksheet()
        worksheet2 = workbook.add_worksheet()
        worksheet3 = workbook.add_worksheet()
        worksheet4 = workbook.add_worksheet()

        row = 0

        for col, data in enumerate(fulllist):
            worksheet1.write_column(row, col, data)
        for col, data in enumerate(fulllist_percent):
            worksheet2.write_column(row, col, data)   
        for col, data in enumerate(fulllist_click):
            worksheet3.write_column(row, col, data) 
        for col, data in enumerate(additional_info):
            worksheet4.write_column(row, col, data)

        workbook.close()


#         return self.fulllist, self.fulllist_percent, self.fulllist_click, self.additional_info



    def saveSample(self):


        options = QFileDialog.Options()
        options |= QFileDialog.DontUseNativeDialog
        fileNameSave, _ = QFileDialog.getSaveFileName(self,"QFileDialog.getSaveFileName()","","Excel files (*.xlsx)", options=options)
        return fileNameSave
        print(fileNameSave)

        workbook = xlsxwriter.Workbook()
        worksheet1 = workbook.add_worksheet()
        worksheet2 = workbook.add_worksheet()
        worksheet3 = workbook.add_worksheet()
        worksheet4 = workbook.add_worksheet()

        row = 0

        for col, data in enumerate(self.fulllist):
            worksheet1.write_column(row, col, data)
        for col, data in enumerate(self.fulllist_percent):
            worksheet2.write_column(row, col, data)   
        for col, data in enumerate(self.fulllist_click):
            worksheet3.write_column(row, col, data) 
        for col, data in enumerate(self.additional_info):
            worksheet4.write_column(row, col, data)

        workbook.close()



if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyMainWindow()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:0)

假设getSaveFileName为您提供了良好的价值,我认为您只需要通过以下方式更改您的函数saveSample(self)

def saveSample(self):
    options = QFileDialog.Options()
    options |= QFileDialog.DontUseNativeDialog
    fileNameSave, _ = QFileDialog.getSaveFileName(self,"QFileDialog.getSaveFileName()","","Excel files (*.xlsx)", options=options)
    print(fileNameSave)
    self.fileNameSave = fileNameSave
    self.callNewFunc()

其中callNewFunc为:

 def callNewFunc(self):
    if self.fileNameSave:
        workbook = xlsxwriter.Workbook(self.fileNameSave)
        worksheet1 = workbook.add_worksheet()
        worksheet2 = workbook.add_worksheet()
        worksheet3 = workbook.add_worksheet()
        worksheet4 = workbook.add_worksheet()

        row = 0

        for col, data in enumerate(self.fulllist):
            worksheet1.write_column(row, col, data)
        for col, data in enumerate(self.fulllist_percent):
            worksheet2.write_column(row, col, data)   
        for col, data in enumerate(self.fulllist_click):
            worksheet3.write_column(row, col, data) 
        for col, data in enumerate(self.additional_info):
            worksheet4.write_column(row, col, data)

        workbook.close()

您也可以从process调用此功能。在使用之前,您需要设置fileNameSave。并在 init 方法中设置它:self.fileNameSave = None 在致电self.fileNameSave之前,请确保callNewFunc正确无误。

有帮助吗?