如何从Admin类的message方法获取msg变量并在其他.py文件使用?
解决方法
方案1:将msg设为类实例属性
把msg定义为Admin类的实例变量,只要持有Admin类的实例,就能在其他文件中访问到它:
修改Admin类的message方法:
def message(self): name = self.name.text() price = self.price.text() desc = self.description.text() self.msg = f'{name}, {price}, {desc}' # 改为实例属性
在其他.py文件中,获取到Admin的实例后即可访问:
# 假设已获取Admin实例a if hasattr(a, 'msg'): print(a.msg) # 使用msg变量
注意:只有send_button被点击、message方法执行过后,self.msg才会有有效值,建议添加存在性判断避免报错。
方案2:让message方法返回msg值
如果需要手动调用message方法并获取结果,可修改方法添加返回语句:
def message(self): name = self.name.text() price = self.price.text() desc = self.description.text() msg = f'{name}, {price}, {desc}' return msg # 添加返回语句
在其他文件中手动调用方法获取值:
admin_instance = Admin() current_msg = admin_instance.message() print(current_msg)
注:这种方式是直接计算当前输入框内容,不会触发按钮点击的UI逻辑。
方案3:使用PyQt信号传递msg(推荐)
这是符合PyQt框架设计的方式,通过自定义信号传递数据,避免直接依赖实例属性:
先在Admin类中定义信号,再在message方法中发射信号:
from PyQt5 import QtCore, QtGui, QtWidgets import sys import admin class Admin(QtWidgets.QMainWindow, admin.Ui_Dialog): # 自定义信号,参数为字符串类型 msg_generated = QtCore.pyqtSignal(str) def __init__(self, parent=None): super(Admin, self).__init__(parent) self.setupUi(self) self.send_button.clicked.connect(self.message) def message(self): name = self.name.text() price = self.price.text() desc = self.description.text() msg = f'{name}, {price}, {desc}' self.msg_generated.emit(msg) # 发射信号传递msg
在其他.py文件中连接信号接收msg:
# 假设已获取Admin实例a a.msg_generated.connect(handle_admin_msg) def handle_admin_msg(msg): # 处理接收到的msg print("收到Admin的消息:", msg)
这种方式能在message方法执行时自动传递最新的msg,无需主动获取,适配UI交互场景。
内容的提问来源于stack exchange,提问作者trp
相关产品推荐
相关产品推荐

