PySide/Qt:如何从连接到事件的函数返回对象?

2024-10-01 22:32:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图掌握PySide和Gui编程,但我现在被卡住了。这就是我想要完成的:

  • 加载包含用于登录到SAP系统的字段和按钮的UI文件
  • 用户输入凭据并单击“登录”按钮。你知道吗
  • 函数connect\u client()已启动。在函数a中pyrfc.连接创建对象。你知道吗

有没有办法在主程序中使用连接对象的方法?也许它是在一个普通函数中,只返回对象?下面是代码,可以解释它多一点。如果有人能把我推向正确的方向那就太好了:

def connect_client():
    conndetails=dict()
    conndetails['user']=str(MainWindow.username.text())
    conndetails['ashost']=str(MainWindow.hostname.text())
    conndetails['passwd']=str(MainWindow.password.text())
    conndetails['sysnr']=str(MainWindow.systemnumber.text())
    conndetails['client']=str(MainWindow.client.text())
    abapclient=sap_abapclient(**conndetails)
    return(abapclient)                     <-is there a way to do something like this?


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    MainWindow = loadUiWidget("rsusr002_gui.ui")
    MainWindow.btnLogon.clicked.connect(connect_client)
    general = sap_general()
    variants = general.read_suim_variants_from_file('variants.cfg')
    variant_model=QtGui.QStandardItemModel()
    for row in variants.keys():
        item=QtGui.QStandardItem(row)
        variant_model.appendRow(item)
    MainWindow.lstChecks.setModel(variant_model)
    MainWindow.show()
    app.exec_()

Tags: 对象函数textclientmodelconnect按钮general
2条回答

一种常见的模式是创建一个QObject派生类,并使connect_client成为该类中的一个槽。Connect语句看起来像...clicked.connect(my_object.connect_client)。在这种情况下,您可以将任何数据存储在对象中(例如self.abapclient = abapclient),并在以后需要时使用它。你知道吗

main将有权访问对象及其属性和方法。但是这对您没有用,因为main总是忙于执行app.exec_()。调用connect_client时,您不能再执行main中的任何操作。基本上,所有的工作都应该在slot中完成,将slot放在类中很方便,这样它们就可以在对象属性中存储程序状态并共享对它的访问。你知道吗

可以将对象作为参数传递给插槽。只需给出作为pyqtSignal的一部分发送到连接插槽的对象类,如pyqtSignal(YourClass)。更多细节请参见@HansHermans answer atPyQt signal with arguments of arbitrary type / PyQt_PyObject equivalent for new-style signals。你知道吗

相关问题 更多 >

    热门问题