首页 > 解决方案 > 调用另一个函数时如何停止特定函数?

问题描述

如果我点击pushButton_1它显示正确,然后如果pushButton_2被点击。这两个功能同时运行并相互重叠。

self.pushButton_1.clicked.connect(self.fun)

def fun(self):
    print("1...")
    #for grabbing live data from excelsheet
    timer = threading.Timer(5.0, self.fun)
    timer.start()

     #reading from sheet1; ignore sheet_name=2        
    ex_data = pd.read_excel('bank2.xlsm',sheet_name=2,skiprows=5, nrows=18, 
                             usecols = 'D:V')
    df = pd.DataFrame(ex_data)
    df = df.replace(np.nan, '', regex=True)
    self.tableWidget.setColumnCount(len(df.columns))
    self.tableWidget.setRowCount(len(df.index))


    for i in range(len(df.index)):
        for j in range(len(df.columns)):
            self.tableWidget.setItem(i,j,QTableWidgetItem(str(df.iloc[i, 
                                      j])))
            self.tableWidget.resizeColumnsToContents()
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)

self.pushButton_2.clicked.connect(self.fun2)

def fun2(self):
    print("2...")
    timer = threading.Timer(5.0, self.fun2)
    timer.start()
    ex_data = pd.read_excel('bank2.xlsm',sheet_name=3,skiprows=5, nrows=18, 
                             usecols = 'D:V')
    df = pd.DataFrame(ex_data)
    df = df.replace(np.nan, '', regex=True)

    self.tableWidget.setColumnCount(len(df.columns))
    self.tableWidget.setRowCount(len(df.index))
    for i in range(len(df.index)):
        for j in range(len(df.columns)):
            self.tableWidget.setItem(i,j,QTableWidgetItem(str(df.iloc[i, 
                                      j])))
            self.tableWidget.resizeColumnsToContents()
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)

所以,我在 PyQt5 项目中工作,pushButton_1按下它应该显示来自 excel 文件的实时数据,我必须为其实现Timer实时更新。第二个按钮也一样。我想fun停止执行,无论何时fun2被调用。反之亦然

标签: pythonpython-3.xmultithreadingtimerpyqt

解决方案


推荐阅读