趣玩双色球APP-PyQt5实现

开发环境及软件主要功能说明

开发环境
win10 + Vscode + Python10.5-64_bit

使用的python库
requests,bs4,pandas,PyQt5

主要功能说明:

  1. 数据库更新,保存,另存为功能
  2. 过滤显示,根据期数,开奖日期,开间期号过滤
  3. 数据预测,随机预测,统计预测等
  4. 界面UI纯代码实现
  5. nuitka, pyinstaller 打包python 文件为exe方法

软件框架图

软件主要功能界面

APP使用视频演示

趣玩双色球app使用


 

语言大模型在这个APP干嘛了

        我一直在疑惑一个问题,现在大模型在软件实现上能够给我们什么帮助。为了得到一个答案我写了这个软件。有不懂或者不想写的代码我直接问百度文心一言,不懂就问。下面是我问的几个问题给出的答案。

PyQt 实现多线程

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget  
from PyQt5.QtCore import QThread, pyqtSignal  
import time  class Worker(QThread):  # 定义一个信号,当任务完成时发出  finished = pyqtSignal()  def run(self):  # 在这里执行你的长时间运行的任务  time.sleep(5)  # 模拟长时间运行的任务  self.finished.emit()  # 任务完成时发出信号  class MainWindow(QMainWindow):  def __init__(self):  super().__init__()  self.initUI()  # 创建工作线程实例  self.worker = Worker()  # 连接工作线程的 finished 信号到一个槽函数  self.worker.finished.connect(self.on_finished)  # 启动工作线程  self.worker.start()  def initUI(self):  layout = QVBoxLayout()  btn = QPushButton('Start Thread', self)  btn.clicked.connect(self.start_thread)  # 注意:这里只是为了演示,实际上我们已经在 __init__ 中启动了线程  layout.addWidget(btn)  central_widget = QWidget()  central_widget.setLayout(layout)  self.setCentralWidget(central_widget)  def start_thread(self):  # 注意:通常不需要在这里启动线程,除非你想在按钮点击时启动新线程  # 但在这个例子中,我们已经在 __init__ 中启动了线程  pass  def on_finished(self):  # 当工作线程的任务完成时,这个槽函数会被调用  print("Worker thread finished!")  if __name__ == '__main__':  app = QApplication([])  ex = MainWindow()  ex.show()  app.exec_()

pands 处理json数据

from pandas.io.json import json_normalize  # 假设您有一个包含嵌套 JSON 对象的列表  
data = [  {'name': 'John', 'info': {'age': 30, 'city': 'New York'}},  {'name': 'Jane', 'info': {'age': 25, 'city': 'Los Angeles'}}  
]  # 使用 json_normalize 来展开嵌套的数据  
df = json_normalize(data, 'info', ['name'])

pyqt中viem item的自定义显示

from PyQt5.QtWidgets import QApplication, QTreeView, QStyledItemDelegate  
from PyQt5.QtGui import QPainter, QBrush, QColor  
from PyQt5.QtCore import Qt, QStandardItemModel, QStandardItem  class CustomDelegate(QStyledItemDelegate):  def paint(self, painter: QPainter, option: QStyleOptionViewItem, index: QModelIndex):  # 在这里,你可以根据 index.data() 或其他条件来更改渲染逻辑  # 例如,我们简单地改变背景色  if index.data(Qt.DisplayRole) == "Special Item":  painter.save()  painter.setBackground(QBrush(QColor("lightblue")))  painter.drawRect(option.rect)  painter.drawText(option.rect, Qt.AlignCenter, index.data(Qt.DisplayRole))  painter.restore()  else:  super().paint(painter, option, index)  app = QApplication([])  
model = QStandardItemModel()  
model.appendRow([QStandardItem("Regular Item")])  
model.appendRow([QStandardItem("Special Item")])  view = QTreeView()  
view.setModel(model)  delegate = CustomDelegate(view)  
view.setItemDelegate(delegate)  
view.show()  app.exec_()

PyQt 如何实现自定义toolbar

import sys  
from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QAction, QToolButton  class CustomMainWindow(QMainWindow):  def __init__(self):  super().__init__()  # 创建一个工具栏  self.toolbar = QToolBar("Custom Toolbar")  self.addToolBar(self.toolbar)  # 添加一个自定义的QAction  self.action_open = QAction("Open", self)  self.action_open.triggered.connect(self.on_open)  self.toolbar.addAction(self.action_open)  # 添加一个自定义的QToolButton  self.button_save = QToolButton(self)  self.button_save.setText("Save")  self.button_save.clicked.connect(self.on_save)  self.toolbar.addWidget(self.button_save)  def on_open(self):  print("Open action triggered")  def on_save(self):  print("Save button clicked")  if __name__ == "__main__":  app = QApplication(sys.argv)  window = CustomMainWindow()  window.show()  sys.exit(app.exec_())

文心一言实现自定义控件 

'''PyQt 实现一个控件,控件有2行,第1行包含2个label和一个文本框,文本框在2个标签之间。第2行有2个按钮,按钮四角有点弧度,第2行第1个按钮背景为红色
'''
import sys  
from PyQt5.QtWidgets import QWidget, QLabel, QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout  
from PyQt5.QtCore import Qt  class CustomWidget(QWidget):  def __init__(self):  super().__init__()  # 初始化布局  self.initUI()  def initUI(self):  # 第一行布局  hline_layout = QHBoxLayout()  # 创建两个标签  label1 = QLabel('Label 1')  label2 = QLabel('Label 2')  # 添加到水平布局  hline_layout.addWidget(label1)  # 创建文本框  line_edit = QLineEdit()  # 添加文本框到水平布局  hline_layout.addWidget(line_edit)  # 继续添加第二个标签(尽管它可能不在文本框和第一个标签之间,但在这个例子中它后面)  hline_layout.addWidget(label2)  # 第二行布局  vline_layout = QVBoxLayout()  # 创建两个按钮,并设置样式表以添加圆角  button1 = QPushButton('Red Button')  button1.setStyleSheet('QPushButton { background-color: red; border-radius: 10px; }')  button2 = QPushButton('Another Button')  button2.setStyleSheet('QPushButton { border-radius: 10px; }')  # 添加到垂直布局  vline_layout.addWidget(button1)  vline_layout.addWidget(button2)  # 主布局  main_layout = QVBoxLayout()  # 将两个布局添加到主布局中  main_layout.addLayout(hline_layout)  main_layout.addLayout(vline_layout)  # 设置主窗口的布局  self.setLayout(main_layout)  # 设置窗口标题和大小  self.setWindowTitle('Custom Widget')  self.setGeometry(300, 300, 300, 200)  if __name__ == '__main__':  app = QApplication(sys.argv)  ex = CustomWidget()  ex.show()  sys.exit(app.exec_())

           从体验结果来看,文心一言基本能够给出个可以跑的基本功能代码,代码注释也比较详细。借助大模型工具在我的这个软件中可以减少30%左右的工作量。 

        大模型能够提供基本的轮子,但是想要做到产品化的程度,大模型还有一段路要走。当前环境下,软件开发还是要对基本的框架,理论熟悉,基本功扎实,才能游刃有余的使用大模型来提高我们的工作效率。

将python 打包为exe文件

#  nuitka
```
将python代码先转成c代码,然后调用本地编译器编译成本地机器码1. 安装nuitka 
pip install nuitka2.配置本地c编译器,默认使用的mingw编译器路径如下:编译器csdn下载地址: https://download.csdn.net/download/wllw7176/89374134将winlibs-x86_64-posix-seh-gcc-13.2.0-llvm-16.0.6-mingw-w64msvcrt-11.0.1-r1.zip 解压的mingw64文件夹放到上面路径c:\Users\lwua\AppData\Local\Nuitka\Nuitka\Cache\downloads\gcc\x86_64\13.2.0-16.0.6-11.0.1-msvcrt-r1\3.执行如下打包程序,编译时间较长
nuitka.bat --standalone  --onefile  --disable-console --enable-plugin=pyqt5 app_main_window.py
```# pyinstaller
```将pthon代码转为字节码,python解释器及依赖库,都会打包到最终的exe文件中,这种方式的exe 本质还是python解释器将字节码翻译成机器码,执行效率较低
1. pyinstaller 
pip install pyinstaller2.打包程序
pyinstaller.exe --onefile  -i pics/logo_xn.ico  app_main_window.py```

代码共享

        在开源软件开发的江湖中,只给人看Demo,不给源码是不道德的。我这个人呢,做不到大爱无疆,但是小爱奉献还是有的。要源码的直接去这里下载趣玩双色球app源码。

趣玩APP的口号

       玩趣玩吗-必须的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865016.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AndroidStudio activity-1.8.0.aar依赖报错

在使用Androidstudio自帶的創建activity及配套 xml時,構建項目失敗,報錯内容: Null extracted folder for artifact: ResolvedArtifact(componentIdentifierandroidx.activity:activity:1.8.0, variantNamenull, artifactFileC:\Users\hhhh\.…

Golang 开发实战day15 - Input info

🏆个人专栏 🤺 leetcode 🧗 Leetcode Prime 🏇 Golang20天教程 🚴‍♂️ Java问题收集园地 🌴 成长感悟 欢迎大家观看,不执着于追求顶峰,只享受探索过程 Golang 开发实战day15 - 用户…

AMEYA360:类比半导体推出36V超低输入偏置电流高性能通用运算放大器

在精密信号处理领域,每一次技术创新都意味着性能的飞跃与应用的拓展。上海类比半导体技术有限公司(以下简称“类比半导体”)凭借其在模拟及数模混合芯片设计领域的深厚积累,今日正式宣布推出其全新OPJ301x系列超低输入偏置电流高性能通用运算放大器。该系…

Canvas 指纹:它是什么以及如何绕过它

什么是 Canvas 指纹? 网络浏览器在执行其功能时会收集各种信息。当这些信息中的某些被用于识别网站用户时,这被称为浏览器指纹。 浏览器指纹包括以下有关浏览器的信息:设备型号、浏览器类型和版本、操作系统 (OS)、屏幕分辨率、时区、p0p 文…

AI大模型对话(上下文)缓存能力

互联网应用中,为了提高数据获取的即时性,产生了各种分布式缓存组件,比如Redis、Memcached等等。 大模型时代,除非是免费模型,否则每次对话都会花费金钱来进行对话,对话是不是也可以参照缓存的做法来提高命…

java面试-SpringAOP

1.SpringAOP的使用 你了解Spring AOP 吗? 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 2.SpringAOP的原理 我们可以将ASM生成的类进行缓存,这样能解决生成的类比较低效的问题。 ASM是可以操作字节码的框架。 真实实现类和…

去中心化社会的崛起:探索区块链对社会结构的影响

随着区块链技术的发展和应用,我们正逐步迈向一个去中心化的社会结构。本文将深入探讨区块链技术如何影响社会结构,从经济、政治到文化等多个方面进行探索和分析,揭示其可能带来的革命性变革。 1. 区块链技术的基本原理回顾 1.1 分布式账本与…

黑芝麻科技A1000简介

文章目录 1. A1000 简介2. 感知能力评估3. 竞品对比4. 系统软件1. A1000 简介

Latex写作工具整理(Overleaf)

一、公式(MathType) 先用MathType编辑好公式,再粘贴到Overleaf 预置-剪切和复制预置-选择“MathML或Tex"-确定 1.行内公式 粘贴到overleaf里面把两侧的" \["替换成"$" $ A $ 2.单行公式 \begin{equation}\labe…

ROS2 rosbag2记录仪

rosbag2类似于行车记录仪,录制一段话题数据,录制完成后可以多次发布出来进行测试和实验,也可以将话题数据分享给别人用于验证算法等。 1.启动talker服务 ros2 run demo_nodes_cpp talker 2.记录话题数据 chatter ros2 bag record /chatte…

将多个SQL查询合并的两种方式

说明:单个简单查询是非常容易的,但是为了避免多次访问访问数据库,我们会尽可能通过表关联将业务所需要的字段值一次性查出来。而有时候不太清楚表之间的关联关系(这取决于对业务的熟悉程度),或者实际情况就…

2024年工程项目管理者的软件指南:11款必试进度管理工具

本文将分享11个值得关注的工程项目进度管理软件:Worktile、Fieldwire、Procore、Buildxact、InEight、Contractor Foreman、Housecall Pro、ClickUp、RedTeam Go、Visual Planning、B2W Schedule。 在竞争激烈的建筑行业,工程项目的进度管理是项目成功的…

超简洁Django个人博客系统(适合初学者)

一、环境介绍 Django4.2.13Markdown3.3.4PyMySQL1.1.1Python3.8PyCharm 2023.1.2 (Professional Edition) 二、功能简介 用户登录 通过在pycharm终端执行以下命令创建超级管理员。python manage.py create createsuperuser 创建完成后再通过新建的超级管理员账号进行登录 …

CentOS7.9下yum升级Apache HTTP Server2.4.6到2.4.60

CentOS7.9系统默认的Apache版本 在CentOS7.9上,如果使用yum安装Apache HTTP Server是最多到2.4.6版本的,这是因为el7下官方仓库的最高版本就是2.4.6,证据如下: $ yum info httpd ...... Installed Packages Name : httpd…

深入解析:Java爬虫的本质是什么?

深入解析:Java爬虫的本质是什么? 引言: 随着互联网的快速发展,获取网络数据已成为许多应用场景中的重要需求。而爬虫作为一种自动化程序,能够模拟人类浏览器的行为,从网页中提取所需信息,成为了…

ROS2使用C++开发动作通信

1.开发接口节点 cd chapt4_ws/ ros2 pkg create robot_control_interfaces --build-type ament_cmake --destination-directory src --maintainer-name "joe" --maintainer-email "1027038527qq.com" mkdir -p src/robot_control_interfaces/action touch…

ATFX汇市:欧元区CPI与失业率数据同时发布,欧元或迎剧烈波动

ATFX汇市:CPI数据是中央银行决策货币政策的主要依据,失业率数据是中央银行判断劳动力市场健康状况的核心指标。欧元区的CPI和失业率数据将在今日17:00同时发布,在欧央行6月6日降息一次的背景下,两项数据将显著影响国际市场对欧央行…

02归并排序——分治递归

02_归并排序_——分治_递归_ #include <stdio.h>void merge(int arr[], int l, int m, int r) {int n1 m -l 1;int n2 r -m;//创建临时数组int L[n1], R[n2];for(int i 0; i < n1; i){L[i] arr[l i];}for(int j 0; j < n2; j){R[j] arr[m 1 j];}int i …

mp4格式怎么转换成mp3格式,简鹿格式工厂轻松转换

mp4格式怎么转换成mp3格式&#xff1f;MP3主要关注音频内容的压缩与传播&#xff0c;而MP4则是一个更为复杂的多媒体容器&#xff0c;能够包含视频、音频等多种媒体流&#xff0c;适合于现代多样化的媒体消费场景。 而有一些视频中的音频可能深受用户喜爱&#xff0c;可是如何…

分布式锁的详细解析

分布式锁工具 一、背景 当前问题&#xff1a;项目中会使用到分布式锁用于定时任务、接口幂等性处理&#xff0c;但是分布式锁的实现较简单&#xff0c;会出现执行超时、加解锁失败等场景。分布式锁都有哪些实现&#xff0c;他们的优劣势是什么呢&#xff1f; 二、现有技术 分…