aboutsummaryrefslogtreecommitdiffstats
path: root/examples/widgets
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2021-03-24 18:26:06 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2021-03-25 12:31:43 +0100
commit9afc6a8ed1a717c1f153e190ba5d6237451c42a2 (patch)
tree213e60dd56f6636775a6d66b2b4147fdd764ddc7 /examples/widgets
parent2f18ab9c93d4fae8d8d7e4d84bd9cd2e7fd22c3d (diff)
Brush up the main window examples
- Use snake case in dockwidgets and application. - Fix imports in application to be consistent with others. - Fix the code saving/restoring geometries in mdi/application to use QWidget.save/restoreGeometry() instead of saving pos/size since that handles multiscreen setups correctly. Use 'QtProject' as settings category. - Use theme icons in application as in mdi. - Configure QFileDialog for saving HTML in dockwidgets. - Replace QSignalMapper by partial functions in mdi. - Fix one oversight of 4f2f9e2dc511ddcf802e342361e89edbf03a4a88 in mdi. - Add command line arguments Task-number: PYSIDE-1112 Change-Id: I7eca08a675876c74c6e754b946a2e63df4da3684 Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'examples/widgets')
-rw-r--r--examples/widgets/mainwindows/application/application.py290
-rw-r--r--examples/widgets/mainwindows/dockwidgets/dockwidgets.py200
-rw-r--r--examples/widgets/mainwindows/mdi/mdi.py63
3 files changed, 290 insertions, 263 deletions
diff --git a/examples/widgets/mainwindows/application/application.py b/examples/widgets/mainwindows/application/application.py
index 93500efe1..e61c6acb8 100644
--- a/examples/widgets/mainwindows/application/application.py
+++ b/examples/widgets/mainwindows/application/application.py
@@ -2,7 +2,7 @@
#############################################################################
##
## Copyright (C) 2013 Riverbank Computing Limited.
-## Copyright (C) 2016 The Qt Company Ltd.
+## Copyright (C) 2021 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -40,239 +40,253 @@
##
#############################################################################
-from PySide6 import QtCore, QtGui, QtWidgets
+from argparse import ArgumentParser, RawTextHelpFormatter
+import sys
+
+from PySide6.QtCore import (QByteArray, QFile, QFileInfo, QSaveFile, QSettings,
+ QTextStream, Qt)
+from PySide6.QtGui import QAction, QIcon, QKeySequence
+from PySide6.QtWidgets import (QApplication, QFileDialog, QMainWindow,
+ QMessageBox, QTextEdit, QWidget)
import application_rc
-class MainWindow(QtWidgets.QMainWindow):
+class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
- self.curFile = ''
+ self._cur_file = ''
- self.textEdit = QtWidgets.QTextEdit()
- self.setCentralWidget(self.textEdit)
+ self._text_edit = QTextEdit()
+ self.setCentralWidget(self._text_edit)
- self.createActions()
- self.createMenus()
- self.createToolBars()
- self.createStatusBar()
+ self.create_actions()
+ self.create_menus()
+ self.create_tool_bars()
+ self.create_status_bar()
- self.readSettings()
+ self.read_settings()
- self.textEdit.document().contentsChanged.connect(self.documentWasModified)
+ self._text_edit.document().contentsChanged.connect(self.document_was_modified)
- self.setCurrentFile('')
+ self.set_current_file('')
self.setUnifiedTitleAndToolBarOnMac(True)
def closeEvent(self, event):
- if self.maybeSave():
- self.writeSettings()
+ if self.maybe_save():
+ self.write_settings()
event.accept()
else:
event.ignore()
- def newFile(self):
- if self.maybeSave():
- self.textEdit.clear()
- self.setCurrentFile('')
+ def new_file(self):
+ if self.maybe_save():
+ self._text_edit.clear()
+ self.set_current_file('')
def open(self):
- if self.maybeSave():
- fileName, filtr = QtWidgets.QFileDialog.getOpenFileName(self)
+ if self.maybe_save():
+ fileName, filtr = QFileDialog.getOpenFileName(self)
if fileName:
- self.loadFile(fileName)
+ self.load_file(fileName)
def save(self):
- if self.curFile:
- return self.saveFile(self.curFile)
+ if self._cur_file:
+ return self.save_file(self._cur_file)
- return self.saveAs()
+ return self.save_as()
- def saveAs(self):
- fileName, filtr = QtWidgets.QFileDialog.getSaveFileName(self)
+ def save_as(self):
+ fileName, filtr = QFileDialog.getSaveFileName(self)
if fileName:
- return self.saveFile(fileName)
+ return self.save_file(fileName)
return False
def about(self):
- QtWidgets.QMessageBox.about(self, "About Application",
+ QMessageBox.about(self, "About Application",
"The <b>Application</b> example demonstrates how to write "
"modern GUI applications using Qt, with a menu bar, "
"toolbars, and a status bar.")
- def documentWasModified(self):
- self.setWindowModified(self.textEdit.document().isModified())
+ def document_was_modified(self):
+ self.setWindowModified(self._text_edit.document().isModified())
- def createActions(self):
- self.newAct = QtGui.QAction(QtGui.QIcon(':/images/new.png'), "&New",
- self, shortcut=QtGui.QKeySequence.New,
- statusTip="Create a new file", triggered=self.newFile)
+ def create_actions(self):
+ icon = QIcon.fromTheme("document-new", QIcon(':/images/new.png'))
+ self._new_act = QAction(icon, "&New", self, shortcut=QKeySequence.New,
+ statusTip="Create a new file", triggered=self.new_file)
- self.openAct = QtGui.QAction(QtGui.QIcon(':/images/open.png'),
- "&Open...", self, shortcut=QtGui.QKeySequence.Open,
- statusTip="Open an existing file", triggered=self.open)
+ icon = QIcon.fromTheme("document-open", QIcon(':/images/open.png'))
+ self._open_act = QAction(icon, "&Open...", self,
+ shortcut=QKeySequence.Open, statusTip="Open an existing file",
+ triggered=self.open)
- self.saveAct = QtGui.QAction(QtGui.QIcon(':/images/save.png'),
- "&Save", self, shortcut=QtGui.QKeySequence.Save,
+ icon = QIcon.fromTheme("document-save", QIcon(':/images/save.png'))
+ self._save_act = QAction(icon, "&Save", self,
+ shortcut=QKeySequence.Save,
statusTip="Save the document to disk", triggered=self.save)
- self.saveAsAct = QtGui.QAction("Save &As...", self,
- shortcut=QtGui.QKeySequence.SaveAs,
+ self._save_as_act = QAction("Save &As...", self,
+ shortcut=QKeySequence.SaveAs,
statusTip="Save the document under a new name",
- triggered=self.saveAs)
+ triggered=self.save_as)
- self.exitAct = QtGui.QAction("E&xit", self, shortcut="Ctrl+Q",
+ self._exit_act = QAction("E&xit", self, shortcut="Ctrl+Q",
statusTip="Exit the application", triggered=self.close)
- self.cutAct = QtGui.QAction(QtGui.QIcon(':/images/cut.png'), "Cu&t",
- self, shortcut=QtGui.QKeySequence.Cut,
+ icon = QIcon.fromTheme("edit-cut", QIcon(':/images/cut.png'))
+ self._cut_act = QAction(icon, "Cu&t", self, shortcut=QKeySequence.Cut,
statusTip="Cut the current selection's contents to the clipboard",
- triggered=self.textEdit.cut)
+ triggered=self._text_edit.cut)
- self.copyAct = QtGui.QAction(QtGui.QIcon(':/images/copy.png'),
- "&Copy", self, shortcut=QtGui.QKeySequence.Copy,
+ icon = QIcon.fromTheme("edit-copy", QIcon(':/images/copy.png'))
+ self._copy_act = QAction(icon, "&Copy",
+ self, shortcut=QKeySequence.Copy,
statusTip="Copy the current selection's contents to the clipboard",
- triggered=self.textEdit.copy)
+ triggered=self._text_edit.copy)
- self.pasteAct = QtGui.QAction(QtGui.QIcon(':/images/paste.png'),
- "&Paste", self, shortcut=QtGui.QKeySequence.Paste,
+ icon = QIcon.fromTheme("edit-paste", QIcon(':/images/paste.png'))
+ self._paste_act = QAction(icon, "&Paste",
+ self, shortcut=QKeySequence.Paste,
statusTip="Paste the clipboard's contents into the current selection",
- triggered=self.textEdit.paste)
+ triggered=self._text_edit.paste)
- self.aboutAct = QtGui.QAction("&About", self,
+ self._about_act = QAction("&About", self,
statusTip="Show the application's About box",
triggered=self.about)
- self.aboutQtAct = QtGui.QAction("About &Qt", self,
+ self._about_qt_act = QAction("About &Qt", self,
statusTip="Show the Qt library's About box",
triggered=qApp.aboutQt)
- self.cutAct.setEnabled(False)
- self.copyAct.setEnabled(False)
- self.textEdit.copyAvailable.connect(self.cutAct.setEnabled)
- self.textEdit.copyAvailable.connect(self.copyAct.setEnabled)
-
- def createMenus(self):
- self.fileMenu = self.menuBar().addMenu("&File")
- self.fileMenu.addAction(self.newAct)
- self.fileMenu.addAction(self.openAct)
- self.fileMenu.addAction(self.saveAct)
- self.fileMenu.addAction(self.saveAsAct)
- self.fileMenu.addSeparator()
- self.fileMenu.addAction(self.exitAct)
-
- self.editMenu = self.menuBar().addMenu("&Edit")
- self.editMenu.addAction(self.cutAct)
- self.editMenu.addAction(self.copyAct)
- self.editMenu.addAction(self.pasteAct)
+ self._cut_act.setEnabled(False)
+ self._copy_act.setEnabled(False)
+ self._text_edit.copyAvailable.connect(self._cut_act.setEnabled)
+ self._text_edit.copyAvailable.connect(self._copy_act.setEnabled)
+
+ def create_menus(self):
+ self._file_menu = self.menuBar().addMenu("&File")
+ self._file_menu.addAction(self._new_act)
+ self._file_menu.addAction(self._open_act)
+ self._file_menu.addAction(self._save_act)
+ self._file_menu.addAction(self._save_as_act)
+ self._file_menu.addSeparator()
+ self._file_menu.addAction(self._exit_act)
+
+ self._edit_menu = self.menuBar().addMenu("&Edit")
+ self._edit_menu.addAction(self._cut_act)
+ self._edit_menu.addAction(self._copy_act)
+ self._edit_menu.addAction(self._paste_act)
self.menuBar().addSeparator()
- self.helpMenu = self.menuBar().addMenu("&Help")
- self.helpMenu.addAction(self.aboutAct)
- self.helpMenu.addAction(self.aboutQtAct)
+ self._help_menu = self.menuBar().addMenu("&Help")
+ self._help_menu.addAction(self._about_act)
+ self._help_menu.addAction(self._about_qt_act)
- def createToolBars(self):
- self.fileToolBar = self.addToolBar("File")
- self.fileToolBar.addAction(self.newAct)
- self.fileToolBar.addAction(self.openAct)
- self.fileToolBar.addAction(self.saveAct)
+ def create_tool_bars(self):
+ self._file_tool_bar = self.addToolBar("File")
+ self._file_tool_bar.addAction(self._new_act)
+ self._file_tool_bar.addAction(self._open_act)
+ self._file_tool_bar.addAction(self._save_act)
- self.editToolBar = self.addToolBar("Edit")
- self.editToolBar.addAction(self.cutAct)
- self.editToolBar.addAction(self.copyAct)
- self.editToolBar.addAction(self.pasteAct)
+ self._edit_tool_bar = self.addToolBar("Edit")
+ self._edit_tool_bar.addAction(self._cut_act)
+ self._edit_tool_bar.addAction(self._copy_act)
+ self._edit_tool_bar.addAction(self._paste_act)
- def createStatusBar(self):
+ def create_status_bar(self):
self.statusBar().showMessage("Ready")
- def readSettings(self):
- settings = QtCore.QSettings("Trolltech", "Application Example")
- pos = settings.value("pos", QtCore.QPoint(200, 200))
- size = settings.value("size", QtCore.QSize(400, 400))
- self.resize(size)
- self.move(pos)
-
- def writeSettings(self):
- settings = QtCore.QSettings("Trolltech", "Application Example")
- settings.setValue("pos", self.pos())
- settings.setValue("size", self.size())
-
- def maybeSave(self):
- if self.textEdit.document().isModified():
- ret = QtWidgets.QMessageBox.warning(self, "Application",
+ def read_settings(self):
+ settings = QSettings('QtProject', 'Application Example')
+ geometry = settings.value('geometry', QByteArray)
+ if geometry.size():
+ self.restoreGeometry(geometry)
+
+ def write_settings(self):
+ settings = QSettings('QtProject', 'Application Example')
+ settings.setValue('geometry', self.saveGeometry())
+
+ def maybe_save(self):
+ if self._text_edit.document().isModified():
+ ret = QMessageBox.warning(self, "Application",
"The document has been modified.\nDo you want to save "
"your changes?",
- QtWidgets.QMessageBox.Save | QtWidgets.QMessageBox.Discard |
- QtWidgets.QMessageBox.Cancel)
- if ret == QtWidgets.QMessageBox.Save:
+ QMessageBox.Save | QMessageBox.Discard |
+ QMessageBox.Cancel)
+ if ret == QMessageBox.Save:
return self.save()
- elif ret == QtWidgets.QMessageBox.Cancel:
+ elif ret == QMessageBox.Cancel:
return False
return True
- def loadFile(self, fileName):
- file = QtCore.QFile(fileName)
- if not file.open(QtCore.QFile.ReadOnly | QtCore.QFile.Text):
+ def load_file(self, fileName):
+ file = QFile(fileName)
+ if not file.open(QFile.ReadOnly | QFile.Text):
reason = file.errorString()
- QtWidgets.QMessageBox.warning(self, "Application",
+ QMessageBox.warning(self, "Application",
f"Cannot read file {fileName}:\n{reason}.")
return
- inf = QtCore.QTextStream(file)
- QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
- self.textEdit.setPlainText(inf.readAll())
- QtWidgets.QApplication.restoreOverrideCursor()
+ inf = QTextStream(file)
+ QApplication.setOverrideCursor(Qt.WaitCursor)
+ self._text_edit.setPlainText(inf.readAll())
+ QApplication.restoreOverrideCursor()
- self.setCurrentFile(fileName)
+ self.set_current_file(fileName)
self.statusBar().showMessage("File loaded", 2000)
- def saveFile(self, fileName):
+ def save_file(self, fileName):
error = None
- QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
- file = QtCore.QSaveFile(fileName)
- if file.open(QtCore.QFile.WriteOnly | QtCore.QFile.Text):
- outf = QtCore.QTextStream(file)
- outf << self.textEdit.toPlainText()
+ QApplication.setOverrideCursor(Qt.WaitCursor)
+ file = QSaveFile(fileName)
+ if file.open(QFile.WriteOnly | QFile.Text):
+ outf = QTextStream(file)
+ outf << self._text_edit.toPlainText()
if not file.commit():
reason = file.errorString()
error = f"Cannot write file {fileName}:\n{reason}."
else:
reason = file.errorString()
error = f"Cannot open file {fileName}:\n{reason}."
- QtWidgets.QApplication.restoreOverrideCursor()
+ QApplication.restoreOverrideCursor()
if error:
- QtWidgets.QMessageBox.warning(self, "Application", error)
+ QMessageBox.warning(self, "Application", error)
return False
- self.setCurrentFile(fileName)
+ self.set_current_file(fileName)
self.statusBar().showMessage("File saved", 2000)
return True
- def setCurrentFile(self, fileName):
- self.curFile = fileName
- self.textEdit.document().setModified(False)
+ def set_current_file(self, fileName):
+ self._cur_file = fileName
+ self._text_edit.document().setModified(False)
self.setWindowModified(False)
- if self.curFile:
- shownName = self.strippedName(self.curFile)
+ if self._cur_file:
+ shown_name = self.stripped_name(self._cur_file)
else:
- shownName = 'untitled.txt'
+ shown_name = 'untitled.txt'
- self.setWindowTitle(f"{shownName}[*] - Application")
+ self.setWindowTitle(f"{shown_name}[*] - Application")
- def strippedName(self, fullFileName):
- return QtCore.QFileInfo(fullFileName).fileName()
+ def stripped_name(self, fullFileName):
+ return QFileInfo(fullFileName).fileName()
if __name__ == '__main__':
-
- import sys
-
- app = QtWidgets.QApplication(sys.argv)
- mainWin = MainWindow()
- mainWin.show()
+ argument_parser = ArgumentParser(description='Application Example',
+ formatter_class=RawTextHelpFormatter)
+ argument_parser.add_argument("file", help="File",
+ nargs='?', type=str)
+ options = argument_parser.parse_args()
+
+ app = QApplication(sys.argv)
+ main_win = MainWindow()
+ if options.file:
+ main_win.load_file(options.file)
+ main_win.show()
sys.exit(app.exec_())
diff --git a/examples/widgets/mainwindows/dockwidgets/dockwidgets.py b/examples/widgets/mainwindows/dockwidgets/dockwidgets.py
index 53428b82c..c4cef14e6 100644
--- a/examples/widgets/mainwindows/dockwidgets/dockwidgets.py
+++ b/examples/widgets/mainwindows/dockwidgets/dockwidgets.py
@@ -2,7 +2,7 @@
#############################################################################
##
## Copyright (C) 2013 Riverbank Computing Limited.
-## Copyright (C) 2016 The Qt Company Ltd.
+## Copyright (C) 2021 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -42,6 +42,8 @@
"""PySide6 port of the widgets/mainwindows/dockwidgets example from Qt v5.x, originating from PyQt"""
+import sys
+
from PySide6.QtCore import QDate, QFile, Qt, QTextStream
from PySide6.QtGui import (QAction, QFont, QIcon, QKeySequence,
QTextCharFormat, QTextCursor, QTextTableFormat)
@@ -56,66 +58,66 @@ class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
- self.textEdit = QTextEdit()
- self.setCentralWidget(self.textEdit)
+ self._text_edit = QTextEdit()
+ self.setCentralWidget(self._text_edit)
- self.createActions()
- self.createMenus()
- self.createToolBars()
- self.createStatusBar()
- self.createDockWindows()
+ self.create_actions()
+ self.create_menus()
+ self.create_tool_bars()
+ self.create_status_bar()
+ self.create_dock_windows()
self.setWindowTitle("Dock Widgets")
- self.newLetter()
+ self.new_letter()
- def newLetter(self):
- self.textEdit.clear()
+ def new_letter(self):
+ self._text_edit.clear()
- cursor = self.textEdit.textCursor()
+ cursor = self._text_edit.textCursor()
cursor.movePosition(QTextCursor.Start)
- topFrame = cursor.currentFrame()
- topFrameFormat = topFrame.frameFormat()
- topFrameFormat.setPadding(16)
- topFrame.setFrameFormat(topFrameFormat)
-
- textFormat = QTextCharFormat()
- boldFormat = QTextCharFormat()
- boldFormat.setFontWeight(QFont.Bold)
- italicFormat = QTextCharFormat()
- italicFormat.setFontItalic(True)
-
- tableFormat = QTextTableFormat()
- tableFormat.setBorder(1)
- tableFormat.setCellPadding(16)
- tableFormat.setAlignment(Qt.AlignRight)
- cursor.insertTable(1, 1, tableFormat)
- cursor.insertText("The Firm", boldFormat)
+ top_frame = cursor.currentFrame()
+ top_frame_format = top_frame.frameFormat()
+ top_frame_format.setPadding(16)
+ top_frame.setFrameFormat(top_frame_format)
+
+ text_format = QTextCharFormat()
+ bold_format = QTextCharFormat()
+ bold_format.setFontWeight(QFont.Bold)
+ italic_format = QTextCharFormat()
+ italic_format.setFontItalic(True)
+
+ table_format = QTextTableFormat()
+ table_format.setBorder(1)
+ table_format.setCellPadding(16)
+ table_format.setAlignment(Qt.AlignRight)
+ cursor.insertTable(1, 1, table_format)
+ cursor.insertText("The Firm", bold_format)
cursor.insertBlock()
- cursor.insertText("321 City Street", textFormat)
+ cursor.insertText("321 City Street", text_format)
cursor.insertBlock()
cursor.insertText("Industry Park")
cursor.insertBlock()
cursor.insertText("Some Country")
- cursor.setPosition(topFrame.lastPosition())
+ cursor.setPosition(top_frame.lastPosition())
cursor.insertText(QDate.currentDate().toString("d MMMM yyyy"),
- textFormat)
+ text_format)
cursor.insertBlock()
cursor.insertBlock()
- cursor.insertText("Dear ", textFormat)
- cursor.insertText("NAME", italicFormat)
- cursor.insertText(",", textFormat)
+ cursor.insertText("Dear ", text_format)
+ cursor.insertText("NAME", italic_format)
+ cursor.insertText(",", text_format)
for i in range(3):
cursor.insertBlock()
- cursor.insertText("Yours sincerely,", textFormat)
+ cursor.insertText("Yours sincerely,", text_format)
for i in range(3):
cursor.insertBlock()
- cursor.insertText("The Boss", textFormat)
+ cursor.insertText("The Boss", text_format)
cursor.insertBlock()
- cursor.insertText("ADDRESS", italicFormat)
+ cursor.insertText("ADDRESS", italic_format)
def print_(self):
- document = self.textEdit.document()
+ document = self._text_edit.document()
printer = QPrinter()
dlg = QPrintDialog(printer, self)
@@ -127,11 +129,14 @@ class MainWindow(QMainWindow):
self.statusBar().showMessage("Ready", 2000)
def save(self):
- filename, _ = QFileDialog.getSaveFileName(self,
- "Choose a file name", '.', "HTML (*.html *.htm)")
- if not filename:
+ dialog = QFileDialog(self, "Choose a file name")
+ dialog.setMimeTypeFilters(['text/html'])
+ dialog.setAcceptMode(QFileDialog.AcceptSave)
+ dialog.setDefaultSuffix('html')
+ if dialog.exec_() != QDialog.Accepted:
return
+ filename = dialog.selectedFiles()[0]
file = QFile(filename)
if not file.open(QFile.WriteOnly | QFile.Text):
reason = file.errorString()
@@ -141,38 +146,38 @@ class MainWindow(QMainWindow):
out = QTextStream(file)
QApplication.setOverrideCursor(Qt.WaitCursor)
- out << self.textEdit.toHtml()
+ out << self._text_edit.toHtml()
QApplication.restoreOverrideCursor()
self.statusBar().showMessage(f"Saved '{filename}'", 2000)
def undo(self):
- document = self.textEdit.document()
+ document = self._text_edit.document()
document.undo()
- def insertCustomer(self, customer):
+ def insert_customer(self, customer):
if not customer:
return
- customerList = customer.split(', ')
- document = self.textEdit.document()
+ customer_list = customer.split(', ')
+ document = self._text_edit.document()
cursor = document.find('NAME')
if not cursor.isNull():
cursor.beginEditBlock()
- cursor.insertText(customerList[0])
+ cursor.insertText(customer_list[0])
oldcursor = cursor
cursor = document.find('ADDRESS')
if not cursor.isNull():
- for i in customerList[1:]:
+ for i in customer_list[1:]:
cursor.insertBlock()
cursor.insertText(i)
cursor.endEditBlock()
else:
oldcursor.endEditBlock()
- def addParagraph(self, paragraph):
+ def add_paragraph(self, paragraph):
if not paragraph:
return
- document = self.textEdit.document()
+ document = self._text_edit.document()
cursor = document.find("Yours sincerely,")
if cursor.isNull():
return
@@ -191,84 +196,88 @@ class MainWindow(QMainWindow):
"customer to add a customer name and address, and click "
"standard paragraphs to add them.")
- def createActions(self):
- self.newLetterAct = QAction(QIcon.fromTheme('document-new', QIcon(':/images/new.png')), "&New Letter",
+ def create_actions(self):
+ icon = QIcon.fromTheme('document-new', QIcon(':/images/new.png'))
+ self._new_letter_act = QAction(icon, "&New Letter",
self, shortcut=QKeySequence.New,
- statusTip="Create a new form letter", triggered=self.newLetter)
+ statusTip="Create a new form letter", triggered=self.new_letter)
- self.saveAct = QAction(QIcon.fromTheme('document-save', QIcon(':/images/save.png')), "&Save...", self,
+ icon = QIcon.fromTheme('document-save', QIcon(':/images/save.png'))
+ self._save_act = QAction(icon, "&Save...", self,
shortcut=QKeySequence.Save,
statusTip="Save the current form letter", triggered=self.save)
- self.printAct = QAction(QIcon.fromTheme('document-print', QIcon(':/images/print.png')), "&Print...", self,
+ icon = QIcon.fromTheme('document-print', QIcon(':/images/print.png'))
+ self._print_act = QAction(icon, "&Print...", self,
shortcut=QKeySequence.Print,
statusTip="Print the current form letter",
triggered=self.print_)
- self.undoAct = QAction(QIcon.fromTheme('edit-undo', QIcon(':/images/undo.png')), "&Undo", self,
+ icon = QIcon.fromTheme('edit-undo', QIcon(':/images/undo.png'))
+ self._undo_act = QAction(icon, "&Undo", self,
shortcut=QKeySequence.Undo,
statusTip="Undo the last editing action", triggered=self.undo)
- self.quitAct = QAction("&Quit", self, shortcut="Ctrl+Q",
+ self._quit_act = QAction("&Quit", self, shortcut="Ctrl+Q",
statusTip="Quit the application", triggered=self.close)
- self.aboutAct = QAction("&About", self,
+ self._about_act = QAction("&About", self,
statusTip="Show the application's About box",
triggered=self.about)
- self.aboutQtAct = QAction("About &Qt", self,
+ self._about_qt_act = QAction("About &Qt", self,
statusTip="Show the Qt library's About box",
triggered=QApplication.instance().aboutQt)
- def createMenus(self):
- self.fileMenu = self.menuBar().addMenu("&File")
- self.fileMenu.addAction(self.newLetterAct)
- self.fileMenu.addAction(self.saveAct)
- self.fileMenu.addAction(self.printAct)
- self.fileMenu.addSeparator()
- self.fileMenu.addAction(self.quitAct)
+ def create_menus(self):
+ self._file_menu = self.menuBar().addMenu("&File")
+ self._file_menu.addAction(self._new_letter_act)
+ self._file_menu.addAction(self._save_act)
+ self._file_menu.addAction(self._print_act)
+ self._file_menu.addSeparator()
+ self._file_menu.addAction(self._quit_act)
- self.editMenu = self.menuBar().addMenu("&Edit")
- self.editMenu.addAction(self.undoAct)
+ self._edit_menu = self.menuBar().addMenu("&Edit")
+ self._edit_menu.addAction(self._undo_act)
- self.viewMenu = self.menuBar().addMenu("&View")
+ self._view_menu = self.menuBar().addMenu("&View")
self.menuBar().addSeparator()
- self.helpMenu = self.menuBar().addMenu("&Help")
- self.helpMenu.addAction(self.aboutAct)
- self.helpMenu.addAction(self.aboutQtAct)
+ self._help_menu = self.menuBar().addMenu("&Help")
+ self._help_menu.addAction(self._about_act)
+ self._help_menu.addAction(self._about_qt_act)
- def createToolBars(self):
- self.fileToolBar = self.addToolBar("File")
- self.fileToolBar.addAction(self.newLetterAct)
- self.fileToolBar.addAction(self.saveAct)
- self.fileToolBar.addAction(self.printAct)
+ def create_tool_bars(self):
+ self._file_tool_bar = self.addToolBar("File")
+ self._file_tool_bar.addAction(self._new_letter_act)
+ self._file_tool_bar.addAction(self._save_act)
+ self._file_tool_bar.addAction(self._print_act)
- self.editToolBar = self.addToolBar("Edit")
- self.editToolBar.addAction(self.undoAct)
+ self._edit_tool_bar = self.addToolBar("Edit")
+ self._edit_tool_bar.addAction(self._undo_act)
- def createStatusBar(self):
+ def create_status_bar(self):
self.statusBar().showMessage("Ready")
- def createDockWindows(self):
+ def create_dock_windows(self):
dock = QDockWidget("Customers", self)
dock.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
- self.customerList = QListWidget(dock)
- self.customerList.addItems((
+ self._customer_list = QListWidget(dock)
+ self._customer_list.addItems((
"John Doe, Harmony Enterprises, 12 Lakeside, Ambleton",
"Jane Doe, Memorabilia, 23 Watersedge, Beaton",
"Tammy Shea, Tiblanka, 38 Sea Views, Carlton",
"Tim Sheen, Caraba Gifts, 48 Ocean Way, Deal",
"Sol Harvey, Chicos Coffee, 53 New Springs, Eccleston",
"Sally Hobart, Tiroli Tea, 67 Long River, Fedula"))
- dock.setWidget(self.customerList)
+ dock.setWidget(self._customer_list)
self.addDockWidget(Qt.RightDockWidgetArea, dock)
- self.viewMenu.addAction(dock.toggleViewAction())
+ self._view_menu.addAction(dock.toggleViewAction())
dock = QDockWidget("Paragraphs", self)
- self.paragraphsList = QListWidget(dock)
- self.paragraphsList.addItems((
+ self._paragraphs_list = QListWidget(dock)
+ self._paragraphs_list.addItems((
"Thank you for your payment which we have received today.",
"Your order has been dispatched and should be with you within "
"28 days.",
@@ -286,19 +295,16 @@ class MainWindow(QMainWindow):
"complete amount has been received.",
"You made an overpayment (more than $5). Do you wish to buy more "
"items, or should we return the excess to you?"))
- dock.setWidget(self.paragraphsList)
+ dock.setWidget(self._paragraphs_list)
self.addDockWidget(Qt.RightDockWidgetArea, dock)
- self.viewMenu.addAction(dock.toggleViewAction())
+ self._view_menu.addAction(dock.toggleViewAction())
- self.customerList.currentTextChanged.connect(self.insertCustomer)
- self.paragraphsList.currentTextChanged.connect(self.addParagraph)
+ self._customer_list.currentTextChanged.connect(self.insert_customer)
+ self._paragraphs_list.currentTextChanged.connect(self.add_paragraph)
if __name__ == '__main__':
-
- import sys
-
app = QApplication(sys.argv)
- mainWin = MainWindow()
- mainWin.show()
+ main_win = MainWindow()
+ main_win.show()
sys.exit(app.exec_())
diff --git a/examples/widgets/mainwindows/mdi/mdi.py b/examples/widgets/mainwindows/mdi/mdi.py
index 1e68e91e2..b10ecbef3 100644
--- a/examples/widgets/mainwindows/mdi/mdi.py
+++ b/examples/widgets/mainwindows/mdi/mdi.py
@@ -2,7 +2,7 @@
#############################################################################
##
## Copyright (C) 2013 Riverbank Computing Limited.
-## Copyright (C) 2016 The Qt Company Ltd.
+## Copyright (C) 2021 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the Qt for Python examples of the Qt Toolkit.
@@ -40,9 +40,13 @@
##
#############################################################################
-"""PySide6 port of the widgets/draganddrop/draggabletext example from Qt v5.x, originating from PyQt"""
+"""PySide6 port of the widgets/mainwindows/mdi example from Qt v5.x, originating from PyQt"""
-from PySide6.QtCore import (QFile, QFileInfo, QPoint, QSettings, QSignalMapper,
+from argparse import ArgumentParser, RawTextHelpFormatter
+from functools import partial
+import sys
+
+from PySide6.QtCore import (QByteArray, QFile, QFileInfo, QPoint, QSettings,
QSaveFile, QSize, QTextStream, Qt)
from PySide6.QtGui import QAction, QIcon, QKeySequence
from PySide6.QtWidgets import (QApplication, QFileDialog, QMainWindow,
@@ -173,8 +177,6 @@ class MainWindow(QMainWindow):
self.setCentralWidget(self._mdi_area)
self._mdi_area.subWindowActivated.connect(self.update_menus)
- self._window_mapper = QSignalMapper(self)
- self._window_mapper.mappedObject.connect(self.set_active_sub_window)
self.create_actions()
self.create_menus()
@@ -200,19 +202,21 @@ class MainWindow(QMainWindow):
child.show()
def open(self):
- fileName, _ = QFileDialog.getOpenFileName(self)
- if fileName:
- existing = self.find_mdi_child(fileName)
+ file_name, _ = QFileDialog.getOpenFileName(self)
+ if file_name:
+ existing = self.find_mdi_child(file_name)
if existing:
self._mdi_area.setActiveSubWindow(existing)
- return
-
- child = self.create_mdi_child()
- if child.load_file(fileName):
- self.statusBar().showMessage("File loaded", 2000)
- child.show()
else:
- child.close()
+ self.load(file_name)
+
+ def load(self, file_name):
+ child = self.create_mdi_child()
+ if child.load_file(file_name):
+ self.statusBar().showMessage("File loaded", 2000)
+ child.show()
+ else:
+ child.close()
def save(self):
if self.active_mdi_child() and self.active_mdi_child().save():
@@ -283,8 +287,8 @@ class MainWindow(QMainWindow):
action = self._window_menu.addAction(text)
action.setCheckable(True)
action.setChecked(child is self.active_mdi_child())
- action.triggered.connect(self._window_mapper.map)
- self._window_mapper.setMapping(action, window)
+ slot_func = partial(self.set_active_sub_window, window=window)
+ action.triggered.connect(slot_func)
def create_mdi_child(self):
child = MdiChild()
@@ -415,16 +419,14 @@ class MainWindow(QMainWindow):
self.statusBar().showMessage("Ready")
def read_settings(self):
- settings = QSettings('Trolltech', 'MDI Example')
- pos = settings.value('pos', QPoint(200, 200))
- size = settings.value('size', QSize(400, 400))
- self.move(pos)
- self.resize(size)
+ settings = QSettings('QtProject', 'MDI Example')
+ geometry = settings.value('geometry', QByteArray)
+ if geometry.size():
+ self.restoreGeometry(geometry)
def write_settings(self):
- settings = QSettings('Trolltech', 'MDI Example')
- settings.setValue('pos', self.pos())
- settings.setValue('size', self.size())
+ settings = QSettings('QtProject', 'MDI Example')
+ settings.setValue('geometry', self.saveGeometry())
def active_mdi_child(self):
active_sub_window = self._mdi_area.activeSubWindow()
@@ -436,7 +438,7 @@ class MainWindow(QMainWindow):
canonical_file_path = QFileInfo(fileName).canonicalFilePath()
for window in self._mdi_area.subWindowList():
- if window.widget().currentFile() == canonical_file_path:
+ if window.widget().current_file() == canonical_file_path:
return window
return None
@@ -452,10 +454,15 @@ class MainWindow(QMainWindow):
if __name__ == '__main__':
-
- import sys
+ argument_parser = ArgumentParser(description='MDI Example',
+ formatter_class=RawTextHelpFormatter)
+ argument_parser.add_argument("files", help="Files",
+ nargs='*', type=str)
+ options = argument_parser.parse_args()
app = QApplication(sys.argv)
main_win = MainWindow()
+ for f in options.files:
+ main_win.load(f)
main_win.show()
sys.exit(app.exec_())