import sysfrom PyQt6.QtWidgets import ( QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit, QComboBox, QTableWidget, QTableWidgetItem, QHeaderView, QGroupBox, QCheckBox, QTextEdit, QFrame)from PyQt6.QtCore import Qtfrom PyQt6.QtGui import QFontclass PrintToolWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("调用WPS批量打印文件工具(欢迎关注微信公众号:码海听潮)") self.setMinimumSize(800, 700) self.setAcceptDrops(True) self.setup_ui() def setup_ui(self): central = QWidget() self.setCentralWidget(central) main_layout = QVBoxLayout(central) # ==================== 文件夹选择区域 ==================== folder_group = QGroupBox("📁 文件夹选择") folder_layout = QHBoxLayout(folder_group) self.folder_input = QLineEdit() self.folder_input.setPlaceholderText("选择文件夹路径,或直接拖拽文件夹到此窗口...") folder_layout.addWidget(self.folder_input) self.browse_btn = QPushButton("浏览...") folder_layout.addWidget(self.browse_btn) self.scan_btn = QPushButton("🔍 扫描文件夹") self.scan_btn.setStyleSheet("background-color: #4CAF50; color: white; padding: 5px 15px; font-weight: bold;") folder_layout.addWidget(self.scan_btn) main_layout.addWidget(folder_group) # ==================== 打印设置区域 ==================== settings_group = QGroupBox("⚙️ 打印设置") settings_layout = QHBoxLayout(settings_group) settings_layout.addWidget(QLabel("文件类型:")) self.ext_input = QLineEdit() self.ext_input.setPlaceholderText("请输入扩展名,多个用逗号分隔,如: .pdf,.doc,.docx,.txt") self.ext_input.setText(".pdf,.doc,.docx,.txt") self.ext_input.setMinimumWidth(300) settings_layout.addWidget(self.ext_input) # 常用扩展名快捷按钮 quick_btn_layout = QHBoxLayout() for name, exts in [("文档", ".pdf,.doc,.docx,.txt"), ("图片", ".jpg,.png,.gif"), ("表格", ".xls,.xlsx"), ("全部", ".pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.txt,.jpg,.png")]: btn = QPushButton(name) btn.setFixedWidth(50) btn.clicked.connect(lambda checked, e=exts: self.ext_input.setText(e)) quick_btn_layout.addWidget(btn) settings_layout.addLayout(quick_btn_layout) settings_layout.addStretch() main_layout.addWidget(settings_group) # ==================== 文件列表区域 ==================== file_group = QGroupBox("📄 文件列表") file_layout = QVBoxLayout(file_group) # 顶部信息栏 info_layout = QHBoxLayout() self.file_count_label = QLabel("共 0 个文件") self.file_size_label = QLabel("总大小: 0 B") self.file_type_label = QLabel("") info_layout.addWidget(self.file_count_label) info_layout.addWidget(self.file_size_label) info_layout.addWidget(self.file_type_label) info_layout.addStretch() # 全选/取消全选按钮 self.select_all_btn = QPushButton("全选") self.select_all_btn.setFixedWidth(60) info_layout.addWidget(self.select_all_btn) self.deselect_all_btn = QPushButton("取消全选") self.deselect_all_btn.setFixedWidth(80) info_layout.addWidget(self.deselect_all_btn) file_layout.addLayout(info_layout) # 文件表格 self.file_table = QTableWidget() self.file_table.setColumnCount(3) self.file_table.setHorizontalHeaderLabels(["选择", "文件名", "类型"]) self.file_table.horizontalHeader().setSectionResizeMode(0, QHeaderView.ResizeMode.ResizeToContents) self.file_table.horizontalHeader().setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch) self.file_table.horizontalHeader().setSectionResizeMode(2, QHeaderView.ResizeMode.ResizeToContents) # 表头文字居中 self.file_table.horizontalHeaderItem(1).setTextAlignment(Qt.AlignmentFlag.AlignCenter) # 启用行选择和多项选择 self.file_table.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows) self.file_table.setSelectionMode(QAbstractItemView.SelectionMode.ExtendedSelection) self.file_table.setAlternatingRowColors(True) # 设置表格样式:所有单元格居中 self.file_table.setStyleSheet(""" QTableWidget::item { text-align: center; } QTableWidget::item:selected { background-color: #2196F3; color: white; } """) file_layout.addWidget(self.file_table) main_layout.addWidget(file_group, 1) # ==================== 打印控制区域 ==================== control_group = QGroupBox("🖨️ 打印控制") control_layout = QHBoxLayout(control_group) self.print_btn = QPushButton("开始打印") self.print_btn.setStyleSheet("background-color: #2196F3; color: white; padding: 8px 20px; font-weight: bold;") control_layout.addWidget(self.print_btn) self.cancel_btn = QPushButton("取消打印") self.cancel_btn.setEnabled(False) self.cancel_btn.setStyleSheet("background-color: #f44336; color: white;") control_layout.addWidget(self.cancel_btn) control_layout.addWidget(QLabel("打印间隔:")) self.interval_spin = QComboBox() self.interval_spin.addItems(["0.5", "1", "2", "3", "5"]) self.interval_spin.setCurrentText("5") control_layout.addWidget(self.interval_spin) control_layout.addWidget(QLabel("秒")) control_layout.addStretch() main_layout.addWidget(control_group) # ==================== 日志区域 ==================== log_group = QGroupBox("📝 打印日志") log_layout = QVBoxLayout(log_group) self.log_text = QTextEdit() self.log_text.setReadOnly(True) self.log_text.setMaximumHeight(180) self.log_text.setFont(QFont("Consolas", 9)) log_layout.addWidget(self.log_text) self.clear_log_btn = QPushButton("清空日志") log_layout.addWidget(self.clear_log_btn) main_layout.addWidget(log_group)def main(): app = QApplication(sys.argv) app.setStyle("Fusion") window = PrintToolWindow() window.show() sys.exit(app.exec())if __name__ == '__main__': main()