项目地址:https://github.com/pikeduo/TXTReader

PyQt5中文手册:https://maicss.gitbook.io/pyqt-chinese-tutoral/pyqt5/

QtDesigner学习地址:https://youcans.blog.csdn.net/article/details/120640342

一、前期准备

QtDesigner是一个可视化的GUI设计工具,首先我们要在pycharm上配置QtDesigner,用来设计ui,确保你已经安装了pyqt5库。

  1. pip install pyqt5

点击File->Settings->Tools->External Tools,点击+添加外部工具。



下面是QtDesigner的一些配置

Name:QtDesigner 可自定义

Program:E:\项目根目录\venv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

Arguments:不用填

Workig directory: $ProjectFileDir$\QtDesigner\UI

其中Program填designer.exe的地址,如果找不到在哪里,则在pycharm主界面连续点击两次Shift,进入搜索界面搜索。



记住要将右上角的框勾上。

工作目录里$ProjectFileDir$是项目根目录,QtDesigner\UI是自己创建的目录,可自行选择是否创建,设计的ui文件会保存到这个目录下。



点击ok后,再点击aplay,如果没点的话则设置不成功且要成功设置。

接下来配置pyUIC,将qrc文件转化为py文件,配置如下

Name:puUIC 可自定义

Program:E:\项目地址\venv\Scripts\python.exe

Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension\(.py
Workig directory: \$ProjectFileDir\)\QtDesigner\UI



最后是配置pyrc,将资源文件转换为py文件,配置如下

Name:qrcTopy 可自定义

Program:E:\项目地址\venv\Scripts\pyrcc5.exe

Arguments:-o ../$FileNameWithoutExtension\(_rc.py \$FileNameWithoutExtension\).qrc

Workig directory: $FileDir$

注意,Arguments中../$FileNameWithoutExtension\(_rc.py加了../,代表要将编译后的py文件存储到父目录,因为qrc文件是存储在resource目录下,文件名加了_rc是因为每次设计完ui,将ui文件编译成py文件后,会`import \$FileNameWithoutExtension\)_rc.py`,为了方便,干脆直接加上_rc。



我的目录结构如下

二、UI设计

(1)主窗口

依次点击Tools->External Tools->QtDesigner,打开QtDesigner,创建一个窗口。



在右边属性编辑器里,设置窗口的最小大小为1280X720。



添加窗口图标,图标来源于阿里矢量图库

在右边属性编辑器找到windowIcon,选择资源



点击左上角的笔编辑资源,新建资源文件,在你的项目resource目录下新建一个resource.qrc文件。



在右下角加号添加一个前缀icon,然后添加文件,将文件全部复制过来,选择一个文件作为图标。



快捷键Ctrl+R可以预览ui界面。



右边对象查看器,在主窗口下添加一个工具栏



主窗口设计完毕,接下来是将ui文件和qrc文件转换为py文件。

找到ui文件,右键,External Tools->pyUIC,然后可以看到在同目录下生成了UIReader.py文件

  1. # -*- coding: utf-8 -*-
  2. # Form implementation generated from reading ui file 'UIReader.ui'
  3. #
  4. # Created by: PyQt5 UI code generator 5.15.4
  5. #
  6. # WARNING: Any manual changes made to this file will be lost when pyuic5 is
  7. # run again. Do not edit this file unless you know what you are doing.
  8. from PyQt5 import QtCore, QtGui, QtWidgets
  9. class Ui_MainWindow(object):
  10. def setupUi(self, MainWindow):
  11. MainWindow.setObjectName("MainWindow")
  12. MainWindow.resize(1280, 720)
  13. MainWindow.setMinimumSize(QtCore.QSize(1280, 720))
  14. icon = QtGui.QIcon()
  15. icon.addPixmap(QtGui.QPixmap(":/icon/reader.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  16. MainWindow.setWindowIcon(icon)
  17. self.centralwidget = QtWidgets.QWidget(MainWindow)
  18. self.centralwidget.setObjectName("centralwidget")
  19. self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
  20. self.gridLayout_2.setObjectName("gridLayout_2")
  21. MainWindow.setCentralWidget(self.centralwidget)
  22. self.menubar = QtWidgets.QMenuBar(MainWindow)
  23. self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 26))
  24. self.menubar.setObjectName("menubar")
  25. MainWindow.setMenuBar(self.menubar)
  26. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  27. self.statusbar.setObjectName("statusbar")
  28. MainWindow.setStatusBar(self.statusbar)
  29. self.toolBar = QtWidgets.QToolBar(MainWindow)
  30. self.toolBar.setObjectName("toolBar")
  31. MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
  32. self.retranslateUi(MainWindow)
  33. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  34. def retranslateUi(self, MainWindow):
  35. _translate = QtCore.QCoreApplication.translate
  36. MainWindow.setWindowTitle(_translate("MainWindow", "TXT阅读器"))
  37. MainWindow.setStatusTip(_translate("MainWindow", "TXT阅读器"))
  38. self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
  39. import resource_rc

代码中包含一些累赘的信息,这是因为在QtDesigner中,如果你设置布局后又删除,在ui文件中还会保存这些信息。

找到resource.qrc文件,右键,External Tools->qrtTopy,将resource.qrc文件转换为py文件,可以看到在项目根目录下生成了resource_rc.py文件。

在创建一个main.py文件,调用UIReader.py文件,运行显示主窗口。

  1. import sys
  2. from PyQt5.QtWidgets import QMainWindow, QApplication
  3. from QtDesigner.UI.UIReader import Ui_MainWindow
  4. class MyMainWindow(QMainWindow, Ui_MainWindow): # 继承 QMainWindow 类和 Ui_MainWindow 界面类
  5. def __init__(self, parent=None):
  6. super(MyMainWindow, self).__init__(parent) # 初始化父类
  7. self.setupUi(self) # 继承 Ui_MainWindow 界面类
  8. if __name__ == '__main__':
  9. app = QApplication(sys.argv) # 在 QApplication 方法中使用,创建应用程序对象
  10. myWin = MyMainWindow() # 实例化 MyMainWindow 类,创建主窗口
  11. myWin.show() # 在桌面显示控件 myWin
  12. sys.exit(app.exec_()) # 结束进程,退出程序



虽然窗口图标有了,但是最小化图标还没有,在main.py文件添加ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID("myappid"),发现图标显示出来了。

(2)菜单栏

在菜单栏添加一个文件菜单,建立两个子菜单,打开文件和打开最近的文件,为其添加图标。

注意子菜单栏名称不能直接输入中文,要在右边属性栏里更改。



在打开最近的文件里,再添加子菜单,注意其类从QAction变更为QMenu。



添加了一个子菜单后再删除,其类从QAction变更为了QMenu。

添加设置菜单栏,设置字体和颜色。



设置背景图片。



恢复默认设置。



然后是退出按钮。



因为QMenu类不能绑定动作,所以要建一个子菜单,为其绑定动作,可以添加快捷键,右边找到shortcut,按Ctrl+Q,快捷键设置完成。

右下角,信号和槽,绑定动作。



完成!编译完后运行。



UIReader.py的代码如下:

  1. # -*- coding: utf-8 -*-
  2. # Form implementation generated from reading ui file 'UIReader.ui'
  3. #
  4. # Created by: PyQt5 UI code generator 5.15.4
  5. #
  6. # WARNING: Any manual changes made to this file will be lost when pyuic5 is
  7. # run again. Do not edit this file unless you know what you are doing.
  8. from PyQt5 import QtCore, QtGui, QtWidgets
  9. class Ui_MainWindow(object):
  10. def setupUi(self, MainWindow):
  11. MainWindow.setObjectName("MainWindow")
  12. MainWindow.resize(1280, 720)
  13. MainWindow.setMinimumSize(QtCore.QSize(1280, 720))
  14. icon = QtGui.QIcon()
  15. icon.addPixmap(QtGui.QPixmap(":/icon/reader.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  16. MainWindow.setWindowIcon(icon)
  17. self.centralwidget = QtWidgets.QWidget(MainWindow)
  18. self.centralwidget.setObjectName("centralwidget")
  19. self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
  20. self.gridLayout_2.setObjectName("gridLayout_2")
  21. MainWindow.setCentralWidget(self.centralwidget)
  22. self.menubar = QtWidgets.QMenuBar(MainWindow)
  23. self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 26))
  24. self.menubar.setObjectName("menubar")
  25. self.files = QtWidgets.QMenu(self.menubar)
  26. icon1 = QtGui.QIcon()
  27. icon1.addPixmap(QtGui.QPixmap(":/icon/files.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  28. self.files.setIcon(icon1)
  29. self.files.setObjectName("files")
  30. self.lastfile = QtWidgets.QMenu(self.files)
  31. icon2 = QtGui.QIcon()
  32. icon2.addPixmap(QtGui.QPixmap(":/icon/file_last.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  33. self.lastfile.setIcon(icon2)
  34. self.lastfile.setObjectName("lastfile")
  35. self.setting = QtWidgets.QMenu(self.menubar)
  36. icon3 = QtGui.QIcon()
  37. icon3.addPixmap(QtGui.QPixmap(":/icon/setting.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  38. self.setting.setIcon(icon3)
  39. self.setting.setObjectName("setting")
  40. self.fontcolor = QtWidgets.QMenu(self.setting)
  41. icon4 = QtGui.QIcon()
  42. icon4.addPixmap(QtGui.QPixmap(":/icon/fontcolor.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  43. self.fontcolor.setIcon(icon4)
  44. self.fontcolor.setObjectName("fontcolor")
  45. self.bg = QtWidgets.QMenu(self.setting)
  46. icon5 = QtGui.QIcon()
  47. icon5.addPixmap(QtGui.QPixmap(":/icon/bg.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  48. self.bg.setIcon(icon5)
  49. self.bg.setObjectName("bg")
  50. self.exit = QtWidgets.QMenu(self.menubar)
  51. icon6 = QtGui.QIcon()
  52. icon6.addPixmap(QtGui.QPixmap(":/icon/exit.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  53. self.exit.setIcon(icon6)
  54. self.exit.setObjectName("exit")
  55. MainWindow.setMenuBar(self.menubar)
  56. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  57. self.statusbar.setObjectName("statusbar")
  58. MainWindow.setStatusBar(self.statusbar)
  59. self.toolBar = QtWidgets.QToolBar(MainWindow)
  60. self.toolBar.setObjectName("toolBar")
  61. MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
  62. self.actionfile = QtWidgets.QAction(MainWindow)
  63. icon7 = QtGui.QIcon()
  64. icon7.addPixmap(QtGui.QPixmap(":/icon/file.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  65. self.actionfile.setIcon(icon7)
  66. self.actionfile.setObjectName("actionfile")
  67. self.action1 = QtWidgets.QAction(MainWindow)
  68. self.action1.setObjectName("action1")
  69. self.actionfont = QtWidgets.QAction(MainWindow)
  70. icon8 = QtGui.QIcon()
  71. icon8.addPixmap(QtGui.QPixmap(":/icon/font.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  72. self.actionfont.setIcon(icon8)
  73. self.actionfont.setObjectName("actionfont")
  74. self.actioncolor = QtWidgets.QAction(MainWindow)
  75. icon9 = QtGui.QIcon()
  76. icon9.addPixmap(QtGui.QPixmap(":/icon/color.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  77. self.actioncolor.setIcon(icon9)
  78. self.actioncolor.setObjectName("actioncolor")
  79. self.actionimport = QtWidgets.QAction(MainWindow)
  80. icon10 = QtGui.QIcon()
  81. icon10.addPixmap(QtGui.QPixmap(":/icon/import.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  82. self.actionimport.setIcon(icon10)
  83. self.actionimport.setObjectName("actionimport")
  84. self.actionclose = QtWidgets.QAction(MainWindow)
  85. icon11 = QtGui.QIcon()
  86. icon11.addPixmap(QtGui.QPixmap(":/icon/close.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  87. self.actionclose.setIcon(icon11)
  88. self.actionclose.setObjectName("actionclose")
  89. self.actiondefault = QtWidgets.QAction(MainWindow)
  90. icon12 = QtGui.QIcon()
  91. icon12.addPixmap(QtGui.QPixmap(":/icon/default.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  92. self.actiondefault.setIcon(icon12)
  93. self.actiondefault.setObjectName("actiondefault")
  94. self.actionexit = QtWidgets.QAction(MainWindow)
  95. self.actionexit.setIcon(icon6)
  96. self.actionexit.setObjectName("actionexit")
  97. self.files.addAction(self.actionfile)
  98. self.files.addAction(self.lastfile.menuAction())
  99. self.fontcolor.addAction(self.actionfont)
  100. self.fontcolor.addAction(self.actioncolor)
  101. self.bg.addAction(self.actionimport)
  102. self.bg.addAction(self.actionclose)
  103. self.setting.addAction(self.fontcolor.menuAction())
  104. self.setting.addAction(self.bg.menuAction())
  105. self.setting.addAction(self.actiondefault)
  106. self.exit.addAction(self.actionexit)
  107. self.menubar.addAction(self.files.menuAction())
  108. self.menubar.addAction(self.setting.menuAction())
  109. self.menubar.addAction(self.exit.menuAction())
  110. self.retranslateUi(MainWindow)
  111. self.actionexit.triggered.connect(MainWindow.close)
  112. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  113. def retranslateUi(self, MainWindow):
  114. _translate = QtCore.QCoreApplication.translate
  115. MainWindow.setWindowTitle(_translate("MainWindow", "TXT阅读器"))
  116. MainWindow.setStatusTip(_translate("MainWindow", "TXT阅读器"))
  117. self.files.setStatusTip(_translate("MainWindow", "文件"))
  118. self.files.setTitle(_translate("MainWindow", "文件"))
  119. self.lastfile.setTitle(_translate("MainWindow", "打开最近的文件"))
  120. self.setting.setToolTip(_translate("MainWindow", "设置"))
  121. self.setting.setStatusTip(_translate("MainWindow", "设置"))
  122. self.setting.setTitle(_translate("MainWindow", "设置"))
  123. self.fontcolor.setTitle(_translate("MainWindow", "字体和颜色"))
  124. self.bg.setTitle(_translate("MainWindow", "背景图片"))
  125. self.exit.setToolTip(_translate("MainWindow", "关闭应用"))
  126. self.exit.setStatusTip(_translate("MainWindow", "关闭应用"))
  127. self.exit.setTitle(_translate("MainWindow", "退出"))
  128. self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
  129. self.actionfile.setText(_translate("MainWindow", "打开文件"))
  130. self.actionfile.setStatusTip(_translate("MainWindow", "打开文件"))
  131. self.actionfile.setShortcut(_translate("MainWindow", "Ctrl+O"))
  132. self.action1.setText(_translate("MainWindow", "1"))
  133. self.actionfont.setText(_translate("MainWindow", "选择字体"))
  134. self.actionfont.setStatusTip(_translate("MainWindow", "选择字体"))
  135. self.actioncolor.setText(_translate("MainWindow", "选择背景颜色"))
  136. self.actioncolor.setStatusTip(_translate("MainWindow", "选择背景颜色"))
  137. self.actionimport.setText(_translate("MainWindow", "导入背景图片"))
  138. self.actionimport.setStatusTip(_translate("MainWindow", "导入背景图片"))
  139. self.actionclose.setText(_translate("MainWindow", "关闭背景图片"))
  140. self.actionclose.setStatusTip(_translate("MainWindow", "关闭背景图片"))
  141. self.actiondefault.setText(_translate("MainWindow", "恢复默认设置"))
  142. self.actiondefault.setStatusTip(_translate("MainWindow", "恢复默认设置"))
  143. self.actionexit.setText(_translate("MainWindow", "退出应用"))
  144. self.actionexit.setStatusTip(_translate("MainWindow", "退出应用"))
  145. self.actionexit.setShortcut(_translate("MainWindow", "Ctrl+Q"))
  146. import resource_rc

三、显示界面

显示页面需要一个目录和文本浏览器。

从左侧找到Tree Widget组件,拖到主窗口。在Tree Widget区域,右键编辑项目,添加列命名为章节列表,并将其布局设置为左边。



左侧找到Text Browser,拖到右边区域,并将整片区域设置为栅格布局。



为章节目录设置图标,右键编辑项目,在属性里添加图标。



保存,编译运行。



UI界面代码。

  1. # -*- coding: utf-8 -*-
  2. # Form implementation generated from reading ui file 'UIReader.ui'
  3. #
  4. # Created by: PyQt5 UI code generator 5.15.4
  5. #
  6. # WARNING: Any manual changes made to this file will be lost when pyuic5 is
  7. # run again. Do not edit this file unless you know what you are doing.
  8. from PyQt5 import QtCore, QtGui, QtWidgets
  9. class Ui_MainWindow(object):
  10. def setupUi(self, MainWindow):
  11. MainWindow.setObjectName("MainWindow")
  12. MainWindow.resize(1280, 720)
  13. MainWindow.setMinimumSize(QtCore.QSize(1280, 720))
  14. icon = QtGui.QIcon()
  15. icon.addPixmap(QtGui.QPixmap(":/icon/reader.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  16. MainWindow.setWindowIcon(icon)
  17. self.centralwidget = QtWidgets.QWidget(MainWindow)
  18. self.centralwidget.setObjectName("centralwidget")
  19. self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
  20. self.gridLayout.setObjectName("gridLayout")
  21. self.treeWidget = QtWidgets.QTreeWidget(self.centralwidget)
  22. self.treeWidget.setObjectName("treeWidget")
  23. icon1 = QtGui.QIcon()
  24. icon1.addPixmap(QtGui.QPixmap(":/icon/catlogs.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  25. self.treeWidget.headerItem().setIcon(0, icon1)
  26. self.gridLayout.addWidget(self.treeWidget, 0, 0, 1, 1, QtCore.Qt.AlignLeft)
  27. self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
  28. self.textBrowser.setObjectName("textBrowser")
  29. self.gridLayout.addWidget(self.textBrowser, 0, 1, 1, 1)
  30. MainWindow.setCentralWidget(self.centralwidget)
  31. self.menubar = QtWidgets.QMenuBar(MainWindow)
  32. self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 26))
  33. self.menubar.setObjectName("menubar")
  34. self.files = QtWidgets.QMenu(self.menubar)
  35. icon2 = QtGui.QIcon()
  36. icon2.addPixmap(QtGui.QPixmap(":/icon/files.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  37. self.files.setIcon(icon2)
  38. self.files.setObjectName("files")
  39. self.lastfile = QtWidgets.QMenu(self.files)
  40. icon3 = QtGui.QIcon()
  41. icon3.addPixmap(QtGui.QPixmap(":/icon/file_last.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  42. self.lastfile.setIcon(icon3)
  43. self.lastfile.setObjectName("lastfile")
  44. self.setting = QtWidgets.QMenu(self.menubar)
  45. icon4 = QtGui.QIcon()
  46. icon4.addPixmap(QtGui.QPixmap(":/icon/setting.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  47. self.setting.setIcon(icon4)
  48. self.setting.setObjectName("setting")
  49. self.fontcolor = QtWidgets.QMenu(self.setting)
  50. icon5 = QtGui.QIcon()
  51. icon5.addPixmap(QtGui.QPixmap(":/icon/fontcolor.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  52. self.fontcolor.setIcon(icon5)
  53. self.fontcolor.setObjectName("fontcolor")
  54. self.bg = QtWidgets.QMenu(self.setting)
  55. icon6 = QtGui.QIcon()
  56. icon6.addPixmap(QtGui.QPixmap(":/icon/bg.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  57. self.bg.setIcon(icon6)
  58. self.bg.setObjectName("bg")
  59. self.exit = QtWidgets.QMenu(self.menubar)
  60. icon7 = QtGui.QIcon()
  61. icon7.addPixmap(QtGui.QPixmap(":/icon/exit.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  62. self.exit.setIcon(icon7)
  63. self.exit.setObjectName("exit")
  64. MainWindow.setMenuBar(self.menubar)
  65. self.statusbar = QtWidgets.QStatusBar(MainWindow)
  66. self.statusbar.setObjectName("statusbar")
  67. MainWindow.setStatusBar(self.statusbar)
  68. self.toolBar = QtWidgets.QToolBar(MainWindow)
  69. self.toolBar.setObjectName("toolBar")
  70. MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar)
  71. self.actionfile = QtWidgets.QAction(MainWindow)
  72. icon8 = QtGui.QIcon()
  73. icon8.addPixmap(QtGui.QPixmap(":/icon/file.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  74. self.actionfile.setIcon(icon8)
  75. self.actionfile.setObjectName("actionfile")
  76. self.action1 = QtWidgets.QAction(MainWindow)
  77. self.action1.setObjectName("action1")
  78. self.actionfont = QtWidgets.QAction(MainWindow)
  79. icon9 = QtGui.QIcon()
  80. icon9.addPixmap(QtGui.QPixmap(":/icon/font.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  81. self.actionfont.setIcon(icon9)
  82. self.actionfont.setObjectName("actionfont")
  83. self.actioncolor = QtWidgets.QAction(MainWindow)
  84. icon10 = QtGui.QIcon()
  85. icon10.addPixmap(QtGui.QPixmap(":/icon/color.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  86. self.actioncolor.setIcon(icon10)
  87. self.actioncolor.setObjectName("actioncolor")
  88. self.actionimport = QtWidgets.QAction(MainWindow)
  89. icon11 = QtGui.QIcon()
  90. icon11.addPixmap(QtGui.QPixmap(":/icon/import.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  91. self.actionimport.setIcon(icon11)
  92. self.actionimport.setObjectName("actionimport")
  93. self.actionclose = QtWidgets.QAction(MainWindow)
  94. icon12 = QtGui.QIcon()
  95. icon12.addPixmap(QtGui.QPixmap(":/icon/close.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  96. self.actionclose.setIcon(icon12)
  97. self.actionclose.setObjectName("actionclose")
  98. self.actiondefault = QtWidgets.QAction(MainWindow)
  99. icon13 = QtGui.QIcon()
  100. icon13.addPixmap(QtGui.QPixmap(":/icon/default.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
  101. self.actiondefault.setIcon(icon13)
  102. self.actiondefault.setObjectName("actiondefault")
  103. self.actionexit = QtWidgets.QAction(MainWindow)
  104. self.actionexit.setIcon(icon7)
  105. self.actionexit.setObjectName("actionexit")
  106. self.files.addAction(self.actionfile)
  107. self.files.addAction(self.lastfile.menuAction())
  108. self.fontcolor.addAction(self.actionfont)
  109. self.fontcolor.addAction(self.actioncolor)
  110. self.bg.addAction(self.actionimport)
  111. self.bg.addAction(self.actionclose)
  112. self.setting.addAction(self.fontcolor.menuAction())
  113. self.setting.addAction(self.bg.menuAction())
  114. self.setting.addAction(self.actiondefault)
  115. self.exit.addAction(self.actionexit)
  116. self.menubar.addAction(self.files.menuAction())
  117. self.menubar.addAction(self.setting.menuAction())
  118. self.menubar.addAction(self.exit.menuAction())
  119. self.retranslateUi(MainWindow)
  120. self.actionexit.triggered.connect(MainWindow.close)
  121. QtCore.QMetaObject.connectSlotsByName(MainWindow)
  122. def retranslateUi(self, MainWindow):
  123. _translate = QtCore.QCoreApplication.translate
  124. MainWindow.setWindowTitle(_translate("MainWindow", "TXT阅读器"))
  125. MainWindow.setStatusTip(_translate("MainWindow", "TXT阅读器"))
  126. self.treeWidget.setToolTip(_translate("MainWindow", "章节目录"))
  127. self.treeWidget.setStatusTip(_translate("MainWindow", "章节目录"))
  128. self.treeWidget.headerItem().setText(0, _translate("MainWindow", "章节目录"))
  129. self.files.setStatusTip(_translate("MainWindow", "文件"))
  130. self.files.setTitle(_translate("MainWindow", "文件"))
  131. self.lastfile.setToolTip(_translate("MainWindow", "打开最近的文件"))
  132. self.lastfile.setStatusTip(_translate("MainWindow", "打开最近的文件"))
  133. self.lastfile.setTitle(_translate("MainWindow", "打开最近的文件"))
  134. self.setting.setToolTip(_translate("MainWindow", "设置"))
  135. self.setting.setStatusTip(_translate("MainWindow", "设置"))
  136. self.setting.setTitle(_translate("MainWindow", "设置"))
  137. self.fontcolor.setTitle(_translate("MainWindow", "字体和颜色"))
  138. self.bg.setTitle(_translate("MainWindow", "背景图片"))
  139. self.exit.setToolTip(_translate("MainWindow", "关闭应用"))
  140. self.exit.setStatusTip(_translate("MainWindow", "关闭应用"))
  141. self.exit.setTitle(_translate("MainWindow", "退出"))
  142. self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
  143. self.actionfile.setText(_translate("MainWindow", "打开文件"))
  144. self.actionfile.setStatusTip(_translate("MainWindow", "打开文件"))
  145. self.actionfile.setShortcut(_translate("MainWindow", "Ctrl+O"))
  146. self.action1.setText(_translate("MainWindow", "1"))
  147. self.actionfont.setText(_translate("MainWindow", "选择字体"))
  148. self.actionfont.setStatusTip(_translate("MainWindow", "选择字体"))
  149. self.actioncolor.setText(_translate("MainWindow", "选择背景颜色"))
  150. self.actioncolor.setStatusTip(_translate("MainWindow", "选择背景颜色"))
  151. self.actionimport.setText(_translate("MainWindow", "导入背景图片"))
  152. self.actionimport.setStatusTip(_translate("MainWindow", "导入背景图片"))
  153. self.actionclose.setText(_translate("MainWindow", "关闭背景图片"))
  154. self.actionclose.setStatusTip(_translate("MainWindow", "关闭背景图片"))
  155. self.actiondefault.setText(_translate("MainWindow", "恢复默认设置"))
  156. self.actiondefault.setStatusTip(_translate("MainWindow", "恢复默认设置"))
  157. self.actionexit.setText(_translate("MainWindow", "退出应用"))
  158. self.actionexit.setStatusTip(_translate("MainWindow", "退出应用"))
  159. self.actionexit.setShortcut(_translate("MainWindow", "Ctrl+Q"))
  160. import resource_rc

这样UI界面就初步设计完成了。

使用Python库pyqt5制作TXT阅读器(一)-------UI设计的更多相关文章

  1. 使用 Vue 和 epub.js 制作电子书阅读器

    ePub 简介 ePub 是一种电子书的标准格式,平时我看的电子书大部分是这种格式.在手机上我一般用"多看"阅读 ePub 电子书,在 Windows 上找不到用起来比较顺心的软件 ...

  2. Android简单的编写一个txt阅读器(没有处理字符编码),适用于新手学习

    本程序只是使用了一些基本的知识点编写了一个比较简单粗陋的txt文本阅读器,效率不高,只适合新手练习.所以大神勿喷. 其实想到编写这种程序源自本人之前喜欢看小说,而很多小说更新太慢,所以本人就只能找一个 ...

  3. SWT JFace 小制作 文本阅读器

    1 package swt_jface.demo11; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.i ...

  4. python使用PyQt5,及QtCreator,qt-unified界面设计以及逻辑实现

    1.环境安装: 1.安装pyQt5 pip3 install pyQt5   2.安装设计器 pip3 install pyQt5-tools  (英文版的) 我是用的是自己Windows上安装的qt ...

  5. Java可视化编程,基于布局管理器的UI设计

    在<事件驱动模型>讲述了如何将用户与功能实现代码联系到一起.怎么样便于用户理解和符合用户的使用习惯? 本篇还是就此问题作分析,站在用户角度上分析UI各组件倒底该如何设计呈现. 优秀的UI会 ...

  6. 电子书及阅读器Demo

    电子书阅读器(Kindle,电子纸技术.LCD.电子墨水技术等: 亚马逊/当当网站)  电子书产业可分5大环节:内容供应商.数字格式制作商.内容流通服务平台.传输平台以及终端阅读器产品. 全球电子书市 ...

  7. python 库资源大全

    偶然的机会翻到这篇文章,很全面,来源:  Python 资源大全中文版       哪些 Python 库让你相见恨晚? 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 pyth ...

  8. python库包大全(转)

    python 库资源大全 转自: Python 资源大全中文版 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python ...

  9. C#版简易RSS阅读器

    C#版简易RSS阅读器.由VB版修改完成,感谢aowind的技术支持! 源代码: using System; using System.Drawing; using System.Collection ...

  10. 项目:Android平台txt阅读软件

    项目:Android平台txt阅读软件 项目组成员:20145107李长达.20145110屠轶成.20145120黄玄曦.20145122程智崟 Need: 从古至今,阅读都是人类生活中的一大部分, ...

随机推荐

  1. 『现学现忘』Git分支 — 38、Git分支介绍

    目录 1.Git分支简介 2.Git分支与SVN分支的区别 3.工作中为什么要使用分支 4.Git分支管理的好处 1.Git分支简介 几乎所有的版本控制系统都以某种形式支持分支. 使用分支意味着,你可 ...

  2. 中小型企业综合项目(Nginx+LVS+Tomcat+MGR+Nexus+NFS)

    Nginx+Tomcat+Mysql综合实验 1.环境准备 服务器 IP地址 作用 系统版本 数据库服务器1 192.168.100.111 MGR集群数据库master节点 Rocky8.6 数据库 ...

  3. 【lwip】09-IPv4协议&超全源码实现分析

    目录 前言 9.1 IP协议简述 9.2 IP地址分类 9.2.1 私有地址 9.2.2 受限广播地址 9.2.3 直接广播地址 9.2.4 多播地址 9.2.5 环回地址 9.2.6 本地链路地址 ...

  4. LoadRunner11使用代理录制脚本

    一.背景 电脑安装了LoadRunner11,在进行脚本录制时发现录制的脚本为空,即录制时事件为0,也没有自动调出对应的浏览器:如下图: 问了度娘,发现LR11要成功录制脚本,对各浏览器的版本有要求! ...

  5. JUnit 5 单元测试教程

    点赞再看,动力无限. 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 在软件开发过程中,我们通常都需要测试 ...

  6. 重学c#系列——订阅发布与事件[二十六]

    前言 简单介绍一下订阅发布与事件. 正文 先来看一下委托的订阅与发布. public delegate void TestDelegate(); public class Cat { public T ...

  7. MQ系列8:数据存储,消息队列的高可用保障

    MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...

  8. IOS AND Android 配置Fiddler环境

    下载:http://rj.baidu.com/soft/detail/10963.html?ald 运行Fiddler点击Tools: 选择设置选项:   1.     选择HTTPS新选项卡. 2. ...

  9. BFS和DFS学习笔记

    1 算法介绍 1.1 BFS Breadth First Search(广度优先搜索),将相邻的节点一层层查找,找到最多的 以上图为例,首先确定一个根节点,然后依次在剩下的节点中找已找出的节点的相邻节 ...

  10. vivo大数据日志采集Agent设计实践

    作者:vivo 互联网存储技术团队- Qiu Sidi 在企业大数据体系建设过程中,数据采集是其中的首要环节.然而,当前行业内的相关开源数据采集组件,并无法满足企业大规模数据采集的需求与有效的数据采集 ...