我正在用Python编写一个GUI应用程序,它使用多个.py脚本。我在QMainWindow中有一个变量,我需要在其他类中引用/访问它。我将各种.py模块导入Ui_MainWindow.py模块没有问题,但我似乎无法访问QMainWindow类变量。
这是我正在尝试的快速伪代码:
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.lineEditScanBarcode.returnPressed.connect(self.LoginAttempt)
def LoginAttempt(self):
self.user_barcode = self.lineEditScanBarcode.text()
从我对这个引用类变量的阅读开始,我得出的结论是,通过上面的设置,我应该可以在其他类中引用'user_barcode'变量,如下所示:
class Receipt(QWidget, Ui_Receipt):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setupUi(self)
print(MainWindow.user_barcode)
我一直在使用'print'命令来测试它是否正常工作,但是我收到以下错误:
Attribute Error: type object 'MainWindow' has no attribute 'user_barcode'
有人能看到我明显犯的错误吗?我搜索了类似的查询,但没有发现任何相关的内容。
谢谢!
编辑:
这是app.exec_()设置,我不确定我是否正确传递了父。
if __name__ == '__main__':
app = QApplication(sys.argv)
showMainWindow = MainWindow()
showReceipt = Receipt(MainWindow)
showMainWindow.show()
app.exec_()
我尝试了各种组合,但是我收到 init 错误或引发的TypeError。
答案 0 :(得分:4)
示例代码不起作用的原因是因为MainWindow是类,而user_barcode是该类的实例的属性。
对于访问user_barcode属性的Receipt,它必须以某种方式使MainWindow实例可用。另一种方法是将MainWindow设置为Receipt的父级。
然后,这将允许Receipt使用parent method访问MainWindow实例及其属性。当然,这意味着一个Receipt 必须始终拥有一个MainWindow作为它的父级,所以它的构造函数应该看起来更像这样:
class Receipt(QWidget, Ui_Receipt):
def __init__(self, parent):
if not isinstance(parent, MainWindow):
raise TypeError('parent must be a MainWindow')
super(Receipt, self).__init__(parent)
self.setupUi(self)
...
print(self.parent().user_barcode)