在 PyQt 中将变量从一个类传递到另一个类

问题描述 投票:0回答:2

我想将字符串变量从 PyQt 中的

Main_Window
类传递到另一个
QDialog
类。我不明白我做错了什么。我想将
host_mac
变量从主类传递到 QDialog 类。这是我的代码的主要部分。

这是 QDialog 类:

class Client(QDialog):
    def __init__(self, parent=None):
        super(Client, self).__init__(parent)
        self.pb = QPushButton()
        self.pb.setObjectName("connect")
        self.pb.setText("Connect") 

        layout = QFormLayout()
        layout.addWidget(self.pb)

        self.setLayout(layout)
        self.connect(self.pb, SIGNAL("clicked()"),self.set_client)
        self.setWindowTitle("Learning")

    def set_client(self):
        self.client = self.le.text()
        print 'provided client mac is ' + self.client + 'and host_mac is ' + Main_window_ex.host_mac

这里是 Main_Window 类:

class Main_window_ex(QMainWindow, Ui_Main_window):   
    def __init__(self, parent = None):
    """
    Default Constructor. It can receive a top window as parent. 
    """
    QMainWindow.__init__(self, parent)
    self.setupUi(self)


    self.host_mac = 'blah blah'

#more code beneeth

但是我收到以下错误:

AttributeError: type object 'Main_window_ex' has no attribute 'host_mac'
python python-2.7 pyqt pyqt4
2个回答
4
投票

Main_window_ex.host_mac
指的是 class 变量(因为
Main_window_ex
只是一个类),但您想要访问 instance 变量。换句话说,直到类被实例化之后,
host_mac
才被定义。

有几种方法可以解决这个问题。假设

Main_window_ex
负责创建
Client
,那么一种简单的方法是将变量传递给
Client
:

class Client(QDialog):
    def __init__(self, host_mac, parent=None):
        self.host_mac = host_mac
        ...

并像这样使用它:

    def set_client(self):
        self.client = self.le.text()
        print 'provided client mac is ' + self.client + 'and host_mac is ' + self.host_mac

作为旁注,您可能想使用新样式的连接语法:

# old style
# self.connect(self.pb, SIGNAL("clicked()"),self.set_client)

# new style
self.pb.clicked.connect(self.set_client)

0
投票

我一直在努力理解实例变量和类变量,101 的答案解决了我的问题。我简化了它以展示如何从主类获取变量到其中启动的类 Client。谢谢101!

#!/usr/bin/python3
from PyQt5.QtWidgets import (QApplication)
import sys
class Client():
    def __init__(self, myTextString, parent=None):
        self.mytext = myTextString
        self.set_client()

    def set_client(self):
        print(self.mytext)

class Main():
    def __init__(self, parent = None):
       self.text = 'a string of text'
       self.w = Client(self.text)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Main()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.