码迷,mamicode.com
首页 > 其他好文 > 详细

pyqt 学习基础5 - 笔记软件的编辑器

时间:2014-08-30 01:18:59      阅读:429      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   java   io   ar   for   

笔记软件的编辑器

几个疑问

  1. 今天在试着为笔记软件写个编辑器,然后参考qt自带的textedit的示例。下面是一个撤销操作的一段代码,我就疑惑了,这跟用QPushButton应该差不多吧。

    self.actionUndo = QtGui.QAction(

    QtGui.QIcon.fromTheme(‘edit-undo‘,
                    QtGui.QIcon(rsrcPath + ‘/editundo.png‘)),
            "&Undo", self, shortcut=QtGui.QKeySequence.Undo)
    tb.addAction(self.actionUndo)
    menu.addAction(self.actionUndo)

代码比较没有注释

# -*- coding:utf8 -*-
import sip
sip.setapi(‘QString‘, 2)

from PyQt4 import QtCore, QtGui
from PyQt4.QtCore import *
from PyQt4.QtGui import *

import mainQss
# NoDragCombo这个类是为了防止拖动Combobox所带来的bug
class NoDragCombo(QComboBox):
    def __init__(self, parent=None):
        QComboBox.__init__(self, parent)
    def mouseMoveEvent(self, QMouseEvent):
        pass
    def mouseReleaseEvent(self, QMouseEvent):
        pass
class NoDragFontCombo(QFontComboBox):
    def __init__(self, parent=None):
        QFontComboBox.__init__(self, parent)
    def mouseMoveEvent(self, QMouseEvent):
        pass
    def mouseReleaseEvent(self, QMouseEvent):
        pass

class CenterWidget(QWidget):
    def __init__(self, fileName=None, parent=None):
        QWidget.__init__(self, parent)
        self.initAllObjects()
        self.setupFileActions()
        self.setupEditActions()
        self.setupTextActions()
        self.setupTextEdit()
        self.setupStyleSheet()
        self.setupMainUi()
        self.fontChanged(self.textEdit.font())
        self.colorChanged(self.textEdit.textColor())
        self.alignmentChanged(self.textEdit.alignment())
        self.textEdit.document().modificationChanged.connect(
                self.actionSave.setEnabled)
        self.textEdit.document().modificationChanged.connect(
                self.setWindowModified)
        self.textEdit.document().undoAvailable.connect(
                self.actionUndo.setEnabled)
        self.textEdit.document().redoAvailable.connect(
                self.actionRedo.setEnabled)
        self.actionSave.setEnabled(self.textEdit.document().isModified())
        self.actionUndo.setEnabled(self.textEdit.document().isUndoAvailable())
        self.actionRedo.setEnabled(self.textEdit.document().isRedoAvailable())
        self.actionUndo.triggered.connect(self.textEdit.undo)
        self.actionRedo.triggered.connect(self.textEdit.redo)
        self.actionCut.setEnabled(False)
        self.actionCopy.setEnabled(False)
        self.actionCut.triggered.connect(self.textEdit.cut)
        self.actionCopy.triggered.connect(self.textEdit.copy)
        self.actionPaste.triggered.connect(self.textEdit.paste)
        self.textEdit.copyAvailable.connect(self.actionCut.setEnabled)
        self.textEdit.copyAvailable.connect(self.actionCopy.setEnabled)
        QtGui.QApplication.clipboard().dataChanged.connect(
                self.clipboardDataChanged)

    def initAllObjects(self):
        self.oneStyle = QStyleFactory.create("plastique")
        self.textEdit = QTextEdit(self)
        self.layout = QVBoxLayout(self)
        self.topLayout = QHBoxLayout()
        self.topWidget = QWidget(self)
        self.topWidgetLayout = QHBoxLayout(self.topWidget)
        self.fileBtn = QPushButton("File",self.topWidget) 
        self.editBtn = QPushButton("Edit",self.topWidget)
        self.textBtn = QPushButton("Text",self.topWidget)
        self.comboFont = NoDragFontCombo(self.topWidget)
        self.comboSize = NoDragCombo(self.topWidget)
        self.comboStyle = NoDragCombo(self.topWidget)

    def setupStyleSheet(self):
        # self.fileBtn.setStyleSheet(mainQss.writeButton)
        # self.fileBtn.setGeometry(2, 1, 24, 24)
        # self.editBtn.setStyleSheet(mainQss.writeButton)
        # self.editBtn.setGeometry(28, 1, 24, 24)
        # self.textBtn.setStyleSheet(mainQss.writeButton)
        # self.textBtn.setGeometry(54, 1, 24, 24)
        # self.comboFont.setGeometry(80, 1, 100, 24)
        # self.comboSize.setGeometry(182, 1, 100, 24)
        # self.comboStyle.setGeometry(284, 1, 100, 24)
        self.fileBtn.setStyle(self.oneStyle)
        self.editBtn.setStyle(self.oneStyle)
        self.textBtn.setStyle(self.oneStyle)
        self.comboStyle.setStyle(self.oneStyle)
        self.comboSize.setStyle(self.oneStyle)
        self.comboFont.setStyle(self.oneStyle)
        self.topWidget.setMinimumHeight(26)
        # self.topWidget.setMaximumHeight(26)
        self.topWidget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum)
        self.topLayout.setContentsMargins(0, 0, 0, 0)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.setSpacing(0)

    def setupTextEdit(self):
        self.textEdit.setFocus()
        oneFont = QFont("Times New Romane", 13, QFont.Normal, False)
        self.textEdit.setFont(oneFont)
        self.textEdit.currentCharFormatChanged.connect(
                self.currentCharFormatChanged)
        self.textEdit.cursorPositionChanged.connect(self.cursorPositionChanged)
        self.setCurrentFileName()

    def setupMainUi(self):
        self.topLayout.addWidget(self.topWidget)
        self.layout.addLayout(self.topLayout)
        self.layout.addWidget(self.textEdit)
        self.setLayout(self.layout)
        self.topWidgetLayout.addWidget(self.fileBtn)
        self.topWidgetLayout.addWidget(self.editBtn)
        self.topWidgetLayout.addWidget(self.textBtn)
        self.topWidgetLayout.addWidget(self.comboFont)
        self.topWidgetLayout.addWidget(self.comboSize)
        self.topWidgetLayout.addWidget(self.comboStyle)

    def setupFileActions(self):
        menu = QMenu("&File", self)
        self.fileBtn.setMenu(menu)
        self.actionNew = QAction("&New", self,
                priority=QAction.LowPriority,
                shortcut=QKeySequence.New,
                triggered=self.fileNew)
        menu.addAction(self.actionNew)

        self.actionNew = QtGui.QAction(
                "&New", self, priority=QtGui.QAction.LowPriority,
                shortcut=QtGui.QKeySequence.New, triggered=self.fileNew)
        menu.addAction(self.actionNew)

        self.actionOpen = QtGui.QAction(
                "&Open...", self, shortcut=QtGui.QKeySequence.Open,
                triggered=self.fileOpen)
        menu.addAction(self.actionOpen)
        menu.addSeparator()

        self.actionSave = QtGui.QAction(
                "&Save", self, shortcut=QtGui.QKeySequence.Save,
                triggered=self.fileSave, enabled=False)
        menu.addAction(self.actionSave)

        self.actionSaveAs = QtGui.QAction("Save &As...", self,
                priority=QtGui.QAction.LowPriority,
                shortcut=QtCore.Qt.CTRL + QtCore.Qt.SHIFT + QtCore.Qt.Key_S,
                triggered=self.fileSaveAs)
        menu.addAction(self.actionSaveAs)
        menu.addSeparator()

        self.actionPrint = QtGui.QAction(
                "&Print...", self, priority=QtGui.QAction.LowPriority,
                shortcut=QtGui.QKeySequence.Print, triggered=self.filePrint)
        menu.addAction(self.actionPrint)

        self.actionPrintPreview = QtGui.QAction(
                "Print Preview...", self,
                shortcut=QtCore.Qt.CTRL + QtCore.Qt.SHIFT + QtCore.Qt.Key_P,
                triggered=self.filePrintPreview)
        menu.addAction(self.actionPrintPreview)

        self.actionPrintPdf = QtGui.QAction(
                "&Export PDF...", self, priority=QtGui.QAction.LowPriority,
                shortcut=QtCore.Qt.CTRL + QtCore.Qt.Key_D,
                triggered=self.filePrintPdf)
        menu.addAction(self.actionPrintPdf)
        menu.addSeparator()

        self.actionQuit = QtGui.QAction("&Quit", self,
                shortcut=QtGui.QKeySequence.Quit, triggered=self.close)
        menu.addAction(self.actionQuit)



    def setupEditActions(self):
        menu = QMenu("&Edit", self)
        self.editBtn.setMenu(menu)

        self.actionUndo = QtGui.QAction(
                "&Undo", self, shortcut=QtGui.QKeySequence.Undo)
        menu.addAction(self.actionUndo)

        self.actionRedo = QtGui.QAction(
                "&Redo", self, priority=QtGui.QAction.LowPriority,
                shortcut=QtGui.QKeySequence.Redo)
        menu.addAction(self.actionRedo)
        menu.addSeparator()

        self.actionCut = QtGui.QAction(
                "Cu&t", self, priority=QtGui.QAction.LowPriority,
                shortcut=QtGui.QKeySequence.Cut)
        menu.addAction(self.actionCut)

        self.actionCopy = QtGui.QAction(
                "&Copy", self, priority=QtGui.QAction.LowPriority,
                shortcut=QtGui.QKeySequence.Copy)
        menu.addAction(self.actionCopy)

        self.actionPaste = QtGui.QAction(
                "&Paste", self, priority=QtGui.QAction.LowPriority,
                shortcut=QtGui.QKeySequence.Paste,
                enabled=(len(QtGui.QApplication.clipboard().text()) != 0))
        menu.addAction(self.actionPaste)

    def fileNew(self):
        print "create new file"
        if self.maybeSave():
            self.textEdit.clear()
            self.setCurrentFileName()

    def fileOpen(self):
        print "open file"
        fn = QFileDialog.getOpenFileName(self, "Open File...", None,
                "HTML-Files (*.htm *html);;ALL Files (*)")
        if fn:
            self.load(fn)

    def filePrint(self):
        printer = QtGui.QPrinter(QtGui.QPrinter.HighResolution)
        dlg = QtGui.QPrintDialog(printer, self)

        if self.textEdit.textCursor().hasSelection():
            dlg.addEnabledOption(QtGui.QAbstractPrintDialog.PrintSelection)

        dlg.setWindowTitle("Print Document")

        if dlg.exec_() == QtGui.QDialog.Accepted:
            self.textEdit.print_(printer)

        del dlg

    def filePrintPdf(self):
        print "print pdf"
        fn = QtGui.QFileDialog.getSaveFileName(self, "Export PDF", None,
                "PDF files (*.pdf);;All Files (*)")

        if fn:
            if QtCore.QFileInfo(fn).suffix().isEmpty():
                fn += ‘.pdf‘

            printer = QtGui.QPrinter(QtGui.QPrinter.HighResolution)
            printer.setOutputFormat(QtGui.QPrinter.PdfFormat)
            printer.setOutputFileName(fileName)
            self.textEdit.document().print_(printer)

    def printPreview(self, printer):
        self.textEdit.print_(printer)

    def filePrintPreview(self):
        print "print Preview"
        printer = QtGui.QPrinter(QtGui.QPrinter.HighResolution)
        preview = QtGui.QPrintPreviewDialog(printer, self)
        preview.paintRequested.connect(self.printPreview)
        preview.exec_()

    def fileSave(self):
        print "save file"
        if not self.fileName:
            return self.fileSaveAs()
        writer = QTextDocumentWriter(self.fileName)
        success = writer.write(self.textEdit.document())
        if success:
            self.textEdit.document().setModified(False)
        return success

    def fileSaveAs(self):
        print "file save as"   
        fn = QtGui.QFileDialog.getSaveFileName(self, "Save as...", "C:/",
                "ODF files (*.odt);;HTML-Files (*.htm *.html);;All Files (*)")
        if not fn:
            return False

        lfn = fn.lower()
        if not lfn.endswith((‘.odt‘, ‘.htm‘, ‘.html‘)):
            # The default.
            fn += ‘.odt‘

        self.setCurrentFileName(fn)
        return self.fileSave()

    def load(self, f):
        if not QtCore.QFile.exists(f):
            return False

        fh = QtCore.QFile(f)
        if not fh.open(QtCore.QFile.ReadOnly):
            return False

        data = fh.readAll()
        codec = QtCore.QTextCodec.codecForHtml(data)
        unistr = codec.toUnicode(data)

        if QtCore.Qt.mightBeRichText(unistr):
            self.textEdit.setHtml(unistr)
        else:
            self.textEdit.setPlainText(unistr)

        self.setCurrentFileName(f)
        return True

    def maybeSave(self):
        if not self.textEdit.document().isModified():
            return True

        if self.fileName.startswith(‘:/‘):
            return True

        ret = QtGui.QMessageBox.warning(self, "Application",
                "The document has been modified.\n"
                "Do you want to save your changes?",
                QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard |
                        QtGui.QMessageBox.Cancel)

        if ret == QtGui.QMessageBox.Save:
            return self.fileSave()

        if ret == QtGui.QMessageBox.Cancel:
            return False

        return True

    def setupTextActions(self):
        menu = QtGui.QMenu("F&ormat", self)
        self.textBtn.setMenu(menu)

        self.actionTextBold = QtGui.QAction(
                "&Bold", self, priority=QtGui.QAction.LowPriority,
                shortcut=QtCore.Qt.CTRL + QtCore.Qt.Key_B,
                triggered=self.textBold, checkable=True)
        bold = QtGui.QFont()
        bold.setBold(True)
        self.actionTextBold.setFont(bold)
        menu.addAction(self.actionTextBold)

        self.actionTextItalic = QtGui.QAction(
                "&Italic", self, priority=QtGui.QAction.LowPriority,
                shortcut=QtCore.Qt.CTRL + QtCore.Qt.Key_I,
                triggered=self.textItalic, checkable=True)
        italic = QtGui.QFont()
        italic.setItalic(True)
        self.actionTextItalic.setFont(italic)
        menu.addAction(self.actionTextItalic)

        self.actionTextUnderline = QtGui.QAction(
                "&Underline", self, priority=QtGui.QAction.LowPriority,
                shortcut=QtCore.Qt.CTRL + QtCore.Qt.Key_U,
                triggered=self.textUnderline, checkable=True)
        underline = QtGui.QFont()
        underline.setUnderline(True)
        self.actionTextUnderline.setFont(underline)
        menu.addAction(self.actionTextUnderline)

        menu.addSeparator()

        grp = QtGui.QActionGroup(self, triggered=self.textAlign)

        # Make sure the alignLeft is always left of the alignRight.
        if QtGui.QApplication.isLeftToRight():
            self.actionAlignLeft = QtGui.QAction(
                    "&Left", grp)
            self.actionAlignCenter = QtGui.QAction(
                    "C&enter", grp)
            self.actionAlignRight = QtGui.QAction(
                    "&Right", grp)
        else:
            self.actionAlignRight = QtGui.QAction(
                    "&Right", grp)
            self.actionAlignCenter = QtGui.QAction(
                    "C&enter", grp)
            self.actionAlignLeft = QtGui.QAction(
                    "&Left", grp)

        self.actionAlignJustify = QtGui.QAction(
                "&Justify", grp)

        self.actionAlignLeft.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_L)
        self.actionAlignLeft.setCheckable(True)
        self.actionAlignLeft.setPriority(QtGui.QAction.LowPriority)

        self.actionAlignCenter.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_E)
        self.actionAlignCenter.setCheckable(True)
        self.actionAlignCenter.setPriority(QtGui.QAction.LowPriority)

        self.actionAlignRight.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_R)
        self.actionAlignRight.setCheckable(True)
        self.actionAlignRight.setPriority(QtGui.QAction.LowPriority)

        self.actionAlignJustify.setShortcut(QtCore.Qt.CTRL + QtCore.Qt.Key_J)
        self.actionAlignJustify.setCheckable(True)
        self.actionAlignJustify.setPriority(QtGui.QAction.LowPriority)

        menu.addSeparator()

        pix = QtGui.QPixmap(16, 16)
        pix.fill(QtCore.Qt.black)
        self.actionTextColor = QtGui.QAction(QtGui.QIcon(pix), "&Color...",
                self, triggered=self.textColor)
        menu.addAction(self.actionTextColor)

        self.comboStyle.addItem("Standard")
        self.comboStyle.addItem("Bullet List (Disc)")
        self.comboStyle.addItem("Bullet List (Circle)")
        self.comboStyle.addItem("Bullet List (Square)")
        self.comboStyle.addItem("Ordered List (Decimal)")
        self.comboStyle.addItem("Ordered List (Alpha lower)")
        self.comboStyle.addItem("Ordered List (Alpha upper)")
        self.comboStyle.addItem("Ordered List (Roman lower)")
        self.comboStyle.addItem("Ordered List (Roman upper)")
        self.comboStyle.activated.connect(self.textStyle)
        self.comboFont.activated[str].connect(self.textFamily)
        self.comboSize.setObjectName("comboSize")
        self.comboSize.setEditable(True)
        db = QtGui.QFontDatabase()
        for size in db.standardSizes():
            self.comboSize.addItem("%s" % (size))
        self.comboSize.activated[str].connect(self.textSize)
        self.comboSize.setCurrentIndex(
                self.comboSize.findText(
                        "%s" % (QtGui.QApplication.font().pointSize())))

    def textAlign(self):
        print "text align"
    def textBold(self):
        print "text bold"
        fmt = QTextCharFormat()
        fmt.setFontWeight(self.actionTextBold.isChecked() and 
                QFont.Bold or QFont.Normal)
        self.mergeFormatOnWordOrSelection(fmt)

    def textUnderline(self):
        fmt = QtGui.QTextCharFormat()
        fmt.setFontUnderline(self.actionTextUnderline.isChecked())
        self.mergeFormatOnWordOrSelection(fmt)

    def textItalic(self):
        fmt = QtGui.QTextCharFormat()
        fmt.setFontItalic(self.actionTextItalic.isChecked())
        self.mergeFormatOnWordOrSelection(fmt)

    def textFamily(self, family):
        fmt = QtGui.QTextCharFormat()
        fmt.setFontFamily(family)
        self.mergeFormatOnWordOrSelection(fmt)

    def textSize(self, pointSize):
        pointSize = float(pointSize)
        if pointSize > 0:
            fmt = QtGui.QTextCharFormat()
            fmt.setFontPointSize(pointSize)
            self.mergeFormatOnWordOrSelection(fmt)

    def textStyle(self, styleIndex):
        cursor = self.textEdit.textCursor()
        if styleIndex:
            styleDict = {
                1: QtGui.QTextListFormat.ListDisc,
                2: QtGui.QTextListFormat.ListCircle,
                3: QtGui.QTextListFormat.ListSquare,
                4: QtGui.QTextListFormat.ListDecimal,
                5: QtGui.QTextListFormat.ListLowerAlpha,
                6: QtGui.QTextListFormat.ListUpperAlpha,
                7: QtGui.QTextListFormat.ListLowerRoman,
                8: QtGui.QTextListFormat.ListUpperRoman,
            }

            style = styleDict.get(styleIndex, QtGui.QTextListFormat.ListDisc)
            cursor.beginEditBlock()
            blockFmt = cursor.blockFormat()
            listFmt = QtGui.QTextListFormat()

            if cursor.currentList():
                listFmt = cursor.currentList().format()
            else:
                listFmt.setIndent(blockFmt.indent() + 1)
                blockFmt.setIndent(0)
                cursor.setBlockFormat(blockFmt)

            listFmt.setStyle(style)
            cursor.createList(listFmt)
            cursor.endEditBlock()
        else:
            bfmt = QtGui.QTextBlockFormat()
            bfmt.setObjectIndex(-1)
            cursor.mergeBlockFormat(bfmt)

    def textColor(self):
        col = QtGui.QColorDialog.getColor(self.textEdit.textColor(), self)
        if not col.isValid():
            return

        fmt = QtGui.QTextCharFormat()
        fmt.setForeground(col)
        self.mergeFormatOnWordOrSelection(fmt)
        self.colorChanged(col)

    def textAlign(self, action):
        if action == self.actionAlignLeft:
            self.textEdit.setAlignment(
                    QtCore.Qt.AlignLeft | QtCore.Qt.AlignAbsolute)
        elif action == self.actionAlignCenter:
            self.textEdit.setAlignment(QtCore.Qt.AlignHCenter)
        elif action == self.actionAlignRight:
            self.textEdit.setAlignment(
                    QtCore.Qt.AlignRight | QtCore.Qt.AlignAbsolute)
        elif action == self.actionAlignJustify:
            self.textEdit.setAlignment(QtCore.Qt.AlignJustify)
    def mergeFormatOnWordOrSelection(self, format):
        cursor = self.textEdit.textCursor()
        if not cursor.hasSelection():
            cursor.select(QtGui.QTextCursor.WordUnderCursor)

        cursor.mergeCharFormat(format)
        self.textEdit.mergeCurrentCharFormat(format)

    def currentCharFormatChanged(self, format):
        self.fontChanged(format.font())
        self.colorChanged(format.foreground().color())
    def cursorPositionChanged(self):
        self.alignmentChanged(self.textEdit.alignment()) 
    def clipboardDataChanged(self):
        self.actionPaste.setEnabled(
                len(QtGui.QApplication.clipboard().text()) != 0)
    def setCurrentFileName(self, fileName=‘‘):
        self.fileName = fileName
        self.textEdit.document().setModified(False)

        if not fileName:
            shownName = ‘untitled.txt‘
        else:
            shownName = QtCore.QFileInfo(fileName).fileName()

        self.setWindowTitle(self.tr("%s[*] - %s" % (shownName, "Rich Text")))
        self.setWindowModified(False)
    def colorChanged(self, color):
        pix = QtGui.QPixmap(16, 16)
        pix.fill(color)
        self.actionTextColor.setIcon(QtGui.QIcon(pix))
    def alignmentChanged(self, alignment):
        if alignment & QtCore.Qt.AlignLeft:
            self.actionAlignLeft.setChecked(True)
        elif alignment & QtCore.Qt.AlignHCenter:
            self.actionAlignCenter.setChecked(True)
        elif alignment & QtCore.Qt.AlignRight:
            self.actionAlignRight.setChecked(True)
        elif alignment & QtCore.Qt.AlignJustify:
            self.actionAlignJustify.setChecked(True)
    def fontChanged(self, font):
        self.comboFont.setCurrentIndex(
                self.comboFont.findText(QtGui.QFontInfo(font).family()))
        self.comboSize.setCurrentIndex(
                self.comboSize.findText("%s" % font.pointSize()))
        self.actionTextBold.setChecked(font.bold())
        self.actionTextItalic.setChecked(font.italic())
        self.actionTextUnderline.setChecked(font.underline())


class mainUi(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setupSomeVariable()
        self.setupMainUi() # create all button,widget and so on

        self.connect(self.btnClose, SIGNAL("clicked()"), QtGui.qApp,                 SLOT("quit()"))
        self.connect(self.btnMini, SIGNAL("clicked()"),self.showMinimized)
        self.connect(self.btnMax, SIGNAL("clicked()"),self.showMaxNor)

    def setupSomeVariable(self):
        pass

    def setupMainUi(self):
        self.layout = QHBoxLayout(self) # main layout

        # three widget, left-center-right
        self.leftwidget = QWidget()
        self.centerwidget = CenterWidget()
        self.rightwidget = QWidget()
        self.leftwidget.setMaximumWidth(300)
        self.leftwidget.setMinimumWidth(200)
        self.leftwidget.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) # growflag
        self.centerwidget.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) # growflag
        self.rightwidget.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) # growflag
        self.centerwidget.setMinimumWidth(550)
        self.rightwidget.setMinimumWidth(250)
        self.rightwidget.setMaximumWidth(300)

        self.centerwidget.setObjectName(‘name‘)
        # customize the three widget
        self.leftwidget.setStyleSheet(mainQss.threeWidget)
        #self.centerwidget.setStyleSheet(mainQss.threeWidget)
        self.rightwidget.setStyleSheet(mainQss.threeWidget)

        # to show user headportrait
        headLabel = QLabel(self.rightwidget)
        headLabel.setStyleSheet(mainQss.headLabel)
        headLabel.setGeometry(25, 50, 80, 80)

        # set several button
        self.blogButton = QPushButton(u‘我的博客‘,self.rightwidget)
        self.blogButton.setStyleSheet(mainQss.textButton)
        self.blogButton.setGeometry(25, 180, 150, 30)
        self.blogWriteButton = QPushButton(self.rightwidget)
        self.blogWriteButton.setStyleSheet(mainQss.writeButton)
        self.blogWriteButton.setGeometry(180, 182, 24, 24)

        self.noteButton = QPushButton(u‘日常笔记‘,self.rightwidget)
        self.noteButton.setStyleSheet(mainQss.textButton)
        self.noteButton.setGeometry(25, 220, 150, 30)
        self.noteWriteButton = QPushButton(self.rightwidget)
        self.noteWriteButton.setStyleSheet(mainQss.writeButton)
        self.noteWriteButton.setGeometry(180, 222, 24, 24)

        self.taskButton = QPushButton(u‘今日任务‘,self.rightwidget)
        self.taskButton.setStyleSheet(mainQss.textButton)
        self.taskButton.setGeometry(25, 260, 150, 30) 
        self.taskWriteButton = QPushButton(self.rightwidget)
        self.taskWriteButton.setStyleSheet(mainQss.writeButton)
        self.taskWriteButton.setGeometry(180, 262, 24, 24) 

        self.btnClose = QPushButton(self.leftwidget)
        self.btnMini = QPushButton(self.leftwidget)
        self.btnMax = QPushButton(self.leftwidget)
        self.btnClose.setGeometry(5, 5, 24, 24)
        self.btnMini.setGeometry(64, 5, 24, 24)
        self.btnMax.setGeometry(35, 5, 24, 24)
        self.btnClose.setStyleSheet(mainQss.btn_close)
        self.btnMini.setStyleSheet(mainQss.btn_mini)
        self.btnMax.setStyleSheet(mainQss.btn_max)

        # create three sub layout       
        self.leftLayout = QVBoxLayout()
        self.centerLayout = QVBoxLayout()
        self.rightLayout = QVBoxLayout()
        self.leftLayout.addWidget(self.leftwidget)
        self.centerLayout.addWidget(self.centerwidget)
        self.rightLayout.addWidget(self.rightwidget)
        self.layout.addLayout(self.leftLayout)
        self.layout.addLayout(self.centerLayout)
        self.layout.addLayout(self.rightLayout)

        # customize main layout 
        self.layout.setContentsMargins(0,0,0,0)
        self.layout.setSpacing(0)
        self.setLayout(self.layout)
        self.setWindowOpacity(0.9)
        self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Ignored)
        self.resize(1000, 600)




    def showMaxNor(self):
        if self.isMaximized():
            self.showNormal()
            self.maxToNor = False
        else:
            self.showMaximized()
            self.maxToNor = True

    def mousePressEvent(self, event):
        if self.isMaximized():
            return 
        if event.button() == Qt.LeftButton:
            self.dragPos = event.globalPos() - self.pos()
            event.accept()

    def mouseMoveEvent(self, QMouseEvent):
        if self.isMaximized():
            return
        if QMouseEvent.buttons() and Qt.LeftButton:
            self.move(QMouseEvent.globalPos() - self.dragPos)
            QMouseEvent.accept()

    def mouseReleaseEvent(self, QMouseEvent):
        pass


if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    mu = mainUi()
    mu.show()
    sys.exit(app.exec_())

上图

bubuko.com,布布扣

pyqt 学习基础5 - 笔记软件的编辑器

标签:style   blog   http   color   os   java   io   ar   for   

原文地址:http://my.oschina.net/zjuysw/blog/308239

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!