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)