从零开始的明日方舟python脚本创作(二)UI模块

引入的包

import tkinter as tk #python自带的
import threading#python自带的
import time#python自带的
import Core#概述中提到的自己写的核心模块,不涉及到相关功能可移除
import math#python自带的
import random#python自带的

tkinter主要用来绘制UI界面
threading开启一个新线程,主要用来刷新功能模块信息。
time开启线程睡眠时间
Core连接UI模块和功能模块
math主要对浮点数取整
random涉及到随机睡眠时间处理

具体实现

tkinter中其实有涉及到很多UI控件的使用,但是我只需要一个简陋的可点击的界面即可。所以内容比较粗糙,但是就自己使用的话,问题不大。

生成一个界面

window=tk.Tk()
window.geometry("240x480+1200+100")
window.title("ArkNights Controller")

生成了一个标题为 Arknights Controller,位置在(1200,100)(相对于桌面),宽240,高480的一个窗口。

加入UI控件

onClickStart=tk.Button(window,font=("微软雅黑",12),text="开始挂机",width=10,height=1,command=_clickStart_)
onClickStart.pack()

生成了一个可以点击的开始挂机按钮,点击执行的函数是“clickStart”。(函数的命名比较乱,没有统一,也懒得改了,惨!)。调用pack函数将按钮放置到父控件内部,可以带参数自定义设置位置,我这里就采用默认方式放置了。此按钮的文字信息被写死了,还可以用另一种方式设置文字信息。

btnROR=tk.StringVar()
btnROR.set('接受恢复理智')#btnROR.set('拒绝恢复理智')
onClickROR=tk.Button(window,font=("微软雅黑",12),textvariable=btnROR,width=10,height=1,command=_clickROR_)
onClickROR.pack()

以一个类似于字符串类型的变量,动态设置信息,相应的文字信息也就变化了,可以用来显示日志信息或者当前按钮的不同功能提示。

logInfo=tk.StringVar()
logNotifyInfo=tk.Label(window,font=("微软雅黑",12),textvariable=logInfo,width=10,height=50,)
logNotifyInfo.pack()

加入用来显示日志信息的一个文字显示区域。

创建线程

class CoreThread:
    def __init__(self, master):
        self.master = master
        self.starting()
        
    # 定义线程1
    def operateion(self):
        #随机睡眠时间
        interval=math.floor(random.random()*2+1)
        #state作为是否继续执行相关功能的一个开关,可以在界面随时停止脚本的运行
        while state:
            #核心函数该有的功能写在这里
            #code=Core.operate()
            time.sleep(interval) #间隔1S


    # 为方法开第一个单独的线程
    def starting(self):
        #启动线程1
        self.thread1 = threading.Thread(target=self.operateion)
        self.thread1.setDaemon(True)    #线程守护,即主进程结束后,此线程也结束。否则主进程结束子进程不结束
        self.thread1.start()

一个简略的界面脚本代码

import tkinter as tk #python自带的
import threading#python自带的
import time#python自带的
import Core#概述中提到的自己写的核心模块,不涉及到相关功能可移除
import math#python自带的
import random#python自带的

state=False
window=tk.Tk()
window.geometry("240x480+1200+100")
window.title("ArkNights Controller")
logInfo=tk.StringVar()
btnROR=tk.StringVar()

#定义了一个执行核心函数的线程类
class CoreThread:
    def __init__(self, master):
        self.master = master
        self.starting()
        
    # 定义线程1
    def operateion(self):
        #随机睡眠时间
        interval=math.floor(random.random()*2+1)
        #state作为是否继续执行相关功能的一个开关,可以在界面随时停止脚本的运行
        while state:
            #核心函数该有的功能写在这里
            #code=Core.operate()
            time.sleep(interval) #间隔1S


    # 为方法开第一个单独的线程
    def starting(self):
        #启动线程1
        self.thread1 = threading.Thread(target=self.operateion)
        self.thread1.setDaemon(True)    #线程守护,即主进程结束后,此线程也结束。否则主进程结束子进程不结束
        self.thread1.start()
        
def clickStart():
    pass
    
def clickStop():
    pass
    
def clickROR():
    pass    
    
def init():
    btnROR.set('接受恢复理智')
    logInfo.set('日志显示')
    onClickStart=tk.Button(window,font=("微软雅黑",12),text="开始挂机",width=10,height=1,command=clickStart)
    onClickStart.pack()
    onClickStop=tk.Button(window,font=("微软雅黑",12),text="停止挂机",width=10,height=1,command=clickStop)
    onClickStop.pack()
    onClickROR=tk.Button(window,font=("微软雅黑",12),textvariable=btnROR,width=10,height=1,command=clickROR)
    onClickROR.pack()
    logNotifyInfo=tk.Label(window,font=("微软雅黑",12),textvariable=logInfo,width=10,height=50,)
    logNotifyInfo.pack()
    coret = CoreThread(window)
    coret.starting()
    window.mainloop()
    
init()

线程这块的代码是看的其他博客改的,我自己目前在前端的开发中很少用到。这里只是搭建了一个较为简陋的UI界面以及提供了一个线程专门用来执行其他模块里面的功能。UI模块的内容就是这样了,以上,祝好!

你可能感兴趣的:(python,python)