PyQt5入門(11)メニューバーとツールバーとステータスバーと[プリンタの使用]と[印刷の表示]ダイアログボックス(PDFとしての出力を含む)

目次

1.メニューを作成して使用する

2.ツールバーを作成して使用します

3.ステータスバーを作成して使用する 

4.プリンターを使用する

5.印刷ダイアログボックスを表示します


1.メニューを作成して使用する

コード:

import sys
from PyQt5.QtWidgets import *


class Menu(QMainWindow):
    def __init__(self):
        super(Menu, self).__init__()
        bar=self.menuBar() #这个无自动补全,需要手敲

        file=bar.addMenu('文件') #顶层菜单栏
        # 文件的子菜单(法一:直接传文本,内部会自动创建动作QAction)
        file.addAction('新建')

        #法二:自己用动作来创建子菜单
        save=QAction('保存',self) #必须加self,代表在当前窗口加QAction
        save.setShortcut('Ctrl+S')#快捷键
        file.addAction(save)
        quit=QAction('退出',self)
        file.addAction(quit)

        edit=bar.addMenu('Edit')#顶层菜单
        edit.addAction('copy')#子菜单
        edit.addAction('paste')

        save.triggered.connect(self.process)

        self.resize(400,300)

    #槽函数
    #事件自动传给槽函数的一个实参,在本例具体指的是菜单项是否被选中,是一个bool类型的值
    def process(self,a):
        print(self.sender().text())#注意这里是self.而不是a.


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=Menu()
    main.show()
    sys.exit(app.exec_())


演算結果:

 

 2.ツールバーを作成して使用します

ツールバーは通常、次のようにメニューの下部にあります。

コード:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *


class Toolbar(QMainWindow):
    def __init__(self):
        super(Toolbar, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('工具栏例子')
        self.resize(300,200)

        tb1=self.addToolBar('File') #一行工具栏
        '''
        工具栏默认按钮:只显示图标,将文本作为悬停提示
        即鼠标悬停到图标上之后,提示就是下面的第二个参数
        '''
        new=QAction(QIcon('../picture/LinuxLogo.jpg'),'new',self)#self代表放在当前窗口上
        tb1.addAction(new)

        open=QAction(QIcon('../picture/WindowsLogo.jpg'),'open',self)
        tb1.addAction(open)

        save=QAction(QIcon('../picture/fairy.jpg'),'save',self)
        tb1.addAction(save)
        '''
        工具栏按钮有3中显示状态
        1.只显示图标
        2.只显示文本
        3.同时显示文本和图标
        '''
        # 设置工具栏按钮显示状态:既显示文本又显示图标
        tb1.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)#设置文本在图标的下方显示,还有好多,按ctrl查看自己试试

        tb2=self.addToolBar('File1')
        new1=QAction(QIcon('../picture/LinuxLogo.jpg'),'新建',self)
        tb2.addAction(new1)
        tb2.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)

        tb1.actionTriggered.connect(self.toolbtnpressed)
        tb2.actionTriggered.connect(self.toolbtnpressed)

    def toolbtnpressed(self,a):
        print('按下的工具栏按钮是',a.text())


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=Toolbar()
    main.show()
    sys.exit(app.exec_())


演算結果:

 

 

 3.ステータスバーを作成して使用する 

通常はウィンドウの下部にステータス情報を表示するために使用されます

例:

pycharmの右下隅

コード:

import sys
from PyQt5.QtWidgets import *


class Statusbar(QMainWindow):
    def __init__(self):
        super(Statusbar, self).__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('状态栏演示')
        self.resize(300,200)

        bar=self.menuBar() #顶层菜单栏
        file=bar.addMenu('File') #给菜单栏添加选项
        file.addAction('show')#子菜单

        file.triggered.connect(self.processTrigger)

        self.setCentralWidget(QTextEdit())#多行输入
        self.statusBar=QStatusBar()
        self.setStatusBar(self.statusBar)


    def processTrigger(self,q):
        if q.text()=='show':
            #在状态栏上显示信息
            self.statusBar.showMessage(q.text()+'菜单被点击了',5000)#信息显示5秒


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=Statusbar()
    main.show()
    sys.exit(app.exec_())


演算結果:

   [ファイル]で[表示]をクリックすると、下のステータスバーに5秒間情報が表示されます。

 

 

4.プリンターを使用する

出力は画像の形で出力され、プリンターに出力されます。

コード:

import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtGui,QtPrintSupport


class PrintSupport(QMainWindow):
    def __init__(self):
        super(PrintSupport, self).__init__()
        self.setGeometry(500,200,300,300)
        self.btn=QPushButton('打印QTextEdit控件中的内容',self)
        self.btn.setGeometry(20,20,260,30)# x,y,w,h
        self.editor=QTextEdit('默认文本',self)
        self.editor.setGeometry(20,60,260,200)

        self.btn.clicked.connect(self.print)

    def print(self):
        #打印机对象
        printer=QtPrintSupport.QPrinter()
        painter=QtGui.QPainter()
        #将绘制的目标重定向到打印机上
        painter.begin(printer)#painter画在begin的参数上,即printer上,若是self,则画在当前窗口上
        #获得多行输入控件editor的整个框架
        screen=self.editor.grab()
        #从(10,10)开始将screen上的文字输出到打印机上
        #drawPixmap:从图像文件中提取 Pixmap 并将其显示在指定位置
        painter.drawPixmap(10,10,screen)
        painter.end()
        print('print')


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=PrintSupport()
    main.show()
    sys.exit(app.exec_())

演算結果:

プリンターを接続して結果を確認する

 

5.印刷ダイアログボックスを表示します

コード:

import sys
from PyQt5.QtPrintSupport import QPrinter,QPageSetupDialog,QPrintDialog
from PyQt5.QtWidgets import *


class PrintDialog(QMainWindow):
    def __init__(self):
        super(PrintDialog, self).__init__()
        #打印机对象
        self.printer=QPrinter()
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 500, 400)
        self.setWindowTitle('打印对话框')

        self.editor = QTextEdit(self)
        self.editor.setGeometry(20, 20, 300, 270)

        self.openButton = QPushButton('打开文件', self)
        self.openButton.move(350, 20)

        self.settingButton = QPushButton('打印设置', self)
        self.settingButton.move(350, 50)

        self.printButton = QPushButton('打印文档', self)
        self.printButton.move(350, 80)

        self.openButton.clicked.connect(self.openFile)
        self.settingButton.clicked.connect(self.showSettingDialog)
        self.printButton.clicked.connect(self.showPrintDialog)

    #打开文件
    def openFile(self):
        fname=QFileDialog.getOpenFileName(self,'打开文本文件','./')
        print(fname)
        print(fname[0])
        if fname[0]:
            with open(fname[0],'r',encoding='utf-8',errors='ignore') as f:
                self.editor.setText(f.read())

    #显示打印设置对话框
    def showSettingDialog(self):
        printDialog=QPageSetupDialog(self.printer,self)
        printDialog.exec()

    #显示打印对话框
    def showPrintDialog(self):
        printdailog=QPrintDialog(self.printer,self)
        if QDialog.Accepted == printdailog.exec():
            #将editor里的文字输出到打印机中
            self.editor.print(self.printer)


if __name__=='__main__':
    app=QApplication(sys.argv)
    main=PrintDialog()
    main.show()
    sys.exit(app.exec_())

演算結果:

自分で試してみてください、それは楽しいです、プリンターはpdfファイルに出力できません 

 

 

 

 

 

おすすめ

転載: blog.csdn.net/weixin_44593822/article/details/113248533