139.Python-PySide6:菜单栏和工具栏的制作

本文主要通过简单的实例来学习一下菜单栏和工具栏的制作。

信号(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 条评论) “”
   
验证码:

相关文章

推荐文章