AI有点东西哈,前端界面写的是很漂亮哈。

本文展示了一个由AI生成的前端股票监控界面,采用PyQt5框架实现。界面包含顶部状态栏、中央数据表格、左侧导航标签、右侧信息面板和底部状态栏,支持窗口置顶和透明度调节。中央表格展示20支股票的15项关键数据,包括代码、名称、涨幅等,并配有自动刷新功能。界面设计美观专业,包含可移动的内部窗口,代码结构清晰易扩展,演示了AI在UI开发中的强大能力。

这是我写的前端UI
在这里插入图片描述
在这里插入图片描述

这是AI写的前端界面,确实很漂亮。并且内部窗口可以移动。看了之后,直呼牛气

在这里插入图片描述
在这里插入图片描述

AI写的前端界面代码详见下

import sys
import random
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
                             QLabel, QPushButton, QTableWidget, QTableWidgetItem, QSplitter,
                             QTabWidget, QStatusBar, QGroupBox, QDockWidget, QHeaderView)
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QColor, QFont, QIcon


class StockMonitor(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("股票盯盘小助手")
        self.setGeometry(100, 50, 1600, 900)
        self.initUI()

    def initUI(self):
        # 1. 创建顶部状态栏
        self.createTopBar()

        # 2. 创建中央表格
        self.createCentralTable()

        # 3. 创建左侧标签导航
        self.createLeftTabs()

        # 4. 创建右侧信息面板
        self.createRightDock()

        # 5. 创建底部状态栏
        self.createBottomBar()

        # 6. 设置窗口置顶和透明度
        self.setWindowFlags(self.windowFlags() | Qt.WindowStaysOnTopHint)
        self.setWindowOpacity(1)  # 95%透明度

        # 7. 定时刷新数据
        self.refresh_timer = QTimer(self)
        self.refresh_timer.timeout.connect(self.refresh_data)
        self.refresh_timer.start(5000)  # 5秒刷新一次

    def createTopBar(self):
        """创建顶部状态栏"""
        top_widget = QWidget()
        layout = QHBoxLayout()

        # 市场数据
        market_data = QLabel("上涨: 2055 下跌: 2920 涨停: 81 跌停: 1 炸板: 9")
        market_data.setStyleSheet("font-weight: bold; color: #333;")

        # 功能按钮
        btn_st = QPushButton("不看ST股")
        btn_refresh = QPushButton("刷新设置")
        btn_settings = QPushButton("关于/设置")
        btn_exit = QPushButton("退出")
        btn_exit.clicked.connect(self.close)

        # 日期显示
        date_label = QLabel("2025/7/27")

        layout.addWidget(market_data)
        layout.addWidget(btn_st)
        layout.addStretch()
        layout.addWidget(date_label)
        layout.addWidget(btn_refresh)
        layout.addWidget(btn_settings)
        layout.addWidget(btn_exit)

        top_widget.setLayout(layout)
        self.setMenuWidget(top_widget)

    def createCentralTable(self):
        """创建中央数据表格"""
        self.table = QTableWidget()
        self.table.setRowCount(20)
        self.table.setColumnCount(15)

        # 表头设置
        headers = ["代码", "名称", "连板", "涨停原因", "涨停价", "涨幅%",
                   "封单", "换手%", "流通", "总值", "首封", "封住", "开板", "几天", "涨"]
        self.table.setHorizontalHeaderLabels(headers)

        # 表格样式
        self.table.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive)
        self.table.setAlternatingRowColors(True)
        self.table.setStyleSheet("""
            QTableWidget { 
                font-size: 11px; 
                gridline-color: #e0e0e0;
            }
            QHeaderView::section {
                background-color: #f5f5f5;
                padding: 4px;
            }
        """)

        # 填充示例数据
        self.populate_table_data()

        self.setCentralWidget(self.table)

    def populate_table_data(self):
        """填充表格数据"""
        # 示例股票数据
        stock_data = [
            ["600519", "贵州茅台", "1", "白酒龙头", "1850.00", "+2.38",
             "1.2万手", "0.45", "1.2万亿", "2.3万亿", "09:30", "09:30", "0", "1", "↑"],
            ["000858", "五粮液", "1", "白酒", "175.50", "+1.85",
             "8500手", "0.78", "6800亿", "6800亿", "09:31", "09:31", "0", "1", "↑"],
            ["601318", "中国平安", "0", "保险", "48.25", "-0.62",
             "3200手", "0.32", "8800亿", "8800亿", "", "", "0", "0", "↓"],
            ["600036", "招商银行", "0", "银行", "35.80", "+0.28",
             "4500手", "0.25", "9000亿", "9000亿", "", "", "0", "0", "↑"],
            ["000001", "平安银行", "0", "银行", "12.35", "+0.41",
             "2800手", "0.45", "2400亿", "2400亿", "", "", "0", "0", "↑"],
            ["600900", "长江电力", "0", "电力", "24.80", "+1.02",
             "3800手", "0.18", "5400亿", "5400亿", "", "", "0", "0", "↑"],
            ["601888", "中国中免", "0", "免税", "98.60", "-1.25",
             "4200手", "0.85", "2000亿", "2000亿", "", "", "0", "0", "↓"],
            ["300750", "宁德时代", "0", "新能源", "210.50", "+3.15",
             "2.5万手", "1.25", "9200亿", "9200亿", "", "", "0", "0", "↑"],
            ["600276", "恒瑞医药", "0", "医药", "42.30", "+0.95",
             "3600手", "0.65", "2700亿", "2700亿", "", "", "0", "0", "↑"],
            ["000333", "美的集团", "0", "家电", "58.90", "+0.86",
             "2800手", "0.42", "4100亿", "4100亿", "", "", "0", "0", "↑"]
        ]

        # 填充数据
        for row, data in enumerate(stock_data):
            for col, value in enumerate(data):
                item = QTableWidgetItem(value)

                # 特殊样式
                if col == 5:  # 涨幅列
                    if "+" in value:
                        item.setForeground(QColor(255, 0, 0))  # 红色
                    elif "-" in value:
                        item.setForeground(QColor(0, 255, 0))  # 绿色
                self.table.setItem(row, col, item)

    def createLeftTabs(self):
        """创建左侧标签导航"""
        tab_widget = QTabWidget()
        tab_widget.setTabPosition(QTabWidget.West)
        tab_widget.setStyleSheet("QTabBar::tab { height: 50px; width: 80px; }")

        # 添加标签页
        tabs = ["涨停板", "炸板", "同花顺人气", "昨日涨停表现", "跌停板",
                "热点风", "同花情绪", "封板进阶统计", "盘前新闻",
                "TIX板块周期表", "游资龙虎榜", "游资动向", "核心龙虎榜"]

        for tab in tabs:
            tab_content = QWidget()
            layout = QVBoxLayout()
            layout.addWidget(QLabel(f"{tab}内容区域"))
            tab_content.setLayout(layout)
            tab_widget.addTab(tab_content, tab)

        # 停靠在左侧
        left_dock = QDockWidget("功能导航", self)
        left_dock.setWidget(tab_widget)
        left_dock.setFeatures(QDockWidget.DockWidgetMovable)
        self.addDockWidget(Qt.LeftDockWidgetArea, left_dock)

    def createRightDock(self):
        """创建右侧信息面板"""
        right_widget = QWidget()
        layout = QVBoxLayout()

        # 涨停原因分析
        reason_group = QGroupBox("涨停原因")
        reason_layout = QVBoxLayout()
        reasons = [("白酒", 2), ("新能源", 3), ("医药", 1), ("其他", 4)]

        for name, count in reasons:
            item = QLabel(f"{name}: {count}只")
            reason_layout.addWidget(item)

        # 热点分析
        hot_group = QGroupBox("热点分析")
        hot_layout = QVBoxLayout()
        hots = [("锂电池", 3), ("光伏", 2), ("人工智能", 4)]

        for name, count in hots:
            item = QLabel(f"{name}: {count}只")
            hot_layout.addWidget(item)

        # 持仓信息
        position_group = QGroupBox("持仓信息")
        position_layout = QVBoxLayout()
        positions = [
            ("总市值", "¥ 245,600.00"),
            ("今日盈亏", "+¥ 3,560.00"),
            ("持仓盈亏", "+¥ 12,450.00"),
            ("可用资金", "¥ 56,780.00")
        ]

        for name, value in positions:
            item = QLabel(f"{name}: {value}")
            position_layout.addWidget(item)

        reason_group.setLayout(reason_layout)
        hot_group.setLayout(hot_layout)
        position_group.setLayout(position_layout)

        layout.addWidget(reason_group)
        layout.addWidget(hot_group)
        layout.addWidget(position_group)
        layout.addStretch()

        right_widget.setLayout(layout)

        # 停靠在右侧
        right_dock = QDockWidget("分析面板", self)
        right_dock.setWidget(right_widget)
        self.addDockWidget(Qt.RightDockWidgetArea, right_dock)

    def createBottomBar(self):
        """创建底部状态栏"""
        status_bar = QStatusBar()

        # 提示信息
        tips = QLabel("提示: 按F12隐藏/显示窗口 | 右键菜单可设置提醒")
        tips.setStyleSheet("color: #888;")

        # 版权信息
        copyright = QLabel("股票盯盘小助手 v1.0 | By: 程序爱好者")
        warning = QLabel("股票有风险,投资需谨慎")

        status_bar.addWidget(tips, 1)
        status_bar.addPermanentWidget(copyright)
        status_bar.addPermanentWidget(warning)

        self.setStatusBar(status_bar)

    def refresh_data(self):
        """刷新数据 - 模拟实时更新"""
        # 随机更新几个股票的涨幅
        for i in range(5):
            row = random.randint(0, self.table.rowCount() - 1)
            col = 5  # 涨幅列

            if self.table.item(row, col):
                current_value = self.table.item(row, col).text()
                if current_value:
                    try:
                        # 解析当前涨幅值
                        change = float(current_value.strip('+').strip('%'))
                        # 随机生成新的涨幅 (-2% 到 +5%)
                        new_change = change + random.uniform(-0.5, 1.0)
                        new_change = round(new_change, 2)

                        # 设置新值并更新颜色
                        new_value = f"{'+' if new_change >= 0 else ''}{new_change}%"
                        self.table.item(row, col).setText(new_value)

                        if new_change > 0:
                            self.table.item(row, col).setForeground(QColor(255, 0, 0))
                        else:
                            self.table.item(row, col).setForeground(QColor(0, 255, 0))

                        # 检查是否达到提醒条件
                        self.check_price_alert(row, new_change)

                    except ValueError:
                        pass

    def check_price_alert(self, row, change):
        """检查是否达到价格提醒条件"""
        # 这里可以添加自定义的提醒逻辑
        # 例如:当涨幅超过5%时进行提醒
        if change > 5:
            stock_code = self.table.item(row, 0).text()
            stock_name = self.table.item(row, 1).text()
            print(f"提醒: {stock_name}({stock_code}) 涨幅超过5%!")
            # 实际应用中这里可以添加弹窗、声音提醒等

    def keyPressEvent(self, event):
        """快捷键处理"""
        if event.key() == Qt.Key_F12:
            # F12切换显示/隐藏
            if self.isVisible():
                self.hide()
            else:
                self.show()
        elif event.key() == Qt.Key_Escape:
            self.close()
        else:
            super().keyPressEvent(event)


if __name__ == "__main__":
    app = QApplication(sys.argv)

    # 设置全局样式
    app.setStyleSheet("""
        QMainWindow {
            background-color: #f8f9fa;
            font-family: "Microsoft YaHei";
        }
        QTableWidget {
            alternate-background-color: #f8f9fa;
        }
        QDockWidget {
            titlebar-close-icon: none;
            font-size: 12px;
        }
        QGroupBox {
            border: 1px solid #ddd;
            border-radius: 4px;
            margin-top: 1ex;
            font-weight: bold;
        }
        QPushButton {
            padding: 5px 10px;
            background-color: #f0f0f0;
            border: 1px solid #ccc;
            border-radius: 3px;
        }
        QPushButton:hover {
            background-color: #e0e0e0;
        }
    """)

    window = StockMonitor()
    window.show()
    sys.exit(app.exec_())

但是也仅仅只是停留在前端表面,后端逻辑都得自己写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值