您的想法基本上是可行的,但是代码中存在一些问题。首先,在`exclude_rows_and_cols`方法中定义信号`operation_finished`应该移动到类的内部,而不是作为该方法的局部变量。其次,在返回`exclude_rules`之前,需要在适当的位置发射信号`operation_finished`,并传递相应的参数。再者,需要在适当的地方连接信号和槽函数。
以下是修改后的代码示例:
from PySide6.QtCore import QThread, Signal
class MyThread(QThread):
# 定义信号,在每个操作完成后发射信号通知主线程
operation_finished = Signal(dict)
def __init__(self, exclude_rows_and_cols):
super().__init__()
self.exclude_rows_and_cols = exclude_rows_and_cols
def run(self):
exclude_rules = {} # 存放排除规则的字典
if self.File_Type == 'xls':
file_name = "汇总表.xls"
file_path = os.path.join(self.File_Path, file_name)
Exclud_Book = xlrd.open_workbook(file_path)
else:
file_name = "汇总表.xlsx"
file_path = os.path.join(self.File_Path, file_name)
Exclud_Book = load_workbook(file_path)
print('《汇总表》共有', len(Exclud_Book.sheet_names()), '个工作表(sheet)。名称分别为:', Exclud_Book.sheet_names())
# 在这里根据具体需求获取exclude_rows和exclude_cols的值
exclude_rows = ...
exclude_cols = ...
exclude_rules = {'1': exclude_rows, '2': exclude_cols}
# 发射信号,通知主线程操作完成,并传递exclude_rules参数
self.operation_finished.emit(exclude_rules)
然后,在主窗口类中连接信号和槽函数:
self.pushButton_1.clicked.connect(self.exclude_rows_and_cols.operation_finished.connect)
请注意,以上示例仅展示了在多线程中如何定义信号、连接信号和槽函数,并不完整。您需要根据实际情况进行调整和补充。另外,记得在合适的地方调用`start()`方法来启动线程。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |