我正在努力掌握PySide和Gui编程,但我现在卡住了。这就是我想要实现的目标:
有没有办法在主程序中使用连接对象的方法?也许就像在正常函数中返回对象一样?这是可以解释它更多的代码。如果有人能把我推向正确的方向,那就太好了:
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_()
答案 0 :(得分:2)
一种常见的模式是创建一个QObject派生类,并使connect_client
成为该类中的一个插槽。 Connect语句看起来像...clicked.connect(my_object.connect_client)
。在这种情况下,您可以将任何数据存储在对象中(例如self.abapclient = abapclient
),并在以后随时使用。
main
将有权访问该对象,从而访问其属性和方法。但是这对你没用,因为main总是忙于执行app.exec_()
。在调用connect_client
时,您无法再在main
中执行任何操作。基本上,所有工作都应该在插槽中完成,将插槽放在类中是很方便的,这样他们就可以在对象属性中存储程序状态并共享对它的访问。
答案 1 :(得分:0)
您可以将对象作为参数传递给插槽。只需将pyqtSignal
的一部分作为pyqtSignal(YourClass)
的一部分发送到连接的广告位的对象类,就像{{1}}一样。 @HansHermans在PyQt signal with arguments of arbitrary type / PyQt_PyObject equivalent for new-style signals的答案中提供了更多详细信息。