Python实现自动挂机脚本(GUI & 打包)

博客原文【不好吃の蛋蛋】
完整代码

Python实现自动挂机脚本(基础篇)中我们实现了简单的挂机脚本,但这样的脚本运行起来比较麻烦,也没有好看的界面。本篇中,我们将使用tkinter设计GUI界面,并用pyinstaller打包成.exe文件
先上图

tkinter

tkinter是Python内置的GUI设计界面,对小白来说容易上手,你也可以尝试用pyqt或者wx
关于tkinter可以看一下莫烦教程

首先创建一个窗口,并设置必要信息

import tkinter as tk
from icon import img
window = tk.Tk()  # 创建一个窗口
window.title('奴良小轩v0.1')
window.geometry('240x480+120+30')  # 窗口的位置以及大小

# 设置图标
with open('tmp.ico', 'wb+') as fp:
    fp.write(base64.b64decode(img))
window.iconbitmap('tmp.ico')
os.remove('tmp.ico')
# 设置图标

label = tk.Label(window, font=('微软雅黑', 12),
                 text='请将PC端阴阳师调节与小宝等高')  # 显示一段文本
label.pack()

设置图标

默认情况下,窗口图标是红色的TK,想修改则使用.iconbitmap(path)方法,但是,在实际使用踩坑了。因为后面我会使用pyinstaller打包,因为找不到path路径运行程序会报错,找了好久才找到这个错误。
解决方案是先将图标读取并写入ico.py文件,调用.iconbitmap(path)时读取ico.py,代码如下:

import base64
open_icon = open('yaodao.ico', 'rb')
b64str = base64.b64encode(open_icon.read())
open_icon.close()
write_data = "img = '%s'" % b64str
f = open('icon.py', 'w+')
f.write(write_data)
f.close()

功能选择

# Radiobutton #
fun_var = tk.IntVar()
fun_text = ''


def print_selection():
    global fun_text
    if fun_var.get() == 1:
        fun_text = '寮突破'
    elif fun_var.get() == 2:
        fun_text = '御灵、业原火'
    elif fun_var.get() == 3:
        fun_text = '魂十队员(未完成)'
    elif fun_var.get() == 4:
        fun_text = '魂十队长(未完成)'
    elif fun_var.get() == 5:
        fun_text = '狗粮队员(未完成)'
    label.config(text='功能选择: ' + fun_text)

rb1 = tk.Radiobutton(window, text='寮突破', font=('微软雅黑', 10),
                     variable=fun_var, value=1, command=print_selection)
rb1.place(x=15, y=30)
rb2 = tk.Radiobutton(window, text='御灵、业原火', font=('微软雅黑', 10),
                     variable=fun_var, value=2, command=print_selection)
rb2.place(x=15, y=60)
rb3 = tk.Radiobutton(window, text='魂十队员', font=('微软雅黑', 10),
                     variable=fun_var, value=3, command=print_selection)
rb3.place(x=15, y=90)
rb4 = tk.Radiobutton(window, text='魂十队长', font=('微软雅黑', 10),
                     variable=fun_var, value=4, command=print_selection)
rb4.place(x=15, y=120)
rb5 = tk.Radiobutton(window, text='狗粮队员', font=('微软雅黑', 10),
                     variable=fun_var, value=5, command=print_selection)
rb5.place(x=15, y=150)
# Radiobutton #

开始按钮

  • start_mission()中定义了每一个功能所要执行的函数,注意的是,独立功能需要放在一个线程中执行,不然界面会被阻塞卡死
  • 全局变量is_start用来控制功能的执行与停止
  • click()函数用来改变按钮显示以及锁定功能选择
# button start#
rb_list = [rb1, rb2, rb3, rb4, rb5]
button_var = tk.StringVar()
button_var.set('开始')
is_click = False


def start_mission():
    global is_start
    if fun_var.get() == 1:
        text.insert('end', strftime('%H:%M:%S', localtime()) + ' 开始执行寮突破\n')
        text.see('end')  # 自动显示底部
        window_size = get_window_info()
        if window_size:  # 打开了阴阳师
            window.geometry('240x480+%d+%d' % (window_size[0]-240, window_size[1]))
            is_start = True
            thread1 = threading.Thread(target=liao_tupo, args=(window_size,))
            thread1.start()

    elif fun_var.get() == 2:
        text.insert('end', strftime('%H:%M:%S', localtime()) + ' 开始执行御灵、业原火\n')
        text.see('end')  # 自动显示底部
        window_size = get_window_info()
        if window_size:  # 打开了阴阳师
            window.geometry('240x480+%d+%d' % (window_size[0] - 240, window_size[1]))
            is_start = True
            thread2 = threading.Thread(target=yu_ling, args=(window_size,))
            thread2.start()

    elif fun_var.get() == 3:
        text.insert('end', strftime('%H:%M:%S', localtime()) + ' 魂十队员功能未开发\n')
        text.see('end')  # 自动显示底部
    elif fun_var.get() == 4:
        text.insert('end', strftime('%H:%M:%S', localtime()) + ' 魂十队长功能未开发\n')
        text.see('end')  # 自动显示底部
    elif fun_var.get() == 5:
        text.insert('end', strftime('%H:%M:%S', localtime()) + ' 狗粮队员功能未开发\n')
        text.see('end')  # 自动显示底部


def stop_mission():
    global is_start
    is_start = False
    text.insert('end', strftime('%H:%M:%S', localtime()) + ' 停止执行\n')
    text.see('end')  # 自动显示底部


def click():
    global is_click
    if not is_click:
        is_click = True
        button_var.set('停止')
        label.config(text=fun_text + ' 已经开始')
        for rb in rb_list:  # 将选项锁定
            rb.config(state='disabled')
        button_adjust.config(state='disabled')
        start_mission()
    else:
        is_click = False
        button_var.set('开始')
        label.config(text=fun_text + ' 已经停止')
        for rb in rb_list:
            rb.config(state='active')
        button_adjust.config(state='active')
        stop_mission()

button = tk.Button(window, textvariable=button_var, width=10,
                   height=1, command=click)
button.place(x=140, y=60)
# button start#

文本显示

import ScrolledText
text = ScrolledText.ScrolledText(window, width=29, height=17)  # 滚动输出文本框
# text = tk.Text(window, width=29, height=17)  # 输出文本框
text.place(x=15, y=180)

注意的一点是,再每次输出文本的时候希望自动显示低端,这时需要在insert之后执行text.see('end')

Pyinstaller打包

pyinstaller -F -w -i ./yaodao.ico ./tk_gui.py
  • -F表示输出单文件exe
  • -w表示不显示命令行
  • -i设置图标

更多参数设置详见这里

至此全部搞定,打开exe时记得右键管理员权限打开

  • 20
    点赞
  • 210
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Python自动挂机脚本是使用Python编写的一个程序,可以用于自动执行特定的任务或操作,而无需人工干预。 使用Python编写自动挂机脚本可以帮助我们提高工作效率,减轻重复繁琐的操作,节省时间和精力。 Python自动挂机脚本的应用范围非常广泛。例如,在网络游戏中,我们可以编写自动挂机脚本来完成一些重复性的任务,如打怪、练级、收集资源等。在网页数据爬取中,我们可以使用自动挂机脚本来定时获取特定网站的信息,并将数据保存到本地或进行进一步的分析。此外,在自动化测试中,我们可以借助自动挂机脚本来模拟用户操作,自动化执行测试用例。 编写一个简单的Python自动挂机脚本通常包括以下步骤: 1. 导入必要的库和模块。 2. 连接到目标应用程序或游戏。 3. 设置自动挂机的条件和触发器,如时间间隔、特定关卡等。 4. 编写相应的代码来执行自动化任务,例如模拟鼠标点击、键盘输入等。 5. 循环执行自动化任务直到达到预设的条件或触发器。 6. 保存结果或输出报告,可选的可以将相关数据保存到本地文件或数据库中。 总而言之,Python自动挂机脚本是一种方便实用的工具,可以帮助我们自动执行任务,提高工作效率。编写一个高效稳定的自动挂机脚本需要一定的编程经验和对目标应用程序的了解,同时需要遵守相关法律法规和道德规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值