from PySide6.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLineEdit, QPushButton, QLabel, QComboBox, QProgressBar, QTextEdit, QFrame) from PySide6.QtCore import Qt, QRect from PySide6.QtGui import QPixmap, QPainter, QPen, QColor, QBrush class DropZone(QFrame): def __init__(self, parent=None): super().__init__(parent) self.setAcceptDrops(True) self.file_selected = None self.setMinimumSize(400, 200) self.setStyleSheet(""" QFrame { border: 2px dashed #aaa; border-radius: 8px; background-color: #fafafa; } QFrame:hover { border-color: #3498db; background-color: #ecf0f1; } """) def dragEnterEvent(self, event): if event.mimeData().hasUrls(): event.acceptProposedAction() self.setStyleSheet(""" QFrame { border: 2px dashed #3498db; border-radius: 8px; background-color: #d5e8f7; } """) def dragLeaveEvent(self, event): self.setStyleSheet(""" QFrame { border: 2px dashed #aaa; border-radius: 8px; background-color: #fafafa; } """) def dropEvent(self, event): if event.mimeData().hasUrls(): urls = event.mimeData().urls() if urls: self.file_selected = urls[0].toLocalFile() event.acceptProposedAction() self.parent().on_file_selected(self.file_selected) def mousePressEvent(self, event): from PySide6.QtWidgets import QFileDialog filepath, _ = QFileDialog.getOpenFileName(self, "选择文件") if filepath: self.file_selected = filepath self.parent().on_file_selected(filepath) class UiCreator: @staticmethod def create_main_ui(window): window.setWindowTitle("临时文件传输客户端") window.setMinimumSize(400, 350) window.resize(500, 450) central_widget = QWidget() window.setCentralWidget(central_widget) layout = QVBoxLayout(central_widget) layout.setContentsMargins(20, 20, 20, 20) layout.setSpacing(15) server_layout = QHBoxLayout() server_label = QLabel("服务器:") window.server_input = QLineEdit("http://localhost:5000") window.save_btn = QPushButton("保存") window.save_btn.setFixedWidth(60) server_layout.addWidget(server_label) server_layout.addWidget(window.server_input) server_layout.addWidget(window.save_btn) layout.addLayout(server_layout) window.drop_zone = DropZone(window) window.drop_label = QLabel("📁 拖放文件到此处\n或点击选择文件") window.drop_label.setAlignment(Qt.AlignCenter) drop_layout = QVBoxLayout(window.drop_zone) drop_layout.addWidget(window.drop_label) layout.addWidget(window.drop_zone) action_layout = QHBoxLayout() expiry_label = QLabel("过期时间:") window.expiry_combo = QComboBox() window.expiry_combo.addItems(["1h", "24h", "7d"]) window.expiry_combo.setCurrentText("24h") window.upload_btn = QPushButton("上传文件") window.upload_btn.setFixedWidth(100) action_layout.addWidget(expiry_label) action_layout.addWidget(window.expiry_combo) action_layout.addStretch() action_layout.addWidget(window.upload_btn) layout.addLayout(action_layout) window.progress_bar = QProgressBar() window.progress_bar.setVisible(False) window.progress_bar.setTextVisible(True) layout.addWidget(window.progress_bar) window.result_area = QTextEdit() window.result_area.setVisible(False) window.result_area.setReadOnly(True) window.result_area.setMaximumHeight(80) window.result_area.setStyleSheet(""" QTextEdit { background-color: #f0f0f0; border: 1px solid #ddd; border-radius: 4px; padding: 8px; } """) layout.addWidget(window.result_area) window.copy_btn = QPushButton("复制链接") window.copy_btn.setVisible(False) window.copy_btn.setFixedWidth(80) copy_layout = QHBoxLayout() copy_layout.addStretch() copy_layout.addWidget(window.copy_btn) layout.addLayout(copy_layout) window.status_label = QLabel("状态: 就绪") window.status_label.setStyleSheet("color: #666; font-size: 12px;") layout.addWidget(window.status_label) return central_widget