Files
temp-file-trans/temp_file_trans_client/ui.py
2026-05-24 22:45:30 +08:00

134 lines
4.9 KiB
Python

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