Pyside / 将值从一个 GUI 传递到另一个 GUI
Pyside / Passing a value from one GUI to another GUI
我有一个主 GUI,上面有按钮。在不同的 .py 文件中还有一个子 GUI,上面有 table 和按钮。我已经将子 GUI 导入到主 GUI,所以现在我可以通过按下按钮来显示子 GUI。但是,我不知道如何从子 GUI 获取值到主 GUI。据我了解,它是关于信号和插槽的,但问题是 GUI 不在同一个 .py 文件中,所以每次都会给我错误。以下是我正在尝试做的事情:
Sub
....
....
def buttonPressed(self):
self.value = self.table.selectedItems()[1].text()
Main.lineEdit.setText(self.value)
好的,这是带有更多项目代码的问题的更新版本。
#Main.py
...
from Sub import SubUI
....
class Main(QtGui.QMainWindow, window.Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
self.pushButtonShow.clicked.connect(self.ShowSub)
def ShowSub(self):
self.s = Show(self)
self.s.show()
.....
...
class Show(QtGui.QMainWindow, SubUI):#class to show SubUI
def __init__(self, parent = None):
super(Show, self).__init__(parent)
self.setupUi(self)
#Sub.py
class SubUI(QtGui.QWidget):
def __init__(self, main):
super(SubUI, self).__init__()
#self.setupUi(self)
self.Main = main
self.pushButtonOk.clicked.connect(self.Run)
.....
....
def Run(self):
self.value = self.table.selectedItems()[1].text()
self.Main.lineEdit.setText(self.value)
这是错误信息;
File "C:...\Sub.py", line 120, in secc
self.Main.lineEdit.setText(self.value)
AttributeError: 'Show' object has no attribute 'Main'
希望现在更清楚了。谢谢!
在 Main.py 处更改的解决方案将是这样的;
#Main.py
...
from Sub import SubUI
....
class Main(QtGui.QMainWindow, window.Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
self.pushButtonShow.clicked.connect(self.ShowSub)
def ShowSub(self):
self.s = SubUI(self)
self.s.show()
你已经完成一半了!您现在需要做的就是像这样构建您的 Sub UI class
class SubUI(QtGui.QWidget):
def __init__(self, main):
super(SubUI, self).__init__()
self.Main = main
现在,当您从 Main UI 实例化 SubUI 时,您只需将 MainUI 作为参数传递给 __init__
函数。如果您从 MainUI 调用它,则意味着传入 self.像这样
sub_ui = SubUI(self)
这将允许您在子 ui
中设置您想要的文本
self.Main.lineEdit.setText(self.value)
我有一个主 GUI,上面有按钮。在不同的 .py 文件中还有一个子 GUI,上面有 table 和按钮。我已经将子 GUI 导入到主 GUI,所以现在我可以通过按下按钮来显示子 GUI。但是,我不知道如何从子 GUI 获取值到主 GUI。据我了解,它是关于信号和插槽的,但问题是 GUI 不在同一个 .py 文件中,所以每次都会给我错误。以下是我正在尝试做的事情:
Sub
....
....
def buttonPressed(self):
self.value = self.table.selectedItems()[1].text()
Main.lineEdit.setText(self.value)
好的,这是带有更多项目代码的问题的更新版本。
#Main.py
...
from Sub import SubUI
....
class Main(QtGui.QMainWindow, window.Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
self.pushButtonShow.clicked.connect(self.ShowSub)
def ShowSub(self):
self.s = Show(self)
self.s.show()
.....
...
class Show(QtGui.QMainWindow, SubUI):#class to show SubUI
def __init__(self, parent = None):
super(Show, self).__init__(parent)
self.setupUi(self)
#Sub.py
class SubUI(QtGui.QWidget):
def __init__(self, main):
super(SubUI, self).__init__()
#self.setupUi(self)
self.Main = main
self.pushButtonOk.clicked.connect(self.Run)
.....
....
def Run(self):
self.value = self.table.selectedItems()[1].text()
self.Main.lineEdit.setText(self.value)
这是错误信息;
File "C:...\Sub.py", line 120, in secc
self.Main.lineEdit.setText(self.value)
AttributeError: 'Show' object has no attribute 'Main'
希望现在更清楚了。谢谢!
在 Main.py 处更改的解决方案将是这样的;
#Main.py
...
from Sub import SubUI
....
class Main(QtGui.QMainWindow, window.Ui_MainWindow):
def __init__(self):
super(self.__class__, self).__init__()
self.setupUi(self)
self.pushButtonShow.clicked.connect(self.ShowSub)
def ShowSub(self):
self.s = SubUI(self)
self.s.show()
你已经完成一半了!您现在需要做的就是像这样构建您的 Sub UI class
class SubUI(QtGui.QWidget):
def __init__(self, main):
super(SubUI, self).__init__()
self.Main = main
现在,当您从 Main UI 实例化 SubUI 时,您只需将 MainUI 作为参数传递给 __init__
函数。如果您从 MainUI 调用它,则意味着传入 self.像这样
sub_ui = SubUI(self)
这将允许您在子 ui
中设置您想要的文本self.Main.lineEdit.setText(self.value)