未验证 提交 6de45e8b 编写于 作者: D Dan Bader 提交者: GitHub

Merge branch 'master' into patch-1

# Sample Text Editor
A **sample text editor** that shows how to use Qt Designer to create GUI applications.
## How to Run this Application
To run this application, you need to [install `PyQt5`](https://realpython.com/python-pyqt-gui-calculator/#installing-pyqt) on your Python environment. To do that, you can run the following commands in a terminal or command prompt:
```sh
$ python3 -m venv ./venv
$ source venv/bin/activate
(venv) $ pip install PyQt5
```
Once you have [PyQt](https://www.riverbankcomputing.com/static/Docs/PyQt5/) installed, you can run the application by executing the following command:
```sh
(venv) $ cd sample_editor/
(venv) $ python app.py
```
This command will launch the application, so you'll be able to experiment with it.
## About the Author
Leodanis Pozo Ramos – [@lpozo78](https://twitter.com/lpozo78) – lpozor78@gmail.com
## License
The set of icons used in this application are part of the [TurkinOS](https://github.com/llamaret/turkinos-icon) icon theme, which is distributed under the [GPL v3.0 license](https://github.com/llamaret/turkinos-icon/blob/master/LICENSE). See `ui/resources/LICENSE` for details.
\ No newline at end of file
import sys
from PyQt5.QtWidgets import QApplication, QDialog, QMainWindow, QMessageBox
from PyQt5.uic import loadUi
from main_window_ui import Ui_MainWindow
class Window(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.setupUi(self)
self.connectSignalsSlots()
def connectSignalsSlots(self):
self.action_Exit.triggered.connect(self.close)
self.action_Find_Replace.triggered.connect(self.findAndReplace)
self.action_About.triggered.connect(self.about)
def findAndReplace(self):
dialog = FindReplaceDialog(self)
dialog.exec()
def about(self):
QMessageBox.about(
self,
"About Sample Editor",
"<p>A sample text editor app built with:</p>"
"<p>- PyQt</p>"
"<p>- Qt Designer</p>"
"<p>- Python</p>",
)
class FindReplaceDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
loadUi("ui/find_replace.ui", self)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec())
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui/main_window.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(413, 299)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setContentsMargins(1, 1, 1, 1)
self.verticalLayout.setObjectName("verticalLayout")
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setObjectName("textEdit")
self.verticalLayout.addWidget(self.textEdit)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 413, 20))
self.menubar.setObjectName("menubar")
self.menu_File = QtWidgets.QMenu(self.menubar)
self.menu_File.setObjectName("menu_File")
self.menuOpen_Recent = QtWidgets.QMenu(self.menu_File)
self.menuOpen_Recent.setObjectName("menuOpen_Recent")
self.menu_Edit = QtWidgets.QMenu(self.menubar)
self.menu_Edit.setObjectName("menu_Edit")
self.menu_Help = QtWidgets.QMenu(self.menubar)
self.menu_Help.setObjectName("menu_Help")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.toolBar = QtWidgets.QToolBar(MainWindow)
self.toolBar.setObjectName("toolBar")
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
self.action_New = QtWidgets.QAction(MainWindow)
icon = QtGui.QIcon()
icon.addPixmap(
QtGui.QPixmap("ui/resources/file-new.png"),
QtGui.QIcon.Normal,
QtGui.QIcon.Off,
)
self.action_New.setIcon(icon)
self.action_New.setObjectName("action_New")
self.action_Open = QtWidgets.QAction(MainWindow)
icon1 = QtGui.QIcon()
icon1.addPixmap(
QtGui.QPixmap("ui/resources/file-open.png"),
QtGui.QIcon.Normal,
QtGui.QIcon.Off,
)
self.action_Open.setIcon(icon1)
self.action_Open.setObjectName("action_Open")
self.action_Save = QtWidgets.QAction(MainWindow)
icon2 = QtGui.QIcon()
icon2.addPixmap(
QtGui.QPixmap("ui/resources/file-save.png"),
QtGui.QIcon.Normal,
QtGui.QIcon.Off,
)
self.action_Save.setIcon(icon2)
self.action_Save.setObjectName("action_Save")
self.action_Exit = QtWidgets.QAction(MainWindow)
icon3 = QtGui.QIcon()
icon3.addPixmap(
QtGui.QPixmap("ui/resources/file-exit.png"),
QtGui.QIcon.Normal,
QtGui.QIcon.Off,
)
self.action_Exit.setIcon(icon3)
self.action_Exit.setObjectName("action_Exit")
self.action_Copy = QtWidgets.QAction(MainWindow)
icon4 = QtGui.QIcon()
icon4.addPixmap(
QtGui.QPixmap("ui/resources/edit-copy.png"),
QtGui.QIcon.Normal,
QtGui.QIcon.Off,
)
self.action_Copy.setIcon(icon4)
self.action_Copy.setObjectName("action_Copy")
self.action_Paste = QtWidgets.QAction(MainWindow)
icon5 = QtGui.QIcon()
icon5.addPixmap(
QtGui.QPixmap("ui/resources/edit-paste.png"),
QtGui.QIcon.Normal,
QtGui.QIcon.Off,
)
self.action_Paste.setIcon(icon5)
self.action_Paste.setObjectName("action_Paste")
self.action_Cut = QtWidgets.QAction(MainWindow)
icon6 = QtGui.QIcon()
icon6.addPixmap(
QtGui.QPixmap("ui/resources/edit-cut.png"),
QtGui.QIcon.Normal,
QtGui.QIcon.Off,
)
self.action_Cut.setIcon(icon6)
self.action_Cut.setObjectName("action_Cut")
self.actionOpen_All = QtWidgets.QAction(MainWindow)
self.actionOpen_All.setObjectName("actionOpen_All")
self.action_About = QtWidgets.QAction(MainWindow)
icon7 = QtGui.QIcon()
icon7.addPixmap(
QtGui.QPixmap("ui/resources/help-content.png"),
QtGui.QIcon.Normal,
QtGui.QIcon.Off,
)
self.action_About.setIcon(icon7)
self.action_About.setObjectName("action_About")
self.action_Find_Replace = QtWidgets.QAction(MainWindow)
self.action_Find_Replace.setObjectName("action_Find_Replace")
self.menuOpen_Recent.addAction(self.actionOpen_All)
self.menu_File.addAction(self.action_New)
self.menu_File.addSeparator()
self.menu_File.addAction(self.action_Open)
self.menu_File.addAction(self.menuOpen_Recent.menuAction())
self.menu_File.addSeparator()
self.menu_File.addAction(self.action_Save)
self.menu_File.addSeparator()
self.menu_File.addAction(self.action_Exit)
self.menu_Edit.addAction(self.action_Copy)
self.menu_Edit.addAction(self.action_Paste)
self.menu_Edit.addAction(self.action_Cut)
self.menu_Edit.addSeparator()
self.menu_Edit.addAction(self.action_Find_Replace)
self.menu_Help.addAction(self.action_About)
self.menubar.addAction(self.menu_File.menuAction())
self.menubar.addAction(self.menu_Edit.menuAction())
self.menubar.addAction(self.menu_Help.menuAction())
self.toolBar.addAction(self.action_New)
self.toolBar.addSeparator()
self.toolBar.addAction(self.action_Open)
self.toolBar.addSeparator()
self.toolBar.addAction(self.action_Save)
self.toolBar.addSeparator()
self.toolBar.addAction(self.action_Copy)
self.toolBar.addAction(self.action_Paste)
self.toolBar.addAction(self.action_Cut)
self.toolBar.addSeparator()
self.toolBar.addAction(self.action_About)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Sample Editor"))
self.menu_File.setTitle(_translate("MainWindow", "&File"))
self.menuOpen_Recent.setTitle(_translate("MainWindow", "Open &Recent"))
self.menu_Edit.setTitle(_translate("MainWindow", "&Edit"))
self.menu_Help.setTitle(_translate("MainWindow", "&Help"))
self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
self.action_New.setText(_translate("MainWindow", "&New..."))
self.action_New.setToolTip(
_translate("MainWindow", "Create a New Document")
)
self.action_New.setShortcut(_translate("MainWindow", "Ctrl+N"))
self.action_Open.setText(_translate("MainWindow", "&Open..."))
self.action_Open.setToolTip(
_translate("MainWindow", "Open a Document")
)
self.action_Open.setShortcut(_translate("MainWindow", "Ctrl+O"))
self.action_Save.setText(_translate("MainWindow", "&Save"))
self.action_Save.setToolTip(
_translate("MainWindow", "Save the Current Document")
)
self.action_Save.setShortcut(_translate("MainWindow", "Ctrl+S"))
self.action_Exit.setText(_translate("MainWindow", "&Exit"))
self.action_Copy.setText(_translate("MainWindow", "&Copy"))
self.action_Copy.setToolTip(
_translate("MainWindow", "Copy Slected Text")
)
self.action_Copy.setShortcut(_translate("MainWindow", "Ctrl+C"))
self.action_Paste.setText(_translate("MainWindow", "&Paste"))
self.action_Paste.setToolTip(
_translate("MainWindow", "Paste Copied Text")
)
self.action_Paste.setShortcut(_translate("MainWindow", "Ctrl+V"))
self.action_Cut.setText(_translate("MainWindow", "C&ut"))
self.action_Cut.setToolTip(
_translate("MainWindow", "Cut Selected Text")
)
self.action_Cut.setShortcut(_translate("MainWindow", "Ctrl+X"))
self.actionOpen_All.setText(_translate("MainWindow", "Open All"))
self.actionOpen_All.setToolTip(
_translate("MainWindow", "Open All Recent Documents")
)
self.action_About.setText(_translate("MainWindow", "&About..."))
self.action_Find_Replace.setText(
_translate("MainWindow", "&Find and Replace...")
)
self.action_Find_Replace.setToolTip(
_translate("MainWindow", "Launch Find and Replace Dialog")
)
self.action_Find_Replace.setShortcut(
_translate("MainWindow", "Ctrl+F")
)
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>389</width>
<height>132</height>
</rect>
</property>
<property name="windowTitle">
<string>Find and Replace</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>F&amp;ind:</string>
</property>
<property name="buddy">
<cstring>lineEdit</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="lineEdit"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Re&amp;place:</string>
</property>
<property name="buddy">
<cstring>lineEdit_2</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit_2"/>
</item>
<item row="2" column="0" colspan="2">
<widget class="QCheckBox" name="checkBox">
<property name="text">
<string>Match &amp;Case</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="2">
<widget class="QCheckBox" name="checkBox_2">
<property name="text">
<string>Match Whole &amp;Word</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="pushButton">
<property name="text">
<string>&amp;Find</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_2">
<property name="text">
<string>&amp;Replace</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton_3">
<property name="text">
<string>&amp;Cancel</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<tabstops>
<tabstop>lineEdit</tabstop>
<tabstop>lineEdit_2</tabstop>
<tabstop>pushButton</tabstop>
<tabstop>pushButton_2</tabstop>
<tabstop>checkBox</tabstop>
<tabstop>checkBox_2</tabstop>
<tabstop>pushButton_3</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>pushButton_3</sender>
<signal>clicked()</signal>
<receiver>Dialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>302</x>
<y>102</y>
</hint>
<hint type="destinationlabel">
<x>328</x>
<y>67</y>
</hint>
</hints>
</connection>
</connections>
</ui>
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>413</width>
<height>299</height>
</rect>
</property>
<property name="windowTitle">
<string>Sample Editor</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>1</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>1</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<item>
<widget class="QTextEdit" name="textEdit"/>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>413</width>
<height>20</height>
</rect>
</property>
<widget class="QMenu" name="menu_File">
<property name="title">
<string>&amp;File</string>
</property>
<widget class="QMenu" name="menuOpen_Recent">
<property name="title">
<string>Open &amp;Recent</string>
</property>
<addaction name="actionOpen_All"/>
</widget>
<addaction name="action_New"/>
<addaction name="separator"/>
<addaction name="action_Open"/>
<addaction name="menuOpen_Recent"/>
<addaction name="separator"/>
<addaction name="action_Save"/>
<addaction name="separator"/>
<addaction name="action_Exit"/>
</widget>
<widget class="QMenu" name="menu_Edit">
<property name="title">
<string>&amp;Edit</string>
</property>
<addaction name="action_Copy"/>
<addaction name="action_Paste"/>
<addaction name="action_Cut"/>
<addaction name="separator"/>
<addaction name="action_Find_Replace"/>
</widget>
<widget class="QMenu" name="menu_Help">
<property name="title">
<string>&amp;Help</string>
</property>
<addaction name="action_About"/>
</widget>
<addaction name="menu_File"/>
<addaction name="menu_Edit"/>
<addaction name="menu_Help"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<widget class="QToolBar" name="toolBar">
<property name="windowTitle">
<string>toolBar</string>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="action_New"/>
<addaction name="separator"/>
<addaction name="action_Open"/>
<addaction name="separator"/>
<addaction name="action_Save"/>
<addaction name="separator"/>
<addaction name="action_Copy"/>
<addaction name="action_Paste"/>
<addaction name="action_Cut"/>
<addaction name="separator"/>
<addaction name="action_About"/>
</widget>
<action name="action_New">
<property name="icon">
<iconset>
<normaloff>resources/file-new.png</normaloff>resources/file-new.png</iconset>
</property>
<property name="text">
<string>&amp;New...</string>
</property>
<property name="toolTip">
<string>Create a New Document</string>
</property>
<property name="shortcut">
<string>Ctrl+N</string>
</property>
</action>
<action name="action_Open">
<property name="icon">
<iconset>
<normaloff>resources/file-open.png</normaloff>resources/file-open.png</iconset>
</property>
<property name="text">
<string>&amp;Open...</string>
</property>
<property name="toolTip">
<string>Open a Document</string>
</property>
<property name="shortcut">
<string>Ctrl+O</string>
</property>
</action>
<action name="action_Save">
<property name="icon">
<iconset>
<normaloff>resources/file-save.png</normaloff>resources/file-save.png</iconset>
</property>
<property name="text">
<string>&amp;Save</string>
</property>
<property name="toolTip">
<string>Save the Current Document</string>
</property>
<property name="shortcut">
<string>Ctrl+S</string>
</property>
</action>
<action name="action_Exit">
<property name="icon">
<iconset>
<normaloff>resources/file-exit.png</normaloff>resources/file-exit.png</iconset>
</property>
<property name="text">
<string>&amp;Exit</string>
</property>
</action>
<action name="action_Copy">
<property name="icon">
<iconset>
<normaloff>resources/edit-copy.png</normaloff>resources/edit-copy.png</iconset>
</property>
<property name="text">
<string>&amp;Copy</string>
</property>
<property name="toolTip">
<string>Copy Slected Text</string>
</property>
<property name="shortcut">
<string>Ctrl+C</string>
</property>
</action>
<action name="action_Paste">
<property name="icon">
<iconset>
<normaloff>resources/edit-paste.png</normaloff>resources/edit-paste.png</iconset>
</property>
<property name="text">
<string>&amp;Paste</string>
</property>
<property name="toolTip">
<string>Paste Copied Text</string>
</property>
<property name="shortcut">
<string>Ctrl+V</string>
</property>
</action>
<action name="action_Cut">
<property name="icon">
<iconset>
<normaloff>resources/edit-cut.png</normaloff>resources/edit-cut.png</iconset>
</property>
<property name="text">
<string>C&amp;ut</string>
</property>
<property name="toolTip">
<string>Cut Selected Text</string>
</property>
<property name="shortcut">
<string>Ctrl+X</string>
</property>
</action>
<action name="actionOpen_All">
<property name="text">
<string>Open All</string>
</property>
<property name="toolTip">
<string>Open All Recent Documents</string>
</property>
</action>
<action name="action_About">
<property name="icon">
<iconset>
<normaloff>resources/help-content.png</normaloff>resources/help-content.png</iconset>
</property>
<property name="text">
<string>&amp;About...</string>
</property>
</action>
<action name="action_Find_Replace">
<property name="text">
<string>&amp;Find and Replace...</string>
</property>
<property name="toolTip">
<string>Launch Find and Replace Dialog</string>
</property>
<property name="shortcut">
<string>Ctrl+F</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册