【问题标题】:Pass a variable from one Class to another in PyQt在 PyQt 中将变量从一个类传递到另一个类
【发布时间】:2015-08-05 21:35:40
【问题描述】:

我想将一个字符串变量从 Main_Window 类传递给 PyQt 中的另一个 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


    【解决方案1】:

    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)
    

    【讨论】:

    • 请填写我在Client 类中传递host_mac 的方式 --> self.w = Client(self.host_mac) 只是为了向其他人澄清问题是如何解决的!谢谢你的回答!
    猜你喜欢
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多