从另一个文件调用函数时无法写入QTextBrowser

时间:2017-11-23 12:07:22

标签: python python-2.7 pyqt

我有一个python插件,其中main.py文件显示QTextBrowser并写入一些文本。这很好用。

我写了第二个文件anotherFile.py,它标识了相同的QTextBrowser,但不能写任何文本。也许它需要取得所有权,我不确定?

以下是使用的代码:

# main.py #
from Example_dockwidget import ExampleDockWidget
from anotherFile import anotherClass

class Example:
    def __init__(self, iface):
        self.iface = iface

    def function(self):
        self.dockwidget = ExampleDockWidget()
        self.dockwidget.show()

        textBrowser = self.dockwidget.textBrowser
        #textBrowser.setText('This works!')
        a = anotherClass(self)
        a.anotherFunction()
# anotherFile.py #
from Example_dockwidget import ExampleDockWidget

class anotherClass:
    def __init__(self, iface):
        self.iface = iface
        self.dockwidget = ExampleDockWidget()

    def anotherFunction(self):
        textBrowser = self.dockwidget.textBrowser
        textBrowser.setText('This does not work!')
        print 'Why?'
# Example_dockwidget.py #
FORM_CLASS, _ = uic.loadUiType(os.path.join(
    os.path.dirname(__file__), 'Example_dockwidget_base.ui'))

class ExampleDockWidget(QtGui.QDockWidget, FORM_CLASS):
    def __init__(self, parent=None):
        super(ExampleDockWidget, self).__init__(parent)
        self.setupUi(self)

2 个答案:

答案 0 :(得分:1)

您的两个班级都创建了自己的ExampleDockWidget。只显示其中一个(调用了show方法),但有两个。

所以发送到一个文本的文本不会出现在另一个上也就不足为奇了。您需要安排anotherClass对象获取对其他ExampleDockWidget的引用,以便它可以共享同一个。{/ p>

答案 1 :(得分:0)

提到strubbly时,我需要引用相同的ExampleDockWidget而不是创建单独的版本。在anotherFile.py文件中,我添加了一个额外的参数来接收ExampleDockWidget

class anotherClass:
    def __init__(self, iface, dockwidget):
        self.iface = iface
        self.dockwidget = dockwidget

    def anotherFunction(self):      
        textBrowser = self.dockwidget.textBrowser
        textBrowser.setText('This does not work!')
        print 'Why?'

然后在main.py文件中插入引用:

def function(self):
    self.dockwidget = ExampleDockWidget()
    self.iface.addDockWidget(Qt.RightDockWidgetArea, self.dockwidget)
    self.dockwidget.show()

    textBrowser = self.dockwidget.textBrowser
    #textBrowser.setText('This works!')
    a = anotherClass(self.iface, self.dockwidget)
    a.anotherFunction()