172 lines
6.0 KiB
Python
Executable File
172 lines
6.0 KiB
Python
Executable File
#!/usr/bin/env python3
|
||
# 使用系统默认的 python3 运行
|
||
###########################################################################################
|
||
# 作者:gfdgd xi
|
||
# 版本:1.4.3
|
||
# 更新时间:2021年9月11日
|
||
# 感谢:anbox、deepin 和 统信
|
||
# 基于 Python3 的 tkinter 构建
|
||
###########################################################################################
|
||
#################
|
||
# 引入所需的库
|
||
#################
|
||
import os
|
||
import threading
|
||
import time
|
||
import json
|
||
import ttkthemes
|
||
import subprocess
|
||
import updatekiller
|
||
import tkinter as tk
|
||
import tkinter.ttk as ttk
|
||
|
||
# 读取文本文档
|
||
def readtxt(path: "路径")->"读取文本文档":
|
||
f = open(path, "r") # 设置文件对象
|
||
str = f.read() # 获取内容
|
||
f.close() # 关闭文本对象
|
||
return str # 返回结果
|
||
|
||
###########################
|
||
# 程序信息
|
||
###########################
|
||
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
|
||
information = json.loads(readtxt(programPath + "/information.json"))
|
||
programUrl = information["Url"][0]
|
||
version = information["Version"]
|
||
goodRunSystem = information["System"]
|
||
aaptVersion = subprocess.getoutput("aapt version")
|
||
about = '''介绍 :一个基于 Python3 的 tkinter 制作的 UEngine 运行器,在新版本Deepin/UOS发布后,可以在应用商店安装部分官方已适配的安卓应用,对爱好者来说,不能自己安装APK软件包始终差点意思,本程序可以为Deepin/UOS上的UEngine安卓运行环境安装自定义APK软件包,并能发送安装的APK包启动菜单到桌面或系统菜单。
|
||
|
||
版本 :{}
|
||
|
||
适用平台 :{}
|
||
|
||
程序官网 :{}
|
||
|
||
©2021-{}'''.format(version, goodRunSystem, tk.TkVersion, programUrl, time.strftime("%Y"))
|
||
tips = "\n".join(information["Tips"])
|
||
updateThingsString = "\n".join(information["Update"])
|
||
title = "UEngine 运行器 {}".format(version)
|
||
updateTime = information["Time"]
|
||
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
|
||
iconPath = "{}/runner.png".format(os.path.split(os.path.realpath(__file__))[0])
|
||
desktop = "/opt/apps/uengine-runner/UengineAndroidProgramList.desktop"
|
||
desktopName = "UengineAndroidProgramList.desktop"
|
||
contribute = "\n".join(information["Contribute"])
|
||
useProgram = ""
|
||
threading.Thread(target=useProgram).start()
|
||
|
||
# add sub window
|
||
#添加窗口开启关闭开关,防止重复开启
|
||
windowflag = "close"
|
||
|
||
def UseProgram():
|
||
global useProgram
|
||
useProgram = '''1、UEngine:{}
|
||
2、python3:{}
|
||
3、tkinter:{}
|
||
4、aapt:{}
|
||
5、dpkg:{}
|
||
6、mkdir:{}
|
||
7、echo
|
||
8、chmod:{}
|
||
9、adb:{}
|
||
10、deepin 终端:{}'''.format(subprocess.getoutput("uengine version"),
|
||
subprocess.getoutput("python3 --version"),
|
||
tk.TkVersion,
|
||
subprocess.getoutput("aapt version"),
|
||
subprocess.getoutput("dpkg --version"),
|
||
subprocess.getoutput("mkdir --version"),
|
||
subprocess.getoutput("chmod --version"),
|
||
subprocess.getoutput("adb version"),
|
||
subprocess.getoutput("deepin-terminal -v"))
|
||
|
||
def showhelp():
|
||
|
||
#define window and frame and button label
|
||
#
|
||
global windowflag
|
||
if windowflag == "close":
|
||
helpwindow=tk.Tk()
|
||
helpwindow.resizable(0, 0)
|
||
helpwindow.title("帮助")
|
||
|
||
|
||
# get screen width and height
|
||
screen_width = helpwindow.winfo_screenwidth()
|
||
screen_height = helpwindow.winfo_screenheight()
|
||
# calculate position x and y coordinates 假设主窗口大小固定 570x236像素 ,设置窗口位置为屏幕中心。
|
||
winwith=550
|
||
winhigh=700
|
||
x = (screen_width/2) - (winwith/2)
|
||
y = (screen_height/2) - (winhigh/2)
|
||
|
||
helpwindow.geometry("550x700"+"+{:.0f}+{:.0f}".format(x, y))
|
||
helpwindow.iconphoto(False, tk.PhotoImage(file=iconPath))
|
||
|
||
style = ttkthemes.ThemedStyle(helpwindow)
|
||
style.set_theme("breeze")
|
||
|
||
|
||
|
||
Frmroot=ttk.Frame(helpwindow)
|
||
FrmMenu = ttk.Frame(Frmroot)
|
||
FrmText = ttk.Frame(Frmroot)
|
||
|
||
LabFrmText=ttk.LabelFrame(FrmText,text="帮助",height=800,borderwidth=3)
|
||
HelpStr = tk.StringVar()
|
||
HelpStr.set(tips)
|
||
LabText = ttk.Label(LabFrmText, textvariable=HelpStr,width=55)
|
||
LabText.config(wraplength=350)
|
||
|
||
def on_closing():
|
||
global windowflag
|
||
windowflag = "close"
|
||
print(windowflag)
|
||
helpwindow.destroy()
|
||
|
||
|
||
|
||
# define button func
|
||
def ChgLog():
|
||
HelpStr.set(updateThingsString)
|
||
def ChgAbout():
|
||
HelpStr.set(about)
|
||
def ChgDep():
|
||
if useProgram == "":
|
||
BtnZujian.configure(state=tk.DISABLED)
|
||
return
|
||
HelpStr.set(useProgram)
|
||
def ChgCon():
|
||
HelpStr.set(contribute)
|
||
def ChgTips():
|
||
HelpStr.set(tips)
|
||
LabText.config(wraplength=350)
|
||
|
||
BtnReadme = ttk.Button(FrmMenu, text="使用说明",width=14,command=ChgTips)
|
||
BtnLog = ttk.Button(FrmMenu, text="更新内容",width=14,command=ChgLog)
|
||
BtnZujian = ttk.Button(FrmMenu, text="程序依赖的组件",width=14,command=ChgDep)
|
||
BtnGongxian = ttk.Button(FrmMenu, text="有贡献的开发者",width=14,command=ChgCon)
|
||
BtnAbout = ttk.Button(FrmMenu, text="关于",width=14,command=ChgAbout)
|
||
|
||
|
||
#layout
|
||
FrmMenu.grid(row=0,column=0,sticky=tk.NW)
|
||
BtnReadme.grid(row=0,column=0,sticky=tk.NW,padx=3)
|
||
BtnLog.grid(row=1,column=0,sticky=tk.NW,padx=3)
|
||
BtnZujian.grid(row=2,column=0,sticky=tk.NW,padx=3)
|
||
BtnGongxian.grid(row=3,column=0,sticky=tk.NW,padx=3)
|
||
BtnAbout.grid(row=4,column=0,sticky=tk.NW,padx=3)
|
||
|
||
FrmText.grid(row=0,column=1,sticky=tk.NW)
|
||
LabFrmText.grid(row=0,column=0,sticky=tk.NW,padx=3,pady=3)
|
||
LabText.grid(row=0,column=0,sticky=tk.NW)
|
||
|
||
Frmroot.pack()
|
||
windowflag = "open"
|
||
print(windowflag)
|
||
helpwindow.mainloop()
|
||
#helpwindow.protocol("WM_DELETE_WINDOW", on_closing)
|
||
showhelp()
|