PySide在另一个类中使用GUI元素

时间:2013-01-23 15:52:23

标签: python qt pyside

我正在使用PySide在Qt中创建一个应用程序。在我的main.py中,我有一个名为Program的类,用于设置ui,我有另一个类,它具有与某个区域相关的功能。例如,我有一个区域有一个开始和一个清除按钮。我在类RunArea中定义函数并连接类Program中的信号,但没有任何反应。这是代码。

class Program(QtGui.QMainWindow, Interface.Ui_MainWindow):
    def __init__(self, parent=None):
        super(Program, self).__init__(parent)
        self.setupUi(self)

        self.runArea = RunArea()
        self.startButton.clicked.connect(self.runArea.start)
        self.clearButton.clicked.connect(self.runArea.clear)


class RunArea(QtGui.QMainWindow, Interface.Ui_MainWindow):
    def __init__(self, parent=None):
        super(RunArea, self).__init__(parent)
        self.setupUi(self)

    def start(self):
        self.log.setPlainText("log entry")

    def clear(self):
        self.runTree.clear()

我期望发生的是当我点击开始时,“日志条目”将被放入QTextEdit(在setupUi中定义)。当我点击清除一个名为runTree的TreeWidget时,将清除它。我知道信号正在工作,但没有任何东西出现。有人可以解释为什么它不起作用吗?

1 个答案:

答案 0 :(得分:0)

我不确切知道为什么/你的代码无法正常工作,尽管我怀疑它与继承有关,而不是引用这两个类中的同一个对象。
但是,这应该是这样做的:

class Program(QtGui.QMainWindow, Interface.Ui_MainWindow):
    def __init__(self, parent=None):
        super(Program, self).__init__(parent)
        self.setupUi(self)

        self.runArea = RunArea(self)
        self.startButton.clicked.connect(self.runArea.start)
        self.clearButton.clicked.connect(self.runArea.clear)


class RunArea():
    def __init__(self, parent=None):
        self.parent = parent

    def start(self):
        self.parent.log.setPlainText("log entry")

    def clear(self):
        self.parent.runTree.clear()