Python-利用tkinter库编写一个exe伪恶意程序文件(上)

背景

在学校,闲得无聊想恶搞一下室友,制造一个无限弹窗(想弹多少就弹多少),保证让Ta破防。可是有时候室友的电脑上并没有搭建Python环境,怎么办呢?。不用担心,我们将会把Python初始文件编译为exe文件,让程序在没有Python环境的情况下也能正常运行。那么好,本章节将教你如何制作(详细到只需轻轻动几下手指)。(注:本章节共分为上,下两篇)

编程思路

我们试想一下,我们本次编程所需调用的Python库有哪些。这非常重要,正如我们解题一样:解题之前必须有详细或大致的思路,否则就是在浪费我们宝贵的时间。那么好,我们先从主题入手,tkinter库是主体;其次,多次的弹窗,我们需要多线程,因此threading库必不可少;为了伪造系统的随机性,我们需要random库;为了获取系统的真实信息,我们需要os,platform两个库;为了表现程序真实性,我们需要time库......至此,所有库都准备好了-tkinter,random,time,os,platform,threading。

 

import tkinter
import os
import threading
import time
import random
import platform

1,弹窗颜色

为了让弹窗拥有自己的“专属颜色”,我们需要在给弹窗上色前给它准备好“调色盘”。因此我们先给建立一个列表s,其内装有各种颜色(为了编程方便,本次编程将使用十种颜色:红,橙,黄,绿,蓝,紫,白,黑,金,灰)。如下所示:

s=['red','orange','yellow','green','blue','purple','white','black','gold','gray']

2,倒计时迭代器

由于我们设置的弹窗次数是由自己定的,因次弹窗次数虽然可以改变但是有限。因此我们需要一个弹窗次数的迭代器,用来纪录程序的弹窗次数。本次编程中我们将会把弹窗的过程表现得像倒计时一样,所以我们暂且将这个迭代器称为倒计时迭代器(我设置的弹窗次数为10,即begin)。如下所示:

begin=10
def count_down():
    seconds=[]
    for i in range(begin,0,-1):
        seconds.append(i)
    return seconds

迭代器将值添加进列表seconds中并返回列表seconds的最终结果。

3,主窗口

主窗口就是我们的弹窗。这里我们制定一个函数windows(),用来打开弹窗,接下来就需要利用上面所给的自定义count_down()函数对弹窗标题进行实时内容更新。我们利用while函数对倒计时迭代器的返回内容进行一对一匹配(即不让弹窗颜色始终保持原状)。接着就是tkinter弹窗标题进行设计,我们使用os模块的name属性来获取操作系统的名称,使用platform模块来获取与系统相关的更详细的信息:platform.system() -输出操作系统名称,如 'Linux' 或 'Windows';platform.release() -输出操作系统版本号;platform.version() -输出操作系统版本信息;platform.machine() -输出计算机类型......接下来是窗口大小的设计,本次编程我采用的是1160x600(大家可自行设置)。number为0~9的随机数(包含0,9),它将提供给我们列表s中颜色的编号(即赋给bg)。然后就是弹窗内容了,我们将倒计时迭代器所匹配得到的内容加入其中,设置文字类型为楷体,文字大小为30,长宽与上面相同。利用pack()函数进行固定,mainloop()函数执行。如下所示:

def windows():
    while len(count_down())>0:
        window = tkinter.Tk()
        window.title('{} {} {} {}警告!!!'.format(os.name,
                    platform.machine(),
                    platform.release(),
                    platform.version()))
        window.geometry("{}x{}".format(1160,600))
        number=random.randint(0,9)
        tkinter.Label(window,
             text='{}系统将在{}秒后自动关机'.format(platform.system(),count_down()[0])*1,
             font=('楷体',30),
             bg='{}'.format(s[number]),
             width=1160,
             height=600
             ).pack()
        window.mainloop()
        count_down().remove(count_down()[0])

4,执行单元

我们是设计一个while循环:begin作为与倒计时迭代器的匹配对象,将主窗口作为被执行对象执行。这里我们将调用time模块,让程序每执行一次弹窗弹出就休眠一秒,伪造程序正在进行强制自动关机前的倒计时的模样。如下所示:

while begin>0:
    mark=threading.Thread(target=windows)
    mark.start()
    time.sleep(1)
    begin-=1

完整代码如下:

import tkinter
import os
import threading
import time
import random
import platform

s=['red','orange','yellow','green','blue','purple','white','black','gold','gray']
begin=10
def count_down():
    seconds=[]
    for i in range(begin,0,-1):
        seconds.append(i)
    return seconds

def windows():
    while len(count_down())>0:
        window = tkinter.Tk()
        window.title('{} {} {} {}警告!!!'.format(os.name,
                    platform.machine(),
                    platform.release(),
                    platform.version()))
        window.geometry("{}x{}".format(1160,600))
        number=random.randint(0,9)
        tkinter.Label(window,
             text='{}系统将在{}秒后自动关机'.format(platform.system(),count_down()[0])*1,
             font=('楷体',30),
             bg='{}'.format(s[number]),
             width=1160,
             height=600
             ).pack()
        window.mainloop()
        count_down().remove(count_down()[0])


while begin>0:
    mark=threading.Thread(target=windows)
    mark.start()
    time.sleep(1)
    begin-=1

运行效果展示:

(下一篇我们将学习将Python初始文件编译为exe文件,使它在无Python环境的情况下也能正常运行)

期待你的交流指教,我是闪云-微星,我们下期再见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪云-微星

感谢大家的支持与鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值