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

时间:2017-09-22 10:01:20

标签: 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()

   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()

1 个答案:

答案 0 :(得分:0)

你在中途!您现在需要做的就是构建您的Sub UI类,如此

class SubUI(QtGui.QWidget):
    def __init__(self, main):
        super(SubUI, self).__init__()
        self.Main = main

现在,当您从主UI实例化SubUI时,您只需将MainUI作为参数传递到__init__函数中。如果你从MainUI调用它意味着传入self。像这样

sub_ui = SubUI(self)

这将允许您在子ui

中设置所需的文本
self.Main.lineEdit.setText(self.value)