PyQt5-QMainWindow与QAction
下面是我设计的:
1.界面
2.对象查看器
3.信号槽
4.动作编辑器
5.myWidget.py文件
import sys
from PyQt5.QtWidgets import (QMainWindow,QApplication,QActionGroup,
QLabel,QProgressBar,QSpinBox,QFontComboBox)
from PyQt5.QtCore import pyqtSlot,Qt
from PyQt5.QtGui import QTextCharFormat,QFont
from ui_QtApp import Ui_MainWindow
class QmyMainWindow(QMainWindow):
def __init__(self,parent=None):
super().__init__(parent) #调用父类构造函数
self.ui=Ui_MainWindow() #创建UI对象
self.ui.setupUi(self) #构造UI
self.__buildUI() #动态创建组件,添加到工具栏和状态栏
self.__spinFontSize.valueChanged[int].connect(
self.do_fontSize_Changed #字体大小设置
)
self.__comboFontName.currentIndexChanged[str].connect(
self.do_fontName_Changed)# 字体选择
self.setCentralWidget(self.ui.plainTextEdit)
## ====由connectSlotsByName()自动与组件的信号关联的槽函数=====
def __buildUI(self):##窗体上动态添加组件
##创建状态栏上的组件
self.__LabFile = QLabel(self)# QLabel组件显示信息
self.__LabFile.setMinimumWidth(150)
self.__LabFile.setText("文件名: ")
self.ui.statusbar.addWidget(self.__LabFile) # 添加到状态栏
self.__progressBar1 = QProgressBar(self)# progressBar1
self.__progressBar1.setMaximumWidth(200)
self.__progressBar1.setMinimum(5)
self.__progressBar1.setMaximum(50)
sz = self.ui.plainTextEdit.font().pointSize()# 字体大小
self.__progressBar1.setValue(sz)
self.ui.statusbar.addWidget(self.__progressBar1)
# 添加到状态栏
self.__LabInfo = QLabel(self)# QLabel组件显示字体名称
self.__LabInfo.setText("选择字体名称: ")
self.ui.statusbar.addPermanentWidget(self.__LabInfo) # 添加到状态栏
##为actLang_CN和actLang_EN创建QActionGroup,互斥型选择
actionGroup = QActionGroup(self)
actionGroup.addAction(self.ui.actLang_CN)
actionGroup.addAction(self.ui.actLang_EN)
actionGroup.setExclusive(True)# 互斥型分组
self.ui.actLang_CN.setChecked(True)
##创建工具栏上的组件
self.__spinFontSize = QSpinBox(self)
# 字体大小spinbox
self.__spinFontSize.setMinimum(5)
self.__spinFontSize.setMaximum(50)
sz = self.ui.plainTextEdit.font().pointSize()
self.__spinFontSize.setValue(sz)
self.__spinFontSize.setMinimumWidth(50)
self.ui.toolBar.addWidget(self.__spinFontSize)# 添加到工具栏
self.__comboFontName = QFontComboBox(self)
# 字体combobox
self.__comboFontName.setMinimumWidth(100)
self.ui.toolBar.addWidget(self.__comboFontName)
# 添加到工具栏
self.ui.toolBar.addSeparator()
# 添加一个分隔条
self.ui.toolBar.addAction(self.ui.actClose)
# 添加"关闭"按钮
@pyqtSlot(int)##设置字体大小,关联self.__spinFontSize
def do_fontSize_Changed(self, fontSize):
fmt = self.ui.plainTextEdit.currentCharFormat()
fmt.setFontPointSize(fontSize)
self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
self.__progressBar1.setValue(fontSize)
@pyqtSlot(str)##选择字体名称,关联self.__comboFontName
def do_fontName_Changed(self, fontName):
fmt = self.ui.plainTextEdit.currentCharFormat()
fmt.setFontFamily(fontName)
self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
self.__LabInfo.setText("字体名称:%s"%fontName)
@pyqtSlot(bool)
##设置粗体
def on_actFont_Bold_triggered(self, checked):
fmt = self.ui.plainTextEdit.currentCharFormat()
if (checked == True):
fmt.setFontWeight(QFont.Bold)
else:
fmt.setFontWeight(QFont.Normal)
self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
@pyqtSlot(bool)
##设置斜体
def on_actFont_Italic_triggered(self, checked):
fmt = self.ui.plainTextEdit.currentCharFormat()
fmt.setFontItalic(checked)
self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
@pyqtSlot(bool)
##设置下划线
def on_actFont_UnderLine_triggered(self, checked):
fmt = self.ui.plainTextEdit.currentCharFormat()
fmt.setFontUnderline(checked)
self.ui.plainTextEdit.mergeCurrentCharFormat(fmt)
def on_plainTextEdit_copyAvailable(self, avi):##文本框内容可复制
self.ui.actEdit_Cut.setEnabled(avi)
self.ui.actEdit_Copy.setEnabled(avi)
self.ui.acEdit_Paste.setEnabled(self.ui.plainTextEdit.canPaste())
def on_plainTextEdit_selectionChanged(self): ##文本选择内容发生变化
fmt = self.ui.plainTextEdit.currentCharFormat()
self.ui.actFont_Bold.setChecked(fmt.font().bold())
self.ui.actFont_Italic.setChecked(fmt.fontItalic())
self.ui.actFont_UnderLine.setChecked(fmt.fontUnderline())
def on_plainTextEdit_customContextMenuRequested(self, pos): ##标准右键菜单
popMenu = self.ui.plainTextEdit.createStandardContextMenu()
popMenu.exec(pos) # 显示快捷菜单
@pyqtSlot(bool)
##设置工具栏按钮样式
def on_actSys_ToggleText_triggered(self, checked):
if (checked):
st = Qt.ToolButtonTextUnderIcon
else:
st = Qt.ToolButtonIconOnly
self.ui.toolBar.setToolButtonStyle(st)
def on_actFile_New_triggered(self):##新建文件,不实现具体功能
self._LabFile.setText("新建文件")
def on_actFile_Open_triggered(self):##打开文件,不实现具体功能
self.__LabFile.setText("打开的文件")
def on_actFile_Save_triggered(self): ##保存文件,不实现具体功能
self._LabFile.setText("文件已保存")
## =======自定义槽函数=======
if __name__ == "__main__": ##用于当前窗体测试
app=QApplication(sys.argv) #创建GUI应用程序
form=QmyMainWindow() #创建窗体
form.show()
sys.exit(app.exec_())
6.appMain.py文件
## GUI应用程序主程序
import sys
from PyQt5.QtWidgets import QApplication
from myWidget import QmyMainWindow
app = QApplication(sys.argv) # 创建app,用QApplication类
myWidget = QmyMainWindow() #创建窗体
myWidget.show()
sys.exit(app.exec_())
7.最终效果图
转载请注明出处,欢迎讨论和交流!