PyQt: 如何给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 个回答
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)
另外,你还需要在 Main
之前定义 Editor
类。
3- Main
对象没有叫 new_
的方法,只有 Editor
有。所以这一行:
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()