ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
onPrint() — выполняет печать головоломки; onPreview() — выводит на экран созданное ранее окно предварительного просмотра; onPageSetup() — производит настройку параметров страницы. Поскольку предварительный просмотр у нас будет выполняться в только что созданном окне PreviewDialog , нам следует добавить в самое начало кода класса MainWindow выраже- ние, выполняющее импорт класса PreviewDialog : from modules.previewdialog import PreviewDialog Дополнения, которые следует внести в код конструктора класса MainWindow , показаны в листинге 32.26 (добавленный код, как обычно, выделен полужирным шрифтом). Листинг 32.26. Конструктор (дополнения) def __init__(self, parent=None): action = myMenuFile.addAction("&Сохранить компактно...", self.onSaveMini) action.setStatusTip( "Сохранение головоломки в компактном формате") myMenuFile.addSeparator() toolBar.addSeparator() action = myMenuFile.addAction(QtGui.QIcon(r"images/print.png"), "&Печать...", self.onPrint, QtCore.Qt.CTRL + QtCore.Qt.Key_P) toolBar.addAction(action) action.setStatusTip("Печать головоломки") action = myMenuFile.addAction(QtGui.QIcon(r"images/preview.png"), "П&редварительный просмотр...", self.onPreview) toolBar.addAction(action) action.setStatusTip("Предварительный просмотр головоломки") 786 Часть II. Библиотека PyQt 5 action = myMenuFile.addAction("П&араметры страницы...", self.onPageSetup) action.setStatusTip("Задание параметров страницы") myMenuFile.addSeparator() toolBar.addSeparator() action = myMenuFile.addAction("&Выход", QtWidgets.qApp.quit, QtCore.Qt.CTRL + QtCore.Qt.Key_Q) Между пунктами главного меню, вызывающими файловые операции, мы вставляем разде- литель и пункты Печать, Предварительный просмотр и Параметры страницы. Не забы- ваем добавить соответствующие кнопки на панель инструментов. Листинг 32.27. Методы onPrint(), onPreview() и onPageSetup() def onPrint(self): pd = QtPrintSupport.QPrintDialog(self.printer, parent=self) pd.setOptions(QtPrintSupport.QAbstractPrintDialog.PrintToFile | QtPrintSupport.QAbstractPrintDialog.PrintSelection) if pd.exec() == QtWidgets.QDialog.Accepted: self.sudoku.print(self.printer) def onPreview(self): pd = PreviewDialog(self) pd.exec() def onPageSetup(self): pd = QtPrintSupport.QPageSetupDialog(self.printer, parent=self) pd.exec() Код методов onPrint() , onPreview() и onPageSetup() , производящих печать, предваритель- ный просмотр и настройку страницы, очень прост (листинг 32.27). Единственная деталь, достойная рассмотрения: в диалоговом окне печати мы задаем только возможность указа- ния печати в файл и выбора принтера, на котором будет выполняться печать. Остальные параметры, в частности выбор печатаемых страниц, в нашем случае не нужны. Запустим приложение, создадим какую-либо головоломку и проверим, как работает печать, предварительный просмотр и настройка параметров страницы. На этом работу над приложением «Судоку» можно считать завершенной. Собственно, по- дошел конец и книге, посвященной замечательному языку Python и не менее замечательной библиотеке PyQt. Заключение Вот и закончилось наше путешествие в мир Python 3 и PyQt 5. Материал книги описывает лишь базовые возможности этих замечательных программных платформ. А здесь мы рас- скажем, где найти дополнительную информацию, чтобы продолжить изучение. Самыми важными источниками информации являются официальные сайты https://www. python.org/ и https://riverbankcomputing.com/ — на них вы найдете дистрибутивы, ново- сти, а также ссылки на все другие ресурсы в Интернете. На сайте https://docs.python.org/ имеется документация по Python, которая обновляется в режиме реального времени. Язык постоянно совершенствуется, появляются новые функции, изменяются параметры, добавляются модули и т. д. Регулярно посещайте этот сайт, и вы получите самую последнюю информацию. Поскольку библиотека PyQt является надстройкой над библиотекой Qt, следует регулярно наведываться на сайт https://doc.qt.io/ — только там можно найти полную документацию по Qt. В пакет установки Python входит большое количество модулей, позволяющих выполнять наиболее часто встречающиеся задачи. Однако этим возможности Python не исчерпывают- ся — мир Python включает множество самых разнообразных модулей и целых библиотек, созданных сторонними разработчиками и доступных для свободного скачивания, — вы лег- ко найдете их на сайте https://pypi.python.org/pypi. Имейте только в виду, что при выборе модуля необходимо учитывать версию Python, которая обычно указывается в составе назва- ния дистрибутива. Особенно необходимо отметить библиотеку PySide (https://wiki.qt.io/PySide), созданную специалистами компании Nokia, а ныне поддерживаемую независимыми разработчиками. Эта библиотека является полным аналогом PyQt и распространяется по лицензии LGPL. Не забывайте также о существовании других библиотек для создания графического интер- фейса: wxPython (https://www.wxpython.org/), PyGTK (http://www.pygtk.org/), PyWin32 (https://github.com/mhammond/pywin32) и pyFLTK (http://pyfltk.sourceforge.net/). Обратите внимание и на библиотеку pygame (http://www.pygame.org/), позволяющую разрабатывать игры, и на фреймворк Django (https://www.djangoproject.com/), с помощью которого мож- но создавать веб-сайты. Если в процессе изучения у вас возникнут какие-либо вопросы, вспомните, что в Интернете можно найти решения самых разнообразных проблем, — достаточно лишь набрать свой вопрос в строке запроса того или иного поискового портала (например, https://www. bing.com/ или https://www.google.ru/). Засим авторы прощаются с вами, уважаемые читатели, и желают успехов в нелегком, но таком увлекательном деле, как программирование! 788 Заключение ПРИЛОЖЕН ИЕ Описание электронного архива Электронный архив с материалами, сопровождающими книгу, можно скачать с FTP-сервера издательства по ссылке ftp://ftp.bhv.ru/9785977539784.zip или со страницы книги на сайте www.bhv.ru. Структура архива представлена в табл. П.1. Таблица П.1. Структура электронного архива Файл или каталог Описание Sudoku Каталог с исходными текстами приложения «Судоку» Readme.txt Описание электронного архива Listings.doc Все листинги, представленные в книге PyQt.doc Более 750 дополнительных листингов, демонстрирующих возможности библиотеки PyQt 5 (к части II книги) 790 Введение Предметный указатель @ @abc 263 @abstractmethod 259, 263 @classmethod 258 @staticmethod 258 _ __abs__() 256 __add__() 255 __all__ 236, 241 __and__() 256 __annotations__ 230 __bases__ 251 __bool__() 254 __call__() 253 __cause__ 275 __class__ 286 __complex__() 254 __contains__() 257, 279 __debug__ 276 __del__() 248 __delattr__() 254 __delitem__() 279 __dict__ 234, 254 __doc__ 38, 39, 85 __enter__() 269 __eq__() 257 __exit__() 269, 270 __file__ 290 __float__() 254 __floordiv__() 256 __ge__() 257 __getattr__() 253, 260 __getattribute__() 254, 260 __getitem__() 278, 279 __gt__() 257 __hash__() 255 __iadd__() 255 __iand__() 257 __ifloordiv__() 256 __ilshift__() 257 __imod__() 256 __import__() 234 __imul__() 256 __index__() 254 __init__() 247 __int__() 254 __invert__() 256 __ior__() 257 __ipow__() 256 __irshift__() 257 __isub__() 255 __iter__() 278 __itruediv__() 256 __ixor__() 257 __le__() 257 __len__() 254, 278 __lshift__() 257 __lt__() 257 __mod__() 256 __mro__ 252 __mul__() 255 __name__ 231, 286 __ne__() 257 __neg__() 256 __next__() 44, 220, 273, 278, 296, 304 __or__() 257 __pos__() 256 __pow__() 256 __radd__() 255 __rand__() 257 __repr__() 255, 278 __rfloordiv__() 256 __rlshift__() 257 792 Предметный указатель __rmod__() 256 __rmul__() 255 __ror__() 257 __round__() 254 __rpow__() 256 __rrshift__() 257 __rshift__() 257 __rsub__() 255 __rtruediv__() 256 __rxor__() 257 __setattr__() 254, 260 __setitem__() 279 __slots__ 261 __str__() 255, 278 __sub__() 255 __truediv__() 256 __xor__() 257 A A0 709 A1 709 A2 709 A3 709 A4 709 A5 709 AA_UseStyleSheetPropagationInWidgetStyles 393 abc 259 Abort 617, 620 Aborted 722 about() 625 aboutQt() 625 aboutToActivate 672 aboutToHide 657 aboutToShow 657 abs() 76, 190, 256 AbsoluteSize 568 abspath() 288, 290, 310 Accept 634 accept() 349, 390, 407, 420, 421, 424, 429, 430, 607, 610, 615, 616 accepted 616, 619 Accepted 615, 616, 626, 632 acceptHoverEvents() 609 AcceptOpen 632 acceptProposedAction() 429, 430, 610, 611 acceptRichText() 470 AcceptRole 618, 619, 621 AcceptSave 632 access() 306 AccessDeniedError 677, 688 AccessError 750 AccessibleDescriptionRole 503 AccessibleTextRole 502 accumulate() 173 acos() 78 actionChanged() 427 actionGroup() 660 ActionRole 618, 621 actions() 657, 661 actionTriggered 491, 664 activated 487, 501, 516, 673 activateNextSubWindow() 669 activatePreviousSubWindow() 669 activateWindow() 379, 616 ActivationChange 409 ActivationHistoryOrder 669 activationOrder() 669 Active 384, 722 activeAction() 654, 656 ActivePython 23 activeSubWindow() 669 ActiveWindowFocusReason 414 actualSize() 582 add() 165 addAction() 654, 657, 661, 663 addActions() 657 addBindValue() 539, 540 addButton() 617, 621, 735 addCategory() 730 addDatabase() 532 addDestination() 731 addDockWidget() 650 addEllipse() 585 addFile() 581 addItem() 453, 498, 584, 731 addItems() 498 addLayout() 437, 440 addLine() 584 addLink() 731 addMedia() 686 addMenu() 653, 655 addPage() 642 addPath() 585 addPermanentWidget() 667 addPixmap() 582, 585 addPolygon() 585 addRect() 585 addRow() 442 addSection() 655 addSeparator() 655, 663, 732 addSimpleText() 585 addSpacing() 437 Предметный указатель 793 addStretch() 437 addSubWindow() 668 addTab() 449 addText() 585 addToGroup() 603 addToolBar() 649 addToolBarBreak() 650 AddToSelection 588 addWidget() 330, 436, 437, 439, 443, 455, 585, 663, 667 Adjust 517 adjust() 377 adjusted() 377 adjustSize() 366 AdjustToContents 500 AdjustToContentsOnFirstShow 500 AdjustToMinimumContentsLength 500 AdjustToMinimumContentsLengthWithIcon 500 AeroStyle 644 AlignAbsolute 438 AlignBaseline 438 AlignBottom 359, 438, 570 AlignCenter 359, 438, 570 AlignHCenter 332, 359, 437, 447, 570 AlignJustify 438 AlignLeft 359, 437, 438, 447, 570 alignment() 447, 474 AlignRight 359, 437, 438, 447, 570 AlignTop 359, 438, 570 AlignVCenter 359, 438, 570 all() 157 AllDockWidgetAreas 666 AllEditTriggers 515 AllFonts 502 allKeys() 747 AllLayers 589 AllNonFixedFieldsGrow 443 AllowNestedDocks 650, 651 AllowTabbedDocks 651 AllPages 702 AllPagesView 720 AllTables 534 AllToolBarAreas 663 alpha() 557, 558, 559 alphaF() 558, 559 AltModifier 419 AmPmSection 485 anchorClicked 481 and 61 angleDelta() 423 animateClick() 461 AnimatedDocks 650 answerRect() 430 Antialiasing 569, 591 any() 156 AnyFile 632 AnyKeyPressed 515 append() 117, 142, 143, 153, 470, 563 appendColumn() 507, 511 appendRow() 507, 511 appendRows() 511 ApplicationActivate 409 ApplicationDeactivate 409 ApplicationModal 382, 616 applicationName() 744 ApplicationShortcut 417, 659 Apply 617, 620 ApplyRole 618, 621 arguments() 733 argv 36, 329 ArrowCursor 424 as 233, 235, 240, 269 as_integer_ratio() 77 AscendingOrder 506, 509, 513, 520, 522, 527, 544, 546, 587 ASCII 123, 127 ascii() 96, 100 asctime() 187 asin() 78 assert 272, 276 AssertionError 272, 276 at() 541 atan() 78 atBlockEnd() 479 atBlockStart() 479 atEnd() 479 atStart() 479 AttributeError 232, 245, 254, 261, 272 audioInputs() 690 Auto 702 AutoAll 473 AutoBulletList 472 AutoConnection 398 AutoNone 472 AutoText 459, 621, 644 availableGeometry() 369, 370 availableMetaData() 678 availablePrinterNames() 721 availablePrinters() 721 availableRedoSteps() 475 availableSizes() 582 availableUndoSteps() 475 AverageBitRateEncoding 693 794 Предметный указатель B back() 494, 643 BackButton 421, 644 Background 384 backgroundColor() 497 BackgroundLayer 589 BackgroundPixmap 645 BackgroundRole 502 backspace() 464 BacktabFocusReason 414 backward() 480 backwardAvailable 481 backwardHistoryCount() 481 BannerPixmap 645 BaseException 272 basename() 311 baseSize() 366 Batched 518 beforeDelete 549 beforeInsert 549 beforeUpdate 549 begin() 566, 703 beginEditBlock() 480 beginGroup() 747 beginReadArray() 749 beginWriteArray() 748 BevelJoin 560 Bin 489 bin() 75, 254 bindValue() 539, 540 black 359, 556 Black 473, 476, 564 black() 558 blackF() 558 blake2b() 121 blake2s() 121 block() 479 blockCount() 476 blockCountChanged 477 BlockingIOError 324 BlockingQueuedConnection 398 blockNumber() 479 blockSignals() 399 BlockUnderCursor 479 blue 556 blue() 557 blueF() 558 blurRadius() 604, 605 blurRadiusChanged 605 Bold 473, 476, 564 bold() 565 BOM 27, 292 bool 41 Bool 536 bool() 48, 59, 254 bottom() 377 BottomDockWidgetArea 650, 652, 666 bottomLeft() 377 BottomLeftCorner 652 bottomRight() 377 BottomRightCorner 652 BottomToolBarArea 649, 663 BottomToTop 438, 490 boundedTo() 373 boundingRect() 564, 566, 570, 594 BoundingRectShape 601 boundValue() 543 boundValues() 543 Box 448 break 66, 70, 71 brightness() 684 bspTreeDepth() 584 BspTreeIndex 584 buffer 299 BufferedMedia 676 BufferingMedia 676 bufferStatus() 676 bufferStatusChanged 679 builtins 37 BusyCursor 424 button() 421, 422, 608, 618, 622, 644 buttonClicked 622 buttonDownPos() 608 buttonDownScenePos() 608 buttonDownScreenPos() 608 buttonRole() 618, 622 buttons() 421, 423, 608, 610, 611, 618, 622, 736 buttonText() 644, 646 Byte Order Mark 27, 292 bytearray 42, 83, 112, 116 ByteArray 536 bytearray() 49, 116 bytes 42, 83, 112 bytes() 49, 112, 113 BytesIO 305 C CacheBackground 590 CacheNone 590 calendar 184, 201 Calendar 201 Предметный указатель 795 calendar() 206 Cancel 617, 619 cancel() 642 CancelButton 644 CancelButtonOnLeft 645 canceled 642 canPaste() 470 capitalize() 105 cascadeSubWindows() 669 casefold() 105 CaseInsensitive 475, 527, 528 CaseSensitive 527, 528 categories() 731 ceil() 78 cellRect() 440 center() 94, 377, 562 centerOn() 593 centralWidget() 649 chain() 173 changed 589, 661 changeEvent() 410 changeOverrideCursor() 424 Char 536 characterCount() 476 chdir() 290, 319 checkBox() 622 Checked 463, 502, 512 checkedAction() 661 checkOverflow() 488 checkState() 463, 512 CheckStateRole 502 child() 504, 512 ChildAdded 409 childGroups() 747 childItems() 597 childKeys() 745 ChildPolished 409 ChildRemoved 409 chmod() 307 choice() 80, 157 chr() 105 Cicero 701, 704, 709, 723 class 244 ClassicStyle 643–645 cleanText() 483 cleanupPage() 643, 645, 647 Clear 526 clear() 155, 166, 182, 318, 428, 431, 450, 460, 464, 470, 474, 482, 499, 508, 543, 564, 578, 585, 619, 654, 655, 663, 686, 731, 732, 736, 745 ClearAndSelect 526 clearEditText() 500 clearFocus() 414, 587, 596 clearHistory() 481 clearMessage() 359, 667 clearOverlayIcon() 726 clearSelection() 479, 514, 526, 588 clearSpans() 519 clearUndoRedoStacks() 475 clearValues() 548 click() 403, 462, 737 clicked 447, 461, 462, 488, 516, 619, 737 clicked() 330 clickedButton() 622 ClickFocus 415 Clipboard 408 clipboard() 431 clone() 513 cloneDatabase() 534 Close 390, 408, 617, 620, 659 close() 294, 301, 302, 317, 390, 413, 534 closeActiveSubWindow() 669 closeAllSubWindows() 669 closeAllWindows() 390 closed 298, 302 ClosedHandCursor 424 closeEvent() 390, 413 cmath 77 Cmyk 559 CoarseTimer 404 collapse() 522 collapseAll() 522 collapsed 522 collateCopies() 701 collidesWithItem() 598 collidingItems() 586, 597 Color 702 color() 604, 606 color0 556, 577 color1 556, 577 colorChanged 605, 606 colorCount() 704 colorMode() 702 colorNames() 556 column() 504, 510 columnCount() 440, 507, 510 columnIntersectsSelection() 525 Columns 526 columnSpan() 519 columnWidth() 519, 521 combinations() 169 combinations_with_replacement() 170 combine() 198 796 Предметный указатель commit() 533 CommitButton 644 compile() 122, 131, 132, 136, 137 completeChanged 647 CompleteHtmlSaveFormat 496 complex 42, 73 complex() 254 compress() 171 connect() 330, 395, 398, 403 ConnectionError 324, 537 connectionName() 533 connectionNames() 534 ConstantBitRateEncoding 693 ConstantQualityEncoding 692 contains() 378, 534, 535, 597, 745 ContainsItemBoundingRect 586–588, 591 ContainsItemShape 586–588, 591 contentsChange 477 contentsChanged 477 contentsSize() 496 Context 673 ContextMenu 409 contextMenu() 672 contextMenuEvent() 466, 470, 657 ContiguousSelection 514 continue 71 contrast() 684 ControlModifier 419 convertFromImage() 576 convertTo() 559 convertToFormat() 580 copy 144, 177, 183 Copy 419, 659 copy() 144, 165, 167, 177, 183, 307, 466, 470, 576, 580 copy2() 308 CopyAction 426 copyAvailable 471 copyCount() 701 copyfile() 307 corner() 652 cos() 77 count() 69, 106, 156, 168, 444, 451, 454, 456, 499, 523, 535, 564, 732, 736 CoverWindow 364 createEditor() 528 createItemGroup() 585, 603 createMaskFromColor() 576 createPopupMenu() 649 createStandardContextMenu() 466, 470 CreationOrder 669 Critical 619, 673 critical() 624 CrossCursor 424 CrossPattern 386, 561 cssclasses 204 ctime() 187, 193, 200 |