基于Python編寫一個打印機批量打印隊列工具
1、背景介紹
有時候我們在批量打印文件的時候(包括word文檔、PPT、Excel、圖片),總會遇到電腦上打印機隊列打不開的情況,為此我們可以利用Python寫一個打印機批量打印隊列!
將想要打印的文件全部拖入其中,然后就可以批量依次打??!
2、庫的安裝
| 庫 | 用途 | 安裝 |
|---|---|---|
| PyQt5 | 界面設(shè)計 | pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple/ |
| os | 獲取絕對路徑 | 內(nèi)置庫無需安裝 |
3、核心代碼
def printFiles(self):
if self.listWidget.count() == 0:
QMessageBox.warning(self, '錯誤', '沒有文件可打印!')
return
printer = QPrinter()
printDialog = QPrintDialog(printer, self)
if printDialog.exec_() == QPrintDialog.Accepted:
for i in range(self.listWidget.count()):
file_path = self.listWidget.item(i).text()
if os.path.exists(file_path):
if file_path.lower().endswith('.pdf'):
os.startfile(file_path, 'print')
elif file_path.lower().endswith('.docx'):
QMessageBox.information(self, '打印', f'正在打印Word文件: {file_path}')
elif file_path.lower().endswith(('.jpg', '.png', '.bmp')):
os.startfile(file_path, 'print')
elif file_path.lower().endswith('.txt'):
QMessageBox.information(self, '打印', f'正在打印文本文件: {file_path}')
elif file_path.lower().endswith('.xlsx'):
QMessageBox.information(self, '打印', f'正在打印Excel文件: {file_path}')
else:
QMessageBox.warning(self, '錯誤', f'不支持直接打印的文件類型: {file_path}')
else:
QMessageBox.warning(self, '錯誤', f'文件不存在: {file_path}')
4、完整代碼
# -*- coding: UTF-8 -*-
'''
@Project :打印機隊列工具
@File :測試.py
@IDE :PyCharm
@Author :一晌小貪歡(278865463@qq.com)
@Date :2025/2/6 10:24
'''
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QListWidget, QPushButton, QFileDialog, QMessageBox
from PyQt5.QtCore import Qt
from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
import os
class FilePrinterApp(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle('文件批量打印工具')
self.setGeometry(900, 500, 400, 300)
layout = QVBoxLayout()
self.listWidget = QListWidget()
self.listWidget.setAcceptDrops(True)
self.listWidget.setDragEnabled(True)
self.listWidget.setDropIndicatorShown(True)
self.listWidget.dragEnterEvent = self.dragEnterEvent
self.listWidget.dragMoveEvent = self.dragMoveEvent
self.listWidget.dropEvent = self.dropEvent
layout.addWidget(self.listWidget)
self.printButton = QPushButton('打印')
self.printButton.clicked.connect(self.printFiles)
layout.addWidget(self.printButton)
self.setLayout(layout)
def dragEnterEvent(self, event):
if event.mimeData().hasUrls():
event.accept()
else:
event.ignore()
def dragMoveEvent(self, event):
if event.mimeData().hasUrls():
event.accept()
else:
event.ignore()
def dropEvent(self, event):
if event.mimeData().hasUrls():
event.setDropAction(Qt.CopyAction)
event.accept()
for url in event.mimeData().urls():
file_path = url.toLocalFile()
# 支持更多文件類型
if file_path.lower().endswith(('.pdf', '.docx', '.txt', '.xlsx', '.jpg', '.png', '.bmp')):
self.listWidget.addItem(file_path)
else:
QMessageBox.warning(self, '錯誤', '不支持的文件類型!')
else:
event.ignore()
def printFiles(self):
if self.listWidget.count() == 0:
QMessageBox.warning(self, '錯誤', '沒有文件可打??!')
return
printer = QPrinter()
printDialog = QPrintDialog(printer, self)
if printDialog.exec_() == QPrintDialog.Accepted:
for i in range(self.listWidget.count()):
file_path = self.listWidget.item(i).text()
if os.path.exists(file_path):
# 這里可以使用不同的方法來打印不同類型的文件
# 例如,對于PDF文件,可以使用系統(tǒng)的命令來打印
# 對于圖片文件,可以通過Pillow庫來打印,或者使用操作系統(tǒng)的圖片查看器打印
if file_path.lower().endswith('.pdf'):
# 例如,使用Windows上的os.startfile命令來打印PDF文件
os.startfile(file_path, 'print')
elif file_path.lower().endswith('.docx'):
# 對于Word文件,可能需要通過外部工具來打?。ū热鏜icrosoft Word或LibreOffice命令行工具)
QMessageBox.information(self, '打印', f'正在打印Word文件: {file_path}')
elif file_path.lower().endswith(('.jpg', '.png', '.bmp')):
# 對于圖片文件,使用系統(tǒng)默認圖片查看器打印
os.startfile(file_path, 'print')
elif file_path.lower().endswith('.txt'):
# 對于文本文件,可以將內(nèi)容轉(zhuǎn)成打印的格式
QMessageBox.information(self, '打印', f'正在打印文本文件: {file_path}')
elif file_path.lower().endswith('.xlsx'):
# 對于Excel文件,可以通過Excel程序進行打印
QMessageBox.information(self, '打印', f'正在打印Excel文件: {file_path}')
else:
QMessageBox.warning(self, '錯誤', f'不支持直接打印的文件類型: {file_path}')
else:
QMessageBox.warning(self, '錯誤', f'文件不存在: {file_path}')
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = FilePrinterApp()
ex.show()
sys.exit(app.exec_())
效果圖

到此這篇關(guān)于基于Python編寫一個打印機批量打印隊列工具的文章就介紹到這了,更多相關(guān)Python批量打印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python六種基本數(shù)據(jù)類型及常用函數(shù)展示
這篇文章主要為大家介紹了python六種基本數(shù)據(jù)類型及常用函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-11-11
tensorflow模型繼續(xù)訓(xùn)練 fineturn實例
今天小編就為大家分享一篇tensorflow模型繼續(xù)訓(xùn)練 fineturn實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01
關(guān)于使用python對mongo多線程更新數(shù)據(jù)
這篇文章主要介紹了關(guān)于使用python對mongo多線程更新數(shù)據(jù),文中提供了詳細的代碼說明,實際使用時,需要根據(jù)具體情況進行調(diào)整和優(yōu)化,需要的朋友可以參考下2023-04-04
pyMySQL SQL語句傳參問題,單個參數(shù)或多個參數(shù)說明
這篇文章主要介紹了pyMySQL SQL語句傳參問題,單個參數(shù)或多個參數(shù)說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
使用python進行PostgreSQL數(shù)據(jù)庫連接全過程
這篇文章主要介紹了使用python進行PostgreSQL數(shù)據(jù)庫連接的相關(guān)資料,包括安裝psycopg2模塊、使用PyCharm進行圖形化連接、代碼連接數(shù)據(jù)庫的方法、以及如何執(zhí)行DML和DQL操作,需要的朋友可以參考下2025-03-03
用django-allauth實現(xiàn)第三方登錄的示例代碼
這篇文章主要介紹了用django-allauth實現(xiàn)第三方登錄的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06
Python實現(xiàn)判斷給定列表是否有重復(fù)元素的方法
這篇文章主要介紹了Python實現(xiàn)判斷給定列表是否有重復(fù)元素的方法,列舉了2種列表判斷方法,涉及Python針對列表的遍歷、統(tǒng)計、判斷等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04

