PyQt:如何添加选项卡

3
我正在尝试在我的程序中添加选项卡,但目前还没有成功;选项卡出现在菜单栏上方,我不确定原因。这是我的代码:
#! /usr/bin/python

import sys
import os
from PyQt4 import QtGui

class Notepad(QtGui.QMainWindow):

    def __init__(self):
        super(Notepad, self).__init__()
        self.initUI()

    def initUI(self):
        newAction = QtGui.QAction('New', self)
        newAction.setShortcut('Ctrl+N')
        newAction.setStatusTip('Create new file')
        newAction.triggered.connect(self.newFile)

        saveAction = QtGui.QAction('Save', self)
        saveAction.setShortcut('Ctrl+S')
        saveAction.setStatusTip('Save current file')
        saveAction.triggered.connect(self.saveFile)

        openAction = QtGui.QAction('Open', self)
        openAction.setShortcut('Ctrl+O')
        openAction.setStatusTip('Open a file')
        openAction.triggered.connect(self.openFile)

        closeAction = QtGui.QAction('Close', self)
        closeAction.setShortcut('Ctrl+Q')
        closeAction.setStatusTip('Close Notepad')
        closeAction.triggered.connect(self.close)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(newAction)
        fileMenu.addAction(saveAction)
        fileMenu.addAction(openAction)
        fileMenu.addAction(closeAction)

        tab_widget = QtGui.QTabWidget(self)     # add tab
        tab1 = QtGui.QWidget()
        tab_widget.addTab(tab1, "Main") 

        self.text = QtGui.QTextEdit(tab_widget)
        self.setCentralWidget(self.text)

        self.setGeometry(300,300,300,300)
        self.setWindowTitle('Notepad')
        self.show()

    def newFile(self):
        self.text.clear()

    def saveFile(self):
        filename = QtGui.QFileDialog.getSaveFileName(self, 'Save File', os.getenv('HOME'))
        f = open(filename, 'w')
        filedata = self.text.toPlainText()
        f.write(filedata)
        f.close()


    def openFile(self):
        filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))
        f = open(filename, 'r')
        filedata = f.read()
        self.text.setText(filedata)
        f.close()

def main():
    app = QtGui.QApplication(sys.argv)
    notepad = Notepad()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我希望将文本框放在选项卡中,有任何帮助都会很棒。

1个回答

3
不要在initUI中创建文本小部件,而是在newFileopenFile方法中创建它,然后将其添加到tab_widget中(同时在initUI中保存对tab_wiget的引用以便之后访问)。例如:
def openFile(self):
    filename = QtGui.QFileDialog.getOpenFileName(self, 'Open File', os.getenv('HOME'))[0]
    with open(filename, 'r') as f:
        filedata = f.read()
        text_widget = QtGui.QTextEdit(self.tab_widget)
        text_widget.setText(filedata)
        self.tab_widget.addTab(text_widget, os.path.basename(filename))

它对我来说还没能正常运行;我尝试将其应用于newFile,但选项卡框的一部分似乎仍然覆盖着菜单栏。这是我的代码链接:http://pastebin.com/JxCsu31P 。 - user2638731
在第41行后,您缺少self.setCentralWidget(self.tab_widget) - Viktor Kerkez
好的,现在几乎可以工作了,但是由于某种原因,文本区域没有填满整个选项卡区域。我该怎么做呢?这是我的当前代码:链接 - user2638731
不要创建小部件,直接将文本添加到tab_widget中。用以下代码替换newFile中的代码:text = QtGui.QTextEdit(self.tab_widget); self.tab_widget.addTab(text, "Untitled.asm") - Viktor Kerkez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接