【问题标题】:Pyside / Passing a value from one GUI to another GUIPyside / 将值从一个 GUI 传递到另一个 GUI
【发布时间】:2018-03-03 20:57:34
【问题描述】:

我有一个主 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()

【问题讨论】:

  • 您可以展示如何创建 SubUI 类的对象。
  • 这条指令没有意义,为什么要继承2个widget? class Show(QtGui.QMainWindow, SubUI)
  • 这是我的 SubUI 通过单击 main.py 按钮显示的方式。如果您有解决方案,请添加您的解决方案。谢谢!
  • 您是否有理由需要创建 Show 类?它似乎只是从您的 SubUI 类继承而来,没有任何功能。相反,在 Main 类 ShowSub 函数中,您可以执行 self.s = SubUI(self) 后跟 self.s.show()
  • 你完全正确!当我尝试您的方法时,我得到“'SubUI' 对象没有属性'setCentralWidget'”,并且我的 SubUI 显示为空白窗口。现在,我已经将我的类 SubUI(QtGui.QWidget) 更改为 -> SubUI(QtGui.QMainWindow),现在它工作得非常完美!感谢您的耐心和友好的帮助!也许在您对 SubUI(QtGui.QMainWindow) 的回答中更改您的类定义以使其更具包容性会更好。

标签: python class user-interface pyside


【解决方案1】:

你已经成功了一半!您现在需要做的就是像这样构建您的 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)

【讨论】:

  • 我已经构建了一个类来在我的 main.py 中显示 SubUI,名为“Show”。因此,当我按下主 GUI 中的按钮时,我连接到 Main 类下的一个函数并显示我的 SubUI; self.s = 显示(自我);自我展示()。我已经解释了所有这些,因为我在执行您在回答中所说的操作时遇到了错误; "self.Main.lineEdit.setText(self.value)"..."AttributeError: 'Show' object has no attribute 'Main'。所以知道我有点困惑。任何更多的帮助将不胜感激。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
  • 1970-01-01
相关资源
最近更新 更多