如何在UI加载后调用该函数? PyQt5

时间:2018-03-05 11:27:24

标签: python qt5 pyqt5 desktop

我正在构建桌面应用。在class MyMainWindow(QMainWindow, Ui_MainWindow):之前我有一个部分,它处理一些初始数据(代码1)

sample_directory_2 = []
sample_files_2 = []
for (dirpath, dirnames, filenames) in walk('./Processed'):
    filenames = [f for f in filenames if not f[0] == '.']
    sample_files_2.extend(filenames)
    break
the_dir = "Processed"
paths_2 = [os.path.abspath(os.path.join(the_dir,filename)) for filename in os.listdir(the_dir) if not filename.startswith('.')]    

sample_directory_2.append(sample_files_2)
sample_directory_2.append(paths_2)

processed_info = []
for i in range(len(sample_directory_2[0])):
    file_info = []
    sample_file_2 = sample_directory_2[0][i]
    sample_path_2 = sample_directory_2[1][i]            
    sample_info_2 = pd.read_excel(ospath(sample_path_2), header = None, sheetname = 3)
    sample_info_2 = sample_info_2.iloc[0][0:3]
    file_info.append(sample_file_2)
    sample_info_2_list = numpy.array(sample_info_2).tolist() 
    file_info.extend(sample_info_2_list)
    processed_info.append(file_info)

class MyMainWindow(QMainWindow, Ui_MainWindow):中的这一部分之后,我有代码创建QTableList并为其项目设置值(代码2):

        self.clickSample_list.setRowCount(len(processed_info))
        self.clickSample_list.setColumnCount(len(processed_info[0]))

        labels = ['Имя', 'Массовые отклики', 'Процентранг', 'Валидность']
        self.clickSample_list.setHorizontalHeaderLabels(labels)

        for row in range(len(processed_info)):
            for column in range(len(processed_info[row])):
                self.clickSample_list.setItem(row, column, QTableWidgetItem(str(processed_info[row][column])))

代码1部分需要相当长的时间,只有在此之后,UI才开始加载。

我想,我需要做的是:使代码1成为一个单独的函数,并在UI加载后调用它。怎么做?是否有一个命令在加载UI后调用该函数?

1 个答案:

答案 0 :(得分:0)

我认为您可能需要做的是将Code 1部分放在类中的单独函数中,并在GUI中的某个事件中调用它。

class Window(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        #Initializing the UI
        self.setupUi(self)
        self.buttonName.clicked.connect(self.functionName)
    def functionName(self):
         ...
         #your code
         ...

或者,如果您的应用程序限制在课堂外使用此代码,那么您可以尝试在主函数中调用它

from sys import argv, exit

def functionName():
    ...
    #code
    ....

    class Window(QtWidgets.QMainWindow, Ui_MainWindow):
        def __init__(self, parent=None):
            super(Window, self).__init__(parent)
        ....

    def main():
            app = QApplication(argv)
            gui = Window()
            gui.show()
            functionName()
            exit(app.exec_())