当前位置: 首页 > news >正文

写着玩的程序:pycharm实现无限弹窗程序(非病毒程序,仅整蛊使用)

运行环境

PyCharm 2023.2.1

python3.11

具体内容

源代码

import tkinter as tk
from tkinter import messagebox
import threadingclass PopupGenerator:def __init__(self):self.root = tk.Tk()self.root.geometry("200x120")self.root.title("无限弹窗")self.root.protocol("WM_DELETE_WINDOW", lambda: None)  # 用户不可关闭弹窗一self.common_style = {"font": ("华文新魏", 14)}self.label = tk.Label(self.root, text="恭喜你打开了这个程序", **self.common_style, fg="red")self.label.pack(pady=20)self.close_program_button = tk.Button(self.root, text="关闭程序", command=self.try_detox, **self.common_style,bg="green", fg="white")self.close_program_button.pack(pady=10)self.popup_count = 0self.detox_attempts = 0self.popup_positions = []  # 存储已存在弹窗的位置信息self.generate_popup()def generate_popup(self):if self.popup_count < 20:popup = tk.Toplevel(self.root)popup.title("无限弹窗")popup.geometry("200x120")# 检查已存在弹窗的位置,设置新弹窗的位置x, y = self.calculate_popup_position(popup.winfo_reqwidth(), popup.winfo_reqheight())popup.geometry(f"+{x}+{y}")popup_label = tk.Label(popup, text="多试一下", fg="blue", **self.common_style)popup_label.pack(pady=20)popup.protocol("WM_DELETE_WINDOW", self.on_popup_close)self.popup_count += 1threading.Timer(1, self.generate_popup).start()def calculate_popup_position(self, width, height):# 计算新弹窗的位置,避免重叠x_offset, y_offset = 25, 25x = self.root.winfo_x() + x_offset + len(self.popup_positions) * x_offsety = self.root.winfo_y() + y_offset + len(self.popup_positions) * y_offset# 存储新弹窗的位置信息self.popup_positions.append((x, y))return x, ydef on_popup_close(self):self.generate_additional_popup()def generate_additional_popup(self):additional_popup = tk.Toplevel(self.root)additional_popup.title("无限弹窗")additional_popup.geometry("200x120")# 检查已存在弹窗的位置,设置新弹窗的位置x, y = self.calculate_popup_position(additional_popup.winfo_reqwidth(), additional_popup.winfo_reqheight())additional_popup.geometry(f"+{x}+{y}")additional_popup_label = tk.Label(additional_popup, text="并没有用", fg="purple", **self.common_style)additional_popup_label.pack(pady=20)def try_detox(self):self.detox_attempts += 1if self.detox_attempts <= 10:messagebox.showinfo("温馨提示", f"你不会觉得点了 {self.detox_attempts} 次就有用吧")else:messagebox.showinfo("没想到啊", f"你居然坚持点了 {self.detox_attempts}次")self.root.destroy()if __name__ == "__main__":popup_generator = PopupGenerator()popup_generator.root.mainloop()

运行结果如图

点击运行时

点击关闭程序按钮(未点击足够次数)

点击关闭程序按钮(点击次数足够)

关闭多试一下弹窗(仅并没有用弹窗可关闭)

关闭程序的方法

1、任务管理器结束任务

2、点击足够次数的关闭程序

注意事项

1、没有什么技术含量,仅娱乐使用

相关文章:

  • PALWORLD linux centos7开服教程
  • 持续集成工具Jenkins的使用之安装篇(一)
  • vue和react的差异梳理
  • AWS认证SAA-C03每日一题
  • 【UE5】第一次尝试项目转插件(Plugin)的时候,无法编译
  • cad二次开发autolisp(一)
  • canvas绘制旋转的椭圆花
  • angular-tree-component组件中实现特定节点自动展开
  • package.json包版本控制方法介绍
  • 2024年 复习 HTML5+CSS3+移动web 笔记 之CSS遍
  • [pytorch入门] 3. torchvision中的transforms
  • 【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(一):基础知识考察
  • CSS 蜡烛效果
  • Python皮卡丘
  • 界面控件DevExpress ASP.NET Data Grid组件 - 可快速处理各类型数据!(一)
  • 2017-08-04 前端日报
  • Android交互
  • css的样式优先级
  • DataBase in Android
  • ES6语法详解(一)
  • happypack两次报错的问题
  • Java IO学习笔记一
  • js写一个简单的选项卡
  • Laravel Telescope:优雅的应用调试工具
  • Laravel核心解读--Facades
  • Mybatis初体验
  • passportjs 源码分析
  • 当SetTimeout遇到了字符串
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 聊聊flink的BlobWriter
  • 普通函数和构造函数的区别
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 一些css基础学习笔记
  • 阿里云移动端播放器高级功能介绍
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​如何在iOS手机上查看应用日志
  • #pragma once与条件编译
  • (C语言)二分查找 超详细
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)php投票系统 毕业设计 121500
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Mysql的优化设置
  • ***原理与防范
  • ../depcomp: line 571: exec: g++: not found
  • .NET 4.0中的泛型协变和反变
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .net下的富文本编辑器FCKeditor的配置方法
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [BJDCTF2020]The mystery of ip
  • [BZOJ5250][九省联考2018]秘密袭击(DP)