本文主要通过简单的实例来学习一下菜单栏和工具栏的制作。
信号(signal)和槽(slot)是Qt核心机制。通过建立信号和槽的连接可以实现对象间的通信。当信号发射(emit)时,连接的槽函数就会执行。信号和槽通过QObject.signal.connect()连接。
菜单栏可以直接使用Qt Designer在窗体设计界面上直观的增改删,当然也可以通过QMenu类,使用代码来创建。一个QMenu对象,可以包含一个或多个QAction对象或级联的QMenu对象。
打开Qt Designer,组件只有一个textEdit文本框。在空白菜单里,点击鼠标输入菜单名称(注意:中文名称不能直接输入进去(bug未知),但可以粘贴进去,英文名称可以直接输入)。保存:menudemo.ui,编译后文件名Ui_menudemo.py
界面设计
每个菜单栏的功能项,其实就是一个QAction按钮,当单击时,QMenu对象和 QMenuBar对象都会发射triggered信号。
工具栏不能直接可视化设计,需要使用代码来创建。工具栏上的按钮,本质是也是QAction按钮,当单击工具栏上的功能按钮时,QAction按钮发射Triggered信号,ToolBar对象发射actionTriggered信号。
import sys
from PySide6 import QtCore,QtGui,QtWidgets
from Ui_menudemo import Ui_MainWindow
import os
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("菜单演示实例")
self.textEdit.setFontPointSize(24)
self.textEdit.setText("菜单栏和工具栏制作实例")
#菜单栏信号槽,两种写法
# self.filemenu.triggered.connect(self.onMenuClicked)
# self.editmenu.triggered.connect(self.onMenuClicked)
# self.helpmenu.triggered.connect(self.onMenuClicked)
self.menubar.triggered.connect(self.onMenuClicked) #这样写比较简洁
##############################################
#实例化QAction对象 Tool Bar创建
#打印
print_action=QtGui.QAction(QtGui.QIcon("printer.ico"),"打印",self)
print_action.setShortcut("Ctrl+P") # 快捷键设置
#保存
save_action=QtGui.QAction(QtGui.QIcon("save.png"),"保存",self)
save_action.setShortcut("Ctrl+S")
#创建toolbar对象
self.toolbar=self.addToolBar("工具条")
self.toolbar.addAction(print_action)
self.toolbar.addAction(save_action)
#工具栏信号槽,两种写法
#print_action.triggered.connect(self.printPaper)
#save_action.triggered.connect(self.saveFile)
self.toolbar.actionTriggered.connect(self.toolbtnClicked) #这样写比较简洁
################################################
#菜单槽函数
def onMenuClicked(self,action):
txt=action.text()
print(txt)
if txt=="打开":
self.openFile()
if txt=="保存":
self.saveFile()
#工具栏槽函数
def toolbtnClicked(self, action):
print(action.text())
#打印
def printPaper(self):
print("Press Ctrl+P to print paper.")
#保存
def saveFile(self):
#打开保存文件对话框
filename,filetype = QtWidgets.QFileDialog.getSaveFileName(self,"保存文件",os.path.abspath(os.path.dirname(__file__)),"文本文件(*.txt)")
#print(filename)
if filename:
with open(filename,"w",encoding="utf-8") as f:
d=self.textEdit.toPlainText()
print(d)
f.write(d)
#打开文本文件
def openFile(self):
#打开文件对话框
filename,filetype=QtWidgets.QFileDialog.getOpenFileName(self,"打开文件",os.path.abspath(os.path.dirname(__file__)),"文本文件(*.txt)")
#print(filename)
if filename:
with open(filename,encoding='utf-8') as f:
d=f.readlines()
for line in d:
print(line)
self.textEdit.append(line.strip())
if __name__ == "__main__":
app=QtWidgets.QApplication(sys.argv)
mywin=MainWindow()
mywin.show()
sys.exit(app.exec())
一个简单的实例,帮助理解菜单栏和工具栏的制作。
留言与评论(共有 0 条评论) “” |