PyQt:如何向QTextEdit添加新标签?

时间:2014-03-10 18:10:02

标签: python pyqt qtablewidget qtextedit

我需要添加一个新标签,但我遇到了问题。我想在主窗口中添加新选项卡,并保留类Editor()的方法。我可以这样做,而不必创建类Editor(),但需要它。抱歉我的英文。

这是我的代码:


from PyQt4 import QtGui
from PyQt4 import QtCore


class Main(QtGui.QMainWindow):

    def __init__(self):
        super(Main, self).__init__()

        self.initUi()

    def initUi(self):
        self.setWindowTitle("Editor")
        self.resize(640, 480)
        self.edit = Editor()

        newAc = QtGui.QAction('New', self)
        newAc.setShortcut('Ctrl+N')
        newAc.triggered.connect(self.new_)

        menu = self.menuBar()
        filemenu = menu.addMenu('&File')
        filemenu.addAction(newAc)

        self.tab = QtGui.QTabWidget(self)
        self.setCentralWidget(self.tab)


class Editor(QtGui.QTextEdit):

    def __init__(self, parent=None):
        super(Editor, self).__init__(parent)


    def new_(self):
        tab = QtGui.QTextEdit(self.tab)
        self.tab.addTab(tab, 'Untitled')

def main():
    import sys
    app = QtGui.QApplication(sys.argv)
    w = Main()
    w.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:3)

如果要在两个(或更多)选项卡上使用相同的文本,可以使用相同的Editor类,但如果不是,则需要为每个选项卡实例化Editor对象。

您的代码也存在一些问题:

1-您正在处理Editor个对象中的选项卡。相反,您必须处理Main级别的标签。

2-您在创建Main对象时添加的“默认”标签没有任何相关的QTextEdit更改:

self.tab = QtGui.QTabWidget(self)
self.setCentralWidget(self.tab)     # <---- tab without QTextEdit

添加:

self.tab = QtGui.QTabWidget(self)
self.editor = Editor(self.tab)      # editor receives self.tab widget as parent.
self.setCentralWidget(self.tab) 

您还需要在Editor之前定义Main课程。

3- Main对象没有任何名为new_的方法,编辑所做的。这一行:

newAc.triggered.connect(self.new_)

这是错误的。

所以你的代码可能如下:

from PyQt4 import QtGui
from PyQt4 import QtCore


class Editor(QtGui.QTextEdit):

    def __init__(self, parent=None):
        super(Editor, self).__init__(parent)


class Main(QtGui.QMainWindow):

    def __init__(self, parent=None):
        super(Main, self).__init__(parent)

        self.initUi()

    def initUi(self):
        self.setWindowTitle("Editor")
        self.resize(640, 480)

        newAc = QtGui.QAction('New', self)
        newAc.setShortcut('Ctrl+N')
        newAc.triggered.connect(self.new_)

        menu = self.menuBar()
        filemenu = menu.addMenu('&File')
        filemenu.addAction(newAc)

        self.tab = QtGui.QTabWidget(self)
        self.setCentralWidget(self.tab)
        self.tab.addTab(Editor(), "New Text")

    def new_(self):
        self.tab.addTab(Editor(), "New text")


def main():
    import sys
    app = QtGui.QApplication(sys.argv)
    w = Main()
    w.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()