Python Pyside/将值从一个GUI传递到另一个GUI

Python Pyside/将值从一个GUI传递到另一个GUI,python,class,user-interface,pyside,Python,Class,User Interface,Pyside,我有一个带有按钮的主GUI。在不同的.py文件中还有一个子GUI,上面有一个表和按钮。我已经将子GUI导入到主GUI,所以现在我可以通过按下按钮来显示子GUI。但是,我不知道如何从子GUI到主GUI获取值。据我所知,这是关于信号和插槽的,但问题是GUI不在同一个.py文件中,所以每次都会给我错误。下面是我想做的: Sub .... .... def buttonPressed(self): self.value = self.table.selectedItems()[1].text()

我有一个带有按钮的主GUI。在不同的.py文件中还有一个子GUI,上面有一个表和按钮。我已经将子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()

你已经走到一半了!现在需要做的就是像这样构造子UI类

class SubUI(QtGui.QWidget):
    def __init__(self, main):
        super(SubUI, self).__init__()
        self.Main = main
现在,当您从主UI实例化子UI时,只需将MainUI作为参数传递到
\uuu init\uu
函数中。如果您是从MainUI调用它,这意味着传入self。像这样

sub_ui = SubUI(self)
这将允许您在子ui中设置所需的文本

self.Main.lineEdit.setText(self.value)

你已经走到一半了!现在需要做的就是像这样构造子UI类

class SubUI(QtGui.QWidget):
    def __init__(self, main):
        super(SubUI, self).__init__()
        self.Main = main
现在,当您从主UI实例化子UI时,只需将MainUI作为参数传递到
\uuu init\uu
函数中。如果您是从MainUI调用它,这意味着传入self。像这样

sub_ui = SubUI(self)
这将允许您在子ui中设置所需的文本

self.Main.lineEdit.setText(self.value)

我已经构建了一个类来显示main.py中名为“show”的子UI。因此,当我按下主GUI中的按钮时,我连接到主类下的一个函数,并显示我的子UI;self.s=显示(self);self.s.show()。我解释了所有这些,因为当我按照你在回答中所说的去做的时候,我犯了一个错误;“self.Main.lineEdit.setText(self.value)”…“AttributeError:'Show'对象没有属性'Main'。所以我知道我有点困惑。如果需要更多帮助,我们将不胜感激。谢谢!我已经构建了一个类来在我的Main.py中显示子UI,名为“Show”因此,当我按下主GUI中的按钮时,我连接到主类下的一个函数,并显示我的子UI;self.s=显示(self);self.s.show()。我解释了所有这些,因为当我按照你在回答中所说的去做的时候,我犯了一个错误;“self.Main.lineEdit.setText(self.value)”…“AttributeError:'Show'对象没有属性'Main'。所以我有点困惑。如果需要更多帮助,我们将不胜感激。谢谢!您可以演示如何创建SubUI类的对象。此说明没有意义,为什么要继承2个小部件?
类显示(QtGui.QMainWindow,SubUI)
main.py上的按钮会显示我的SubUI。如果您有解决方案,请添加您的解决方案。谢谢!您需要创建Show类的原因是什么?它似乎只是从您的SubUI类中插入,没有任何函数。相反,在主类ShowSub函数中,您可以执行
self.s=SubUI(self)
然后是
self.s.show()
你完全正确!当我尝试你的方法时,我得到了“'SubUI'对象没有属性'setCentralWidget'”,我的SubUI显示为一个空白窗口。现在,我将我的类SubUI(QtGui.QWidget)更改为->SubUI(QtGui.QMainWindow)现在它工作得非常完美!我感谢您的耐心和友好的帮助!也许您最好在对SubUI(QtGui.QMainWindow)的回答中更改您的类定义,使其更具包容性。您可以演示如何创建SubUI类的对象。此说明没有意义,为什么要继承2个小部件?
class show(QtGui.QMainWindow,子UI)
main.py上的按钮会显示我的SubUI。如果您有解决方案,请添加您的解决方案。谢谢!您需要创建Show类的原因是什么?它似乎只是从您的SubUI类中插入,没有任何函数。相反,在主类ShowSub函数中,您可以执行
self.s=SubUI(self)
然后是
self.s.show()
你完全正确!当我尝试你的方法时,我得到了“'SubUI'对象没有属性'setCentralWidget'”,我的SubUI显示为一个空白窗口。现在,我将我的类SubUI(QtGui.QWidget)更改为->SubUI(QtGui.QMainWindow)现在它工作得非常完美!我感谢您的耐心和友好的帮助!也许最好在您对SubUI(QtGui.QMainWindow)的回答中更改您的类定义,使其更具包容性。