笔记软件的编辑器
几个疑问
-
今天在试着为笔记软件写个编辑器,然后参考qt自带的textedit的示例。下面是一个撤销操作的一段代码,我就疑惑了,这跟用QPushButton应该差不多吧。
<!-- lang: python -->
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)
代码比较没有注释
<!-- lang: python -->
# -*- 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_())
##上图