Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySide/Qt:如何从连接到事件的函数返回对象?_Python_Qt_Pyqt_Pyside - Fatal编程技术网

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

Python PySide/Qt:如何从连接到事件的函数返回对象?,python,qt,pyqt,pyside,Python,Qt,Pyqt,Pyside,我正试图掌握PySide和Gui编程,但目前我陷入了困境。这就是我想要实现的目标: 加载包含用于登录SAP系统的字段和按钮的UI文件 用户输入凭据并单击“登录”按钮 函数connect_client()已启动。在函数中创建一个pyrfc.connection对象 有没有办法在主程序中使用连接对象的方法?也许就像在一个只返回对象的普通函数中一样?下面的代码可能会解释得更多一些。如果有人能把我推向正确的方向,那就太好了: def connect_client(): conndetails

我正试图掌握PySide和Gui编程,但目前我陷入了困境。这就是我想要实现的目标:

  • 加载包含用于登录SAP系统的字段和按钮的UI文件
  • 用户输入凭据并单击“登录”按钮
  • 函数connect_client()已启动。在函数中创建一个pyrfc.connection对象
有没有办法在主程序中使用连接对象的方法?也许就像在一个只返回对象的普通函数中一样?下面的代码可能会解释得更多一些。如果有人能把我推向正确的方向,那就太好了:

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_()
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(**详细信息)

return(abapclient)常见的模式是创建一个QObject派生类,并在该类中设置
connect\u client
插槽。Connect语句将类似于
…clicked.Connect(我的对象.连接客户机)
。在这种情况下,您可以将任何数据存储在对象中(例如,
self.abapclient=abapclient
),并在以后需要时使用它


main
将访问该对象,从而访问其属性和方法。但是,这对您没有用,因为main将始终忙于执行app.exec()
。调用
connect\u client
时,您不能再在
main
中执行任何操作。基本上,所有工作都应该在插槽中完成,将插槽放入类中很方便,这样它们就可以在对象属性中存储程序状态并共享对它的访问。

您可以将对象作为参数传递给插槽。只需给出作为
pyqtSignal
的一部分发送到连接插槽的对象类,如
pyqtSignal(YourClass)
。有关更多详细信息,请访问@HansHermans answer at.

按答案编号查阅帖子是否合适?就像你写的第二个答案。因为帖子/答案的顺序会随着上升票和下降票的增加或减少而改变!