新增Python判断

This commit is contained in:
gfdgd xi 2022-09-03 19:21:00 +08:00
parent 020e1d27db
commit 9b7a24ff38
28 changed files with 301 additions and 97 deletions

View File

@ -56,6 +56,7 @@ build:
cp -rv AutoConfig.py deb/opt/apps/deepin-wine-runner cp -rv AutoConfig.py deb/opt/apps/deepin-wine-runner
cp -rv UI/*.py deb/opt/apps/deepin-wine-runner/UI cp -rv UI/*.py deb/opt/apps/deepin-wine-runner/UI
cp -rv InstallDll.py deb/opt/apps/deepin-wine-runner cp -rv InstallDll.py deb/opt/apps/deepin-wine-runner
cp -rv Model deb/opt/apps/deepin-wine-runner
dpkg -b deb spark-deepin-wine-runner.deb dpkg -b deb spark-deepin-wine-runner.deb

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,5 @@
Package: spark-deepin-wine-runner Package: spark-deepin-wine-runner
Version: 2.1.0 Version: 2.1.0-1
Maintainer: gfdgd xi <3025613752@qq.com>, 为什么您不喜欢熊出没和阿布呢 Maintainer: gfdgd xi <3025613752@qq.com>, 为什么您不喜欢熊出没和阿布呢
Homepage: https://gitee.com/gfdgd-xi/deep-wine-runner Homepage: https://gitee.com/gfdgd-xi/deep-wine-runner
Architecture: all Architecture: all
@ -8,9 +8,14 @@ Depends: python3, python3-pil, python3-pil.imagetk, python3-pyquery, deepin-term
Section: utils Section: utils
Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52 Conflicts: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52
Replaces: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52 Replaces: spark.deepin-venturi-setter, spark-deepin-wine5-application-packer, spark-deepin-wine-runner-52
Installed-Size: 24928 Installed-Size: 24948
Description: gfdgd xi、为什么您不喜欢熊出没和阿布呢 制作的 wine 运行器 Description: gfdgd xi、为什么您不喜欢熊出没和阿布呢 制作的 wine 运行器
更新内容: 2.1.0-1 更新内容:
※1、删除多余图标
※2、修复将打包文件生成目录设置为 / 等重要目录导致删库的问题
3、修复了打包器浏览按钮闪退、生成的 postrm 有误的问题
4、支持在输入信息时自动生成 deb 保存路径
2.1.0 更新内容:
※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中 ※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中
※2、Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 内,可以不依赖 Wine一般不推荐把 Wine 打包入内,推荐用依赖的形式),并支持设置自定义依赖和生成模板 ※2、Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 内,可以不依赖 Wine一般不推荐把 Wine 打包入内,推荐用依赖的形式),并支持设置自定义依赖和生成模板
※3、开始初步多语言支持 ※3、开始初步多语言支持

View File

@ -23,4 +23,4 @@ fi
# 设置目录权限,让用户可读可写,方便后续删除组件 # 设置目录权限,让用户可读可写,方便后续删除组件
chmod 777 -R /opt/apps/deepin-wine-runner chmod 777 -R /opt/apps/deepin-wine-runner
# 向服务器返回安装数加1不显示内容且忽略错误 # 向服务器返回安装数加1不显示内容且忽略错误
curl https://304626p927.goho.co/spark-deepin-wine-runner/Install.php?Version=2.1.0 -s > /dev/null | true curl https://304626p927.goho.co/spark-deepin-wine-runner/Install.php?Version=2.1.0-1 -s > /dev/null | true

View File

@ -19,6 +19,15 @@ import urllib.parse as parse
def CleanTerminal(): def CleanTerminal():
os.system("clear") os.system("clear")
print('''
mm mmmm m
## mmmm mmmm #" " mm#mm mmm m mm mmm
# # #" "# #" "# "#mmm # #" "# #" " #" #
#mm# # # # # "# # # # # #""""
# # ##m#" ##m#" "mmm#" "mm "#m#" # "#mm"
# #
" "
''')
print("本软件源来自腾讯软件管家,只会下载文件后缀为“.exe”的文件") print("本软件源来自腾讯软件管家,只会下载文件后缀为“.exe”的文件")
print("请输入要搜索的内容如果要结束请输入“exit”或点击右上角“×”关闭") print("请输入要搜索的内容如果要结束请输入“exit”或点击右上角“×”关闭")
print("无法保证从这里下载的安装包能正常安装/运行") print("无法保证从这里下载的安装包能正常安装/运行")
@ -37,15 +46,6 @@ if __name__ == "__main__":
sys.exit() sys.exit()
CleanTerminal() CleanTerminal()
print('''
mm mmmm m
## mmmm mmmm #" " mm#mm mmm m mm mmm
# # #" "# #" "# "#mmm # #" "# #" " #" #
#mm# # # # # "# # # # # #""""
# # ##m#" ##m#" "mmm#" "mm "#m#" # "#mm"
# #
" "
''')
while True: while True:
search = input(">") search = input(">")
if search.replace(" ", "").replace("\n", "") == "": if search.replace(" ", "").replace("\n", "") == "":
@ -54,7 +54,12 @@ if __name__ == "__main__":
break # 结束程序 break # 结束程序
# 获取初步 API # 获取初步 API
try:
apiReturn = json.loads(requests.get(f"https://s.pcmgr.qq.com/tapi/web/searchcgi.php?type=search&callback=searchCallback&keyword={parse.quote(search)}&page=1&pernum=30").text[:-2][15:]) apiReturn = json.loads(requests.get(f"https://s.pcmgr.qq.com/tapi/web/searchcgi.php?type=search&callback=searchCallback&keyword={parse.quote(search)}&page=1&pernum=30").text[:-2][15:])
except:
input("无法连接服务器,按回车键继续")
CleanTerminal()
continue
option = 0 option = 0
downloadUrl = [] downloadUrl = []
if not "list" in apiReturn: if not "list" in apiReturn:

View File

@ -17,6 +17,7 @@ import traceback
import requests import requests
import PyQt5.QtWidgets as QtWidgets import PyQt5.QtWidgets as QtWidgets
from UI.AutoConfig import * from UI.AutoConfig import *
from Model import *
urlSources = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/auto" urlSources = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/auto"
lists = [] lists = []
@ -60,18 +61,20 @@ class Connect:
QtWidgets.QMessageBox.critical(window, "错误", "无法获取配置文件") QtWidgets.QMessageBox.critical(window, "错误", "无法获取配置文件")
return return
# 执行脚本 # 执行脚本
process = QtCore.QProcess() OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '/tmp/wine-runner-auto-config.wsh' --system")
process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", "/tmp/wine-runner-auto-config.wsh", "--system"]) #process = QtCore.QProcess()
process.waitForFinished() #process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", "/tmp/wine-runner-auto-config.wsh", "--system"])
#process.waitForFinished()
def OpenFile_Triggered(): def OpenFile_Triggered():
path = QtWidgets.QFileDialog.getOpenFileName(window, "提示", homePath, "配置文件(*.sh *.wsh);;全部文件(*.*)") path = QtWidgets.QFileDialog.getOpenFileName(window, "提示", homePath, "配置文件(*.sh *.wsh);;全部文件(*.*)")
if path[0] == "": if path[0] == "":
return return
# 执行脚本 # 执行脚本
process = QtCore.QProcess() OpenTerminal(f"env WINE='{wine}' WINEPREFIX='{wineprefix}' '{programPath}/ConfigLanguareRunner.py' '{path[0]}' --system")
process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", path[0], "--system"]) #process = QtCore.QProcess()
process.waitForFinished() #process.start(f"{programPath}/launch.sh", ["deepin-terminal", "-e", "env", f"WINE={wine}", f"WINEPREFIX={wineprefix}", f"{programPath}/ConfigLanguareRunner.py", path[0], "--system"])
#process.waitForFinished()
# 读取文本文档 # 读取文本文档
def readtxt(path): def readtxt(path):

View File

@ -11,6 +11,7 @@ import os
import sys import sys
import time import time
import json import json
import platform
import traceback import traceback
import PyQt5.QtWidgets as QtWidgets import PyQt5.QtWidgets as QtWidgets
# 读取文本文档 # 读取文本文档
@ -36,7 +37,9 @@ programEnv = [
["($THANK)", thankText], ["($THANK)", thankText],
["($MAKER)", "gfdgd xi、为什么您不喜欢熊出没和阿布呢"], ["($MAKER)", "gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢"], ["($COPYRIGHT)", f"©2020~{time.strftime('%Y')} gfdgd xi、为什么您不喜欢熊出没和阿布呢"],
["($?)", "0"] ["($?)", "0"],
["($PLATFORM)", platform.system()],
["($DEBUG)", str(int("--debug" in sys.argv))]
] ]
readOnlyEnv = [ readOnlyEnv = [
"($DANGER)", "($DANGER)",
@ -46,8 +49,13 @@ readOnlyEnv = [
"($THANK)", "($THANK)",
"($MAKER)", "($MAKER)",
"($COPYRIGHT)", "($COPYRIGHT)",
"($?)" "($?)",
"($SYSTEM)",
"($DEBUG)"
] ]
def Debug():
if "--debug" in sys.argv:
traceback.print_exc()
class Command(): class Command():
# 有风险的命令 # 有风险的命令
@ -86,7 +94,8 @@ class Command():
"winecfg", "winecfg",
"winver", "winver",
"changeversion", "changeversion",
"stopdll" "stopdll",
"cat"
] ]
def __init__(self, commandString: str) -> None: def __init__(self, commandString: str) -> None:
@ -237,6 +246,10 @@ class Command():
return os.system(command) return os.system(command)
def Bat(self) -> int: def Bat(self) -> int:
# Windows 直接转换为以 cmd 运行
if platform.system() == "Windows":
# 直接调用 Bash 函数
return self.Bash()
command = ["WINEPREFIX='($WINEPREFIX)'", "($WINE)"] command = ["WINEPREFIX='($WINEPREFIX)'", "($WINE)"]
for i in programEnv: for i in programEnv:
for k in range(len(command)): for k in range(len(command)):
@ -298,6 +311,15 @@ class Command():
self.command = ["reg", f"z:/{programPath}/ChangeWineBottonVersion/{self.command[1]}.reg"] self.command = ["reg", f"z:/{programPath}/ChangeWineBottonVersion/{self.command[1]}.reg"]
return self.Reg() return self.Reg()
def Cat(self):
try:
file = open(self.command[1], "r")
print(file.read())
file.close()
except:
print("文件读取错误")
Debug()
# 可以运行的命令的映射关系 # 可以运行的命令的映射关系
# 可以被使用的命令的映射 # 可以被使用的命令的映射
commandList = { commandList = {
@ -328,7 +350,8 @@ class Command():
"winecfg": Winecfg, "winecfg": Winecfg,
"winver": Winver, "winver": Winver,
"changeversion": ChangeVersion, "changeversion": ChangeVersion,
"stopdll": StopDll "stopdll": StopDll,
"cat": Cat
} }
# 参数数列表 # 参数数列表
@ -360,9 +383,23 @@ class Command():
"winecfg": [0], "winecfg": [0],
"winver": [0], "winver": [0],
"changeversion": [1], "changeversion": [1],
"stopdll": [1] "stopdll": [1],
"cat": [1]
} }
windowsUnrun = [
"createbotton",
"installdll",
"installmono",
"installgecko",
"winecfg",
"stopdll",
"changeversion",
"enabledopengl",
"disbledopengl",
"installdxvk",
"installfont",
"installsparkcorefont"
]
# 解析 # 解析
def __init__(self, command: list, wineBottonPath: str, wine: str) -> int: def __init__(self, command: list, wineBottonPath: str, wine: str) -> int:
self.wineBottonPath = wineBottonPath self.wineBottonPath = wineBottonPath
@ -389,6 +426,11 @@ class Command():
# 添加变量 # 添加变量
programEnv.append([f"{env}", value]) programEnv.append([f"{env}", value])
continue continue
# 解析命令是否可以在 Windows 使用(只限在 Windows 系统时)
if platform.system() == "Windows" and i[0] in self.windowsUnrun:
print("此命令不支持在 Windows 上运行")
programEnv[9][1] = "-5"
continue
# 正常命令解析 # 正常命令解析
if len(i) -1 < self.commandInfo[i[0]][0]: if len(i) -1 < self.commandInfo[i[0]][0]:
print("参数不足") print("参数不足")
@ -409,6 +451,8 @@ class Command():
if __name__ == "__main__": if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv) app = QtWidgets.QApplication(sys.argv)
optionAll = 0 optionAll = 0
if "--debug" in sys.argv:
optionAll += 1
if "--system" in sys.argv: if "--system" in sys.argv:
programEnv[2][1] = "1" programEnv[2][1] = "1"
optionAll += 1 optionAll += 1

View File

@ -15,6 +15,11 @@ import sys
import json import json
import traceback import traceback
import requests import requests
def exit():
if __name__ == "__main__":
input("按回车键退出")
sys.exit()
sys.exit()
# 获取云列表 # 获取云列表
url = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/dlls" url = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/dlls"
print("获取列表中……", end="") print("获取列表中……", end="")

View File

@ -86,5 +86,8 @@ if __name__ == "__main__":
os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/font' -o '{fontList[choose][0]}' \"{fontList[choose][1]}\"") os.system(f"aria2c -x 16 -s 16 -d '{homePath}/.cache/deepin-wine-runner/font' -o '{fontList[choose][0]}' \"{fontList[choose][1]}\"")
if os.path.exists(f"{sys.argv[1]}/drive_c/windows/Fonts/{fontList[choose][2]}"): if os.path.exists(f"{sys.argv[1]}/drive_c/windows/Fonts/{fontList[choose][2]}"):
print("字体已存在,覆盖") print("字体已存在,覆盖")
try:
shutil.copy(f"{homePath}/.cache/deepin-wine-runner/font/{fontList[choose][0]}", f"{sys.argv[1]}/drive_c/windows/Fonts/{fontList[choose][2]}") shutil.copy(f"{homePath}/.cache/deepin-wine-runner/font/{fontList[choose][0]}", f"{sys.argv[1]}/drive_c/windows/Fonts/{fontList[choose][2]}")
except:
print("拷贝失败!")
input("安装结束,按回车键继续") input("安装结束,按回车键继续")

View File

@ -15,6 +15,11 @@ import sys
import json import json
import traceback import traceback
import requests import requests
def exit():
if __name__ == "__main__":
input("按回车键退出")
sys.exit()
sys.exit()
# 获取云列表 # 获取云列表
url = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/dlls" url = "https://code.gitlink.org.cn/gfdgd_xi/wine-runner-list/raw/branch/master/dlls"
print("获取列表中……", end="") print("获取列表中……", end="")

View File

@ -0,0 +1,31 @@
import os
def OpenTerminal(command):
if terminalEnd[terminal][1]:
os.system(f"\"{terminal}\" \"{terminalEnd[terminal][0]}\" \"{command}\"")
return
os.system(f"\"{terminal}\" \"{terminalEnd[terminal][0]}\" {command}")
programPath = os.path.split(os.path.realpath(__file__))[0] # 返回 string
# 对终端的获取
# 为什么 openkylin 只有 mate-terminal
# 优先为深度终端
terminal = ""
terminalList = [
"deepin-terminal1",
"mate-terminal1",
"gnome-terminal"
]
terminalEnd = {
f"{programPath}/launch.sh\" \"deepin-terminal": ["-e", 0],
"mate-terminal": ["-e", 1],
"gnome-terminal": ["--", 0]
}
for i in terminalList:
if not os.system(f"which {i}"):
if i == "deepin-terminal":
i = f"{programPath}/launch.sh\" \"deepin-terminal"
terminal = i
break
if terminal == "":
print("无法识别到以下的任意一个终端")
print(" ".join(terminalList))
exit()

View File

@ -27,7 +27,7 @@ import PyQt5.QtWidgets as QtWidgets
################# #################
def button1_cl(): def button1_cl():
path = QtWidgets.QFileDialog.getExistingDirectory(QtCore.QCoreApplication.translate("U", "选择 wine 容器"), f"{get_home()}/.deepinwine") path = QtWidgets.QFileDialog.getExistingDirectory(widget, QtCore.QCoreApplication.translate("U", "选择 wine 容器"), f"{get_home()}/.deepinwine")
if path != "": if path != "":
e6_text.setText(path) e6_text.setText(path)
@ -207,7 +207,7 @@ class make_deb_threading(QtCore.QThread):
f"{wine[wineVersion.currentText()]}, spark-dwine-helper (>= 1.6.2), fonts-wqy-microhei, fonts-wqy-zenhei" f"{wine[wineVersion.currentText()]}, spark-dwine-helper (>= 1.6.2), fonts-wqy-microhei, fonts-wqy-zenhei"
][int(chooseWineHelperValue.isChecked())], ][int(chooseWineHelperValue.isChecked())],
"postinst": "", "postinst": "",
"postrm": ["", f"""#!/bin/bash.. "postrm": ["", f"""#!/bin/bash
if [ "$1" = "remove" ] || [ "$1" = "purge" ];then if [ "$1" = "remove" ] || [ "$1" = "purge" ];then
@ -345,12 +345,12 @@ fi
##############<<<<<<<<<屏蔽mono和gecko安装器开始 ##############<<<<<<<<<屏蔽mono和gecko安装器开始
##默认屏蔽mono和gecko安装器 ##默认屏蔽mono和gecko安装器
if [ "$APPRUN_CMD" = "spark-wine7-devel" ];then #if [ "$APPRUN_CMD" = "spark-wine7-devel" ];then
export WINEDLLOVERRIDES="mscoree,mshtml=" #export WINEDLLOVERRIDES="mscoree,mshtml="
echo "为了降低打包体积默认关闭gecko和momo如有需要注释此行仅对spark-wine7-devel有效" #echo "为了降低打包体积默认关闭gecko和momo如有需要注释此行仅对spark-wine7-devel有效"
fi #fi
##############>>>>>>>>>屏蔽mono和gecko安装器结束 ##############>>>>>>>>>屏蔽mono和gecko安装器结束
#########################执行段 #########################执行段
@ -781,7 +781,11 @@ fi
debPackagePath = f"/tmp/{random.randint(0, 9999)}" debPackagePath = f"/tmp/{random.randint(0, 9999)}"
#self.run_command(f"rm -rfv /tmp/{debPackagePath}") #self.run_command(f"rm -rfv /tmp/{debPackagePath}")
print("f") print("f")
self.run_command(f"rm -rfv '{debPackagePath}'") # 为了避免删库,必须保证是 deb 文件构建目录才进行清空
if os.path.exists(f"{debPackagePath}/DEBIAN/control"):
self.run_command(f"rm -rfv '{debPackagePath}/usr'")
self.run_command(f"rm -rfv '{debPackagePath}/opt'")
self.run_command(f"rm -rfv '{debPackagePath}/DEBIAN'")
print("d") print("d")
############### ###############
# 创建目录 # 创建目录
@ -928,6 +932,8 @@ Description: {e3_text.text()}
self.label.emit("完成构建!") self.label.emit("完成构建!")
self.disabled_or_NORMAL_all.emit(True) self.disabled_or_NORMAL_all.emit(True)
self.infoMsg.emit("打包完毕!") self.infoMsg.emit("打包完毕!")
global change
change = False
except: except:
traceback.print_exc() traceback.print_exc()
self.errorMsg.emit("程序出现错误,错误信息:\n{}".format(traceback.format_exc())) self.errorMsg.emit("程序出现错误,错误信息:\n{}".format(traceback.format_exc()))
@ -1018,6 +1024,37 @@ def ChangeWine():
debDepends.setText("libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses, deepin-wine-plugin-virtual") debDepends.setText("libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses, deepin-wine-plugin-virtual")
debRecommend.setText("libcapi20-3, libcups2, libdbus-1-3, libfontconfig1, libfreetype6, libglu1-mesa | libglu1, libgnutls30 | libgnutls28 | libgnutls26, libgsm1, libgssapi-krb5-2, libjpeg62-turbo | libjpeg8, libkrb5-3, libodbc1, libosmesa6, libpng16-16 | libpng12-0, libsane | libsane1, libsdl2-2.0-0, libtiff5, libv4l-0, libxcomposite1, libxcursor1, libxfixes3, libxi6, libxinerama1, libxrandr2, libxrender1, libxslt1.1, libxxf86vm1") debRecommend.setText("libcapi20-3, libcups2, libdbus-1-3, libfontconfig1, libfreetype6, libglu1-mesa | libglu1, libgnutls30 | libgnutls28 | libgnutls26, libgsm1, libgssapi-krb5-2, libjpeg62-turbo | libjpeg8, libkrb5-3, libodbc1, libosmesa6, libpng16-16 | libpng12-0, libsane | libsane1, libsdl2-2.0-0, libtiff5, libv4l-0, libxcomposite1, libxcursor1, libxfixes3, libxi6, libxinerama1, libxrandr2, libxrender1, libxslt1.1, libxxf86vm1")
# 获取用户桌面目录
def get_desktop_path():
for line in open(get_home() + "/.config/user-dirs.dirs"): # 以行来读取配置文件
desktop_index = line.find("XDG_DESKTOP_DIR=\"") # 寻找是否有对应项,有返回 0没有返回 -1
if desktop_index != -1: # 如果有对应项
break # 结束循环
if desktop_index == -1: # 如果是提前结束,值一定≠-1如果是没有提前结束值一定-1
return -1
else:
get = line[17:-2] # 截取桌面目录路径
get_index = get.find("$HOME") # 寻找是否有对应的项,需要替换内容
if get != -1: # 如果有
get = get.replace("$HOME", get_home()) # 则把其替换为用户目录(~)
return get # 返回目录
change = False
autoChange = True # 有第一次的路径自动设置
def AutoPathSet():
global autoChange
autoChange = True
architecture = ["i386", "arm64", "arm64"]
if not change:
e12_text.setText(f"{get_desktop_path()}/{e1_text.text()}_{e2_text.text()}_{architecture[debArch.currentIndex()]}.deb")
def UserPathSet():
global change
global autoChange
if autoChange:
autoChange = False
return
change = True
############### ###############
# 程序信息 # 程序信息
@ -1107,7 +1144,6 @@ button5.clicked.connect(make_deb)
buildDebDir.clicked.connect(lambda: make_deb(True)) buildDebDir.clicked.connect(lambda: make_deb(True))
installDeb.clicked.connect(InstallDeb) installDeb.clicked.connect(InstallDeb)
wineFrame.addWidget(wineVersion) wineFrame.addWidget(wineVersion)
debArch.currentIndexChanged.connect(ChangeArchCombobox)
# 创建控件 # 创建控件
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要打包的 deb 包的包名(※必填):")), 0, 0, 1, 1) widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要打包的 deb 包的包名(※必填):")), 0, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要打包的 deb 包的版本号(※必填):")), 1, 0, 1, 1) widgetLayout.addWidget(QtWidgets.QLabel(QtCore.QCoreApplication.translate("U", "要打包的 deb 包的版本号(※必填):")), 1, 0, 1, 1)
@ -1173,6 +1209,11 @@ widgetLayout.addWidget(buildDebDir, 16, 3)
useInstallWineArch.setDisabled(True) useInstallWineArch.setDisabled(True)
wineVersion.currentTextChanged.connect(ChangeWine) wineVersion.currentTextChanged.connect(ChangeWine)
chooseWineHelperValue.stateChanged.connect(ChangeWine) chooseWineHelperValue.stateChanged.connect(ChangeWine)
e1_text.textChanged.connect(AutoPathSet)
e2_text.textChanged.connect(AutoPathSet)
debArch.currentIndexChanged.connect(AutoPathSet)
debArch.currentIndexChanged.connect(ChangeArchCombobox)
e12_text.textChanged.connect(UserPathSet)
# 菜单栏 # 菜单栏
menu = window.menuBar() menu = window.menuBar()
programmenu = menu.addMenu(QtCore.QCoreApplication.translate("U", "程序")) programmenu = menu.addMenu(QtCore.QCoreApplication.translate("U", "程序"))
@ -1190,6 +1231,7 @@ try:
wineVersion.setCurrentText(sys.argv[2]) wineVersion.setCurrentText(sys.argv[2])
except: except:
pass pass
e12_text.setText(f"{get_desktop_path()}/demo_1.0.0_i386.deb")
widget.setLayout(widgetLayout) widget.setLayout(widgetLayout)
window.setCentralWidget(widget) window.setCentralWidget(widget)
window.setWindowTitle(f"wine 应用打包器 {version}") window.setWindowTitle(f"wine 应用打包器 {version}")

View File

@ -1,12 +1,12 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### #################################################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢 # 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本2.0.0 # 版本2.0.0
# 更新时间2022年08月12日 # 更新时间2022年08月12日
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序 # 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建 # 基于 Python3 的 PyQt5 构建
########################################################################################### #################################################################################################################
################# #################
# 引入所需的库 # 引入所需的库
################# #################
@ -26,6 +26,7 @@ import urllib.parse as parse
import PyQt5.QtGui as QtGui import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets import PyQt5.QtWidgets as QtWidgets
from Model import *
################### ###################
# 程序所需事件 # 程序所需事件
################### ###################
@ -158,11 +159,14 @@ class Runexebutton_threading(QtCore.QThread):
return return
os.remove(f"{programPath}/dlls-arm.7z") os.remove(f"{programPath}/dlls-arm.7z")
if setting["TerminalOpen"]: if setting["TerminalOpen"]:
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + e2.currentText() + "' " + setting["WineOption"] + "\" --keep-open" + wineUsingOption], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) res = ""
OpenTerminal("env WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + e2.currentText() + "' " + setting["WineOption"])
#res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + e2.currentText() + "' " + setting["WineOption"] + "\" --keep-open" + wineUsingOption], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else: else:
res = subprocess.Popen(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + e2.currentText() + "' " + setting["WineOption"]], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) res = subprocess.Popen(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + e2.currentText() + "' " + setting["WineOption"]], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# 实时读取程序返回 # 实时读取程序返回
# #
if not setting["TerminalOpen"]:
while res.poll() is None: while res.poll() is None:
try: try:
text = res.stdout.readline().decode("utf8") text = res.stdout.readline().decode("utf8")
@ -352,13 +356,13 @@ def KillProgram():
os.system("killall winedbg -9") os.system("killall winedbg -9")
def InstallWine(): def InstallWine():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"{programPath}/AllInstall.py\""]).start() threading.Thread(target=OpenTerminal, args=[f"'{programPath}/AllInstall.py'"]).start()
def InstallWineOnDeepin23(): def InstallWineOnDeepin23():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"{programPath}/InstallWineOnDeepin23.py\""]).start() threading.Thread(target=OpenTerminal, args=[f"'{programPath}/InstallWineOnDeepin23.py'"]).start()
def InstallWineHQ(): def InstallWineHQ():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -e \"{programPath}/InstallNewWineHQ.sh\""]).start() threading.Thread(target=OpenTerminal, args=[f"{programPath}/InstallNewWineHQ.sh"]).start()
def OpenWineBotton(): def OpenWineBotton():
if e1.currentText() == "": if e1.currentText() == "":
@ -408,10 +412,13 @@ class RunWineProgramThread(QtCore.QThread):
return return
os.remove(f"{programPath}/dlls-arm.7z") os.remove(f"{programPath}/dlls-arm.7z")
if setting["TerminalOpen"]: if setting["TerminalOpen"]:
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"] + " " + wineUsingOption + "\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) res = ""
OpenTerminal(f"env WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"] + " " + wineUsingOption)
#res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"] + " " + wineUsingOption + "\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else: else:
res = subprocess.Popen(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"]], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) res = subprocess.Popen(["WINEPREFIX='" + wineBottonPath + "' " + option + wine[o1.currentText()] + " '" + self.wineProgram + "' " + setting["WineOption"]], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# 实时读取程序返回 # 实时读取程序返回
if not setting["TerminalOpen"]:
while res.poll() is None: while res.poll() is None:
try: try:
text = res.stdout.readline().decode("utf8") text = res.stdout.readline().decode("utf8")
@ -469,7 +476,10 @@ class RunWinetricksThread(QtCore.QThread):
return return
os.remove(f"{programPath}/dlls-arm.7z") os.remove(f"{programPath}/dlls-arm.7z")
if setting["TerminalOpen"]: if setting["TerminalOpen"]:
res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + f" winetricks --gui {wineUsingOption}\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) res = ""
# 用终端开应该不用返回输出内容了
OpenTerminal(f"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + f" winetricks --gui {wineUsingOption}")
#res = subprocess.Popen([f"'{programPath}/launch.sh' deepin-terminal -C \"WINEPREFIX='{wineBottonPath}' {option} WINE=" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + f" winetricks --gui {wineUsingOption}\" --keep-open"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
else: else:
res = subprocess.Popen([f"WINEPREFIX='{wineBottonPath}' {option} WINE='" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + "' winetricks --gui"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) res = subprocess.Popen([f"WINEPREFIX='{wineBottonPath}' {option} WINE='" + subprocess.getoutput(f"which {wine[o1.currentText()]}").replace(" ", "").replace("\n", "") + "' winetricks --gui"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
# 实时读取程序返回 # 实时读取程序返回
@ -506,21 +516,21 @@ def CleanWineBottonByUOS():
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -C \"WINE='{wine[o1.currentText()]}' '{programPath}/cleanbottle.sh' '{wineBottonPath}'; echo 按回车退出; read; read; exit;\"") OpenTerminal(f"env WINE='{wine[o1.currentText()]}' '{programPath}/cleanbottle.sh' '{wineBottonPath}'")
def FontAppStore(): def FontAppStore():
if e1.currentText() == "": if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
os.system(f"WINE='{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallFont.py' '{wineBottonPath}' {int(setting['RuntimeCache'])}") OpenTerminal(f"env WINE='{programPath}/launch.sh' '{programPath}/InstallFont.py' '{wineBottonPath}' {int(setting['RuntimeCache'])}")
def GetDllFromInternet(): def GetDllFromInternet():
if e1.currentText() == "": if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
os.system(f"WINE='{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallDll.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") OpenTerminal(f"env WINE='{programPath}/launch.sh' '{programPath}/InstallDll.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}")
def WineBottonAutoConfig(): def WineBottonAutoConfig():
if e1.currentText() == "": if e1.currentText() == "":
@ -534,28 +544,28 @@ def InstallMonoGecko(program):
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallMono.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {program} {int(setting['RuntimeCache'])}") OpenTerminal(f"'{programPath}/InstallMono.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {program} {int(setting['RuntimeCache'])}")
def InstallNetFramework(): def InstallNetFramework():
if e1.currentText() == "": if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallNetFramework.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") OpenTerminal(f"'{programPath}/InstallNetFramework.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}")
def InstallVisualStudioCPlusPlus(): def InstallVisualStudioCPlusPlus():
if e1.currentText() == "": if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallVisualCPlusPlus.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") OpenTerminal(f"'{programPath}/InstallVisualCPlusPlus.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}")
def InstallMSXML(): def InstallMSXML():
if e1.currentText() == "": if e1.currentText() == "":
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallMsxml.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") OpenTerminal(f"'{programPath}/InstallMsxml.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}")
def InstallDXVK(): def InstallDXVK():
if not os.path.exists(f"{programPath}/dxvk"): if not os.path.exists(f"{programPath}/dxvk"):
@ -567,10 +577,11 @@ def InstallDXVK():
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
process = QtCore.QProcess() OpenTerminal(f"env WINE='{wine[o1.currentText()]}' WINE64='{wine[o1.currentText()]}' WINEPREFIX='{wineBottonPath}' '{programPath}/dxvk/setup_dxvk.sh' install")
process.startDetached(f"{programPath}/launch.sh", ["deepin-terminal", "-e", #process = QtCore.QProcess()
"env", f"WINE={wine[o1.currentText()]}", f"WINE64={wine[o1.currentText()]}", f"WINEPREFIX={wineBottonPath}", "bash", #process.startDetached(f"{programPath}/launch.sh", ["deepin-terminal", "-e",
f"{programPath}/dxvk/setup_dxvk.sh", "install"]) #"env", f"WINE={wine[o1.currentText()]}", f"WINE64={wine[o1.currentText()]}", f"WINEPREFIX={wineBottonPath}", "bash",
#f"{programPath}/dxvk/setup_dxvk.sh", "install"])
def UninstallDXVK(): def UninstallDXVK():
if not os.path.exists(f"{programPath}/dxvk"): if not os.path.exists(f"{programPath}/dxvk"):
@ -582,24 +593,25 @@ def UninstallDXVK():
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
process = QtCore.QProcess() OpenTerminal(f"env WINE='{wine[o1.currentText()]}' WINE64='{wine[o1.currentText()]}' WINEPREFIX='{wineBottonPath}' '{programPath}/dxvk/setup_dxvk.sh' uninstall")
process.startDetached(f"{programPath}/launch.sh", ["deepin-terminal", "-e", #process = QtCore.QProcess()
"env", f"WINE={wine[o1.currentText()]}", f"WINE64={wine[o1.currentText()]}", f"WINEPREFIX={wineBottonPath}", #process.startDetached(f"{programPath}/launch.sh", ["deepin-terminal", "-e",
f"{programPath}/dxvk/setup_dxvk.sh", "uninstall"]) #"env", f"WINE={wine[o1.currentText()]}", f"WINE64={wine[o1.currentText()]}", f"WINEPREFIX={wineBottonPath}",
#f"{programPath}/dxvk/setup_dxvk.sh", "uninstall"])
def MiniAppStore(): def MiniAppStore():
if e1.currentText()== "": if e1.currentText()== "":
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -e '{programPath}/AppStore.py' '{wineBottonPath}' '{wine[o1.currentText()]}'") OpenTerminal(f"'{programPath}/AppStore.py' '{wineBottonPath}' '{wine[o1.currentText()]}'")
def InstallOther(): def InstallOther():
if e1.currentText()== "": if e1.currentText()== "":
wineBottonPath = setting["DefultBotton"] wineBottonPath = setting["DefultBotton"]
else: else:
wineBottonPath = e1.currentText() wineBottonPath = e1.currentText()
os.system(f"'{programPath}/launch.sh' deepin-terminal -e '{programPath}/InstallOther.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}") OpenTerminal(f"'{programPath}/InstallOther.py' '{wineBottonPath}' '{wine[o1.currentText()]}' {int(setting['RuntimeCache'])}")
def BuildExeDeb(): def BuildExeDeb():
if e1.currentText() == "": if e1.currentText() == "":
@ -629,7 +641,7 @@ def SetDeepinFileDialogDefult():
QtWidgets.QMessageBox.information(widget, "提示", "设置完成!") QtWidgets.QMessageBox.information(widget, "提示", "设置完成!")
def SetDeepinFileDialogRecovery(): def SetDeepinFileDialogRecovery():
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'pkexec \"{programPath}/deepin-wine-venturi-setter.py\" recovery' --keep-open"]).start() threading.Thread(target=OpenTerminal, args=[f"pkexec '{programPath}/deepin-wine-venturi-setter.py' recovery"]).start()
def DeleteDesktopIcon(): def DeleteDesktopIcon():
if os.path.exists(f"{get_home()}/.local/share/applications/wine"): if os.path.exists(f"{get_home()}/.local/share/applications/wine"):
@ -662,13 +674,13 @@ def ThankWindow():
def InstallWineFont(): def InstallWineFont():
# 筛选 apt # 筛选 apt
if not os.system("which aptss"): if not os.system("which aptss"):
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'echo 这些字体来自星火应用商店 && sudo aptss install ms-core-fonts -y' --keep-open"]).start() threading.Thread(target=OpenTerminal, args=[f"sudo aptss install ms-core-fonts -y"]).start()
elif not os.system("which ss-apt-fast"): elif not os.system("which ss-apt-fast"):
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'echo 这些字体来自星火应用商店 && sudo ss-apt-fast update && sudo ss-apt-fast install ms-core-fonts -y' --keep-open"]).start() threading.Thread(target=OpenTerminal, args=[f"sudo ss-apt-fast install ms-core-fonts -y"]).start()
elif not os.system("which apt-fast"): elif not os.system("which apt-fast"):
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'echo 这些字体来自星火应用商店 && sudo apt-fast install ms-core-fonts -y' --keep-open"]).start() threading.Thread(target=OpenTerminal, args=[f"sudo apt-fast install ms-core-fonts -y"]).start()
else: else:
threading.Thread(target=os.system, args=[f"'{programPath}/launch.sh' deepin-terminal -C 'echo 这些字体来自星火应用商店 && sudo apt install ms-core-fonts -y' --keep-open"]).start() threading.Thread(target=OpenTerminal, args=[f"sudo apt install ms-core-fonts -y"]).start()
def WineRunnerBugUpload(): def WineRunnerBugUpload():
threading.Thread(target=os.system, args=[f"'{programPath}/deepin-wine-runner-update-bug'"]).start() threading.Thread(target=os.system, args=[f"'{programPath}/deepin-wine-runner-update-bug'"]).start()
@ -707,7 +719,7 @@ def RunVM():
threading.Thread(target=os.system, args=[f"bash '{programPath}/RunVM.sh'"]).start() threading.Thread(target=os.system, args=[f"bash '{programPath}/RunVM.sh'"]).start()
def CleanProgram(): def CleanProgram():
os.system(f"'{programPath}/launch.sh' deepin-terminal -e \"{programPath}/clean-unuse-program.py\"") OpenTerminal(f"{programPath}/clean-unuse-program.py")
class UpdateWindow(): class UpdateWindow():
data = {} data = {}
@ -723,7 +735,7 @@ class UpdateWindow():
cancel = QtWidgets.QPushButton("取消") cancel = QtWidgets.QPushButton("取消")
cancel.clicked.connect(UpdateWindow.update.close) cancel.clicked.connect(UpdateWindow.update.close)
try: try:
UpdateWindow.data = json.loads(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci91cGRhdGUuanNvbg==").decode("utf-8")).text) UpdateWindow.data = json.loads(requests.get(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL3VwZGF0ZS5qc29u").decode("utf-8")).text)
versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本{UpdateWindow.data['Version']}\n更新内容") versionLabel = QtWidgets.QLabel(f"当前版本:{version}\n最新版本{UpdateWindow.data['Version']}\n更新内容")
if UpdateWindow.data["Version"] == version: if UpdateWindow.data["Version"] == version:
updateText.setText(QtCore.QCoreApplication.translate("U", "此为最新版本,无需更新")) updateText.setText(QtCore.QCoreApplication.translate("U", "此为最新版本,无需更新"))
@ -766,7 +778,7 @@ zenity --info --text=\"更新完毕!\" --ellipsize
except: except:
traceback.print_exc() traceback.print_exc()
QtWidgets.QMessageBox.critical(None, "出现错误,无法继续更新", traceback.format_exc()) QtWidgets.QMessageBox.critical(None, "出现错误,无法继续更新", traceback.format_exc())
os.system(f"'{programPath}/launch.sh' deepin-terminal -e pkexec bash /tmp/spark-deepin-wine-runner/update.sh") OpenTerminal("pkexec bash /tmp/spark-deepin-wine-runner/update.sh")
class GetDllFromWindowsISO: class GetDllFromWindowsISO:
wineBottonPath = get_home() + "/.wine" wineBottonPath = get_home() + "/.wine"
@ -967,8 +979,8 @@ class ProgramRunStatusShow():
return return
try: try:
sha = ProgramRunStatusUpload.GetSHA1(e2.currentText()) sha = ProgramRunStatusUpload.GetSHA1(e2.currentText())
lists = json.loads(requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9hcHAv").decode("utf-8") + sha + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).text) lists = json.loads(requests.get(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL2FwcC8=").decode("utf-8") + sha + base64.b64decode("L2FsbC5qc29u").decode("utf-8")).text)
r = requests.get(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9hcHAv").decode("utf-8") + sha + base64.b64decode("L3RpdGxlLnR4dA==").decode("utf-8")) r = requests.get(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL2FwcC8=").decode("utf-8") + sha + base64.b64decode("L3RpdGxlLnR4dA==").decode("utf-8"))
r.encoding = "utf-8" r.encoding = "utf-8"
title = r.text title = r.text
except: except:
@ -1085,7 +1097,7 @@ class ProgramRunStatusUpload():
try: try:
if ProgramRunStatusUpload.sha1Value == "": if ProgramRunStatusUpload.sha1Value == "":
ProgramRunStatusUpload.sha1Value = ProgramRunStatusUpload.GetSHA1(e2.currentText()) ProgramRunStatusUpload.sha1Value = ProgramRunStatusUpload.GetSHA1(e2.currentText())
QtWidgets.QMessageBox.information(None, QtCore.QCoreApplication.translate("U", "提示"), json.loads(requests.post(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0OjMwMjUw").decode("utf-8"), { QtWidgets.QMessageBox.information(None, QtCore.QCoreApplication.translate("U", "提示"), json.loads(requests.post(base64.b64decode("aHR0cDovL2dmZGdkeGkucWljcC52aXA6Mjc1MDI=").decode("utf-8"), {
"SHA1": ProgramRunStatusUpload.sha1Value, "SHA1": ProgramRunStatusUpload.sha1Value,
"Name": ProgramRunStatusUpload.programName.text(), "Name": ProgramRunStatusUpload.programName.text(),
"Fen": ProgramRunStatusUpload.fen.currentIndex(), "Fen": ProgramRunStatusUpload.fen.currentIndex(),
@ -1210,6 +1222,8 @@ class ProgramSetting():
return return
QtWidgets.QMessageBox.information(ProgramSetting.message, "提示", "保存完毕!") QtWidgets.QMessageBox.information(ProgramSetting.message, "提示", "保存完毕!")
########################### ###########################
# 加载配置 # 加载配置
########################### ###########################
@ -1360,7 +1374,13 @@ exe路径\' 参数 \'
<b>千万不要中断后不删除源的情况下 apt upgrade </b>中断后只需重新打开脚本输入 repair 或者随意安装一个 Wine会自动执行恢复操作即可 <b>千万不要中断后不删除源的情况下 apt upgrade </b>中断后只需重新打开脚本输入 repair 或者随意安装一个 Wine会自动执行恢复操作即可
以及此脚本安装的 Wine 无法保证 100% 能使用,以及副作用是会提示 以及此脚本安装的 Wine 无法保证 100% 能使用,以及副作用是会提示
<code>N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构,跳过配置文件 'main/binary-i386/Packages' 的获取。</code>''' <code>N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构,跳过配置文件 'main/binary-i386/Packages' 的获取。</code>'''
updateThingsString = '''<b>※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中 updateThingsString = '''<h3>2.1.0-1 更新内容:</h3>
※1、删除多余图标
※2、修复将打包文件生成目录设置为 / 等重要目录导致删库的问题
3、修复了打包器浏览按钮闪退、生成的 postrm 有误的问题
4、支持在输入信息时自动生成 deb 保存路径
<h3>2.1.0 更新内容:</h3>
<b>※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中
※2、Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 内,可以不依赖 Wine一般不推荐把 Wine 打包入内,推荐用依赖的形式),并支持设置自定义依赖和生成模板 ※2、Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 内,可以不依赖 Wine一般不推荐把 Wine 打包入内,推荐用依赖的形式),并支持设置自定义依赖和生成模板
※3、开始初步多语言支持 ※3、开始初步多语言支持
※4、修复了在没有安装任何 Wine 的情况下使用高级功能导致程序闪退的问题 ※4、修复了在没有安装任何 Wine 的情况下使用高级功能导致程序闪退的问题
@ -1375,7 +1395,7 @@ updateThingsString = '''<b>※1、新增新的 Wine 安装器,并支持将安
''' '''
for i in information["Thank"]: for i in information["Thank"]:
thankText += f"{i}\n" thankText += f"{i}\n"
updateTime = "2022年08月26日" updateTime = "2022年09月03日"
about = f'''<h1>关于</h1> about = f'''<h1>关于</h1>
<p>一个能让Linux用户更加方便运行Windows应用的程序内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器、运行库安装工具等等</p> <p>一个能让Linux用户更加方便运行Windows应用的程序内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器、运行库安装工具等等</p>
<p>同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具可以做到只需要用户下载系统镜像并点击安装即可无需顾及虚拟机安装、创建、虚拟机的分区等等</p> <p>同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具可以做到只需要用户下载系统镜像并点击安装即可无需顾及虚拟机安装、创建、虚拟机的分区等等</p>
@ -1406,11 +1426,12 @@ Qt 版本:{QtCore.qVersion()}
title = "Wine 运行器 {}".format(version) title = "Wine 运行器 {}".format(version)
updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y")) updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
try: try:
threading.Thread(target=requests.get, args=[parse.unquote(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9vcGVuL0luc3RhbGwucGhw").decode("utf-8")) + "?Version=" + version]).start() threading.Thread(target=requests.get, args=[parse.unquote(base64.b64decode("aHR0cHM6Ly8zMDQ2MjZwOTI3LmdvaG8uY28vc3BhcmstZGVlcGluLXdpbmUtcnVubmVyL29wZW4vSW5zdGFsbC5waHA=").decode("utf-8")) + "?Version=" + version]).start()
except: except:
pass pass
########################### ###########################
# 窗口创建 # 窗口创建
########################### ###########################
@ -1728,6 +1749,7 @@ s2.triggered.connect(lambda: webbrowser.open_new_tab("https://s.threatbook.cn/")
s3.triggered.connect(lambda: webbrowser.open_new_tab("https://www.virustotal.com/")) s3.triggered.connect(lambda: webbrowser.open_new_tab("https://www.virustotal.com/"))
help = menu.addMenu(QtCore.QCoreApplication.translate("U", "帮助(&H)")) help = menu.addMenu(QtCore.QCoreApplication.translate("U", "帮助(&H)"))
runStatusWebSize = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "查询程序在 Wine 的运行情况"))
h1 = help.addMenu(QtCore.QCoreApplication.translate("U", "程序官网")) h1 = help.addMenu(QtCore.QCoreApplication.translate("U", "程序官网"))
h2 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "小提示")) h2 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "小提示"))
h3 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "更新内容")) h3 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "更新内容"))
@ -1749,6 +1771,8 @@ h1.addAction(gitlink)
h1.addAction(gitlab) h1.addAction(gitlab)
h1.addAction(jihu) h1.addAction(jihu)
help.addSeparator() help.addSeparator()
help.addAction(runStatusWebSize)
help.addSeparator()
help.addAction(h2) help.addAction(h2)
help.addAction(h3) help.addAction(h3)
help.addAction(h4) help.addAction(h4)
@ -1773,6 +1797,7 @@ github.triggered.connect(lambda: webbrowser.open_new_tab("https://github.com/gfd
gitlink.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlink.org.cn/gfdgd_xi/deep-wine-runner")) gitlink.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlink.org.cn/gfdgd_xi/deep-wine-runner"))
gitlab.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlab.com/gfdgd-xi/deep-wine-runner")) gitlab.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlab.com/gfdgd-xi/deep-wine-runner"))
jihu.triggered.connect(lambda: webbrowser.open_new_tab("https://jihulab.com//gfdgd-xi/deep-wine-runner")) jihu.triggered.connect(lambda: webbrowser.open_new_tab("https://jihulab.com//gfdgd-xi/deep-wine-runner"))
runStatusWebSize.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io/wine-runner-info"))
h2.triggered.connect(helps) h2.triggered.connect(helps)
h3.triggered.connect(UpdateThings) h3.triggered.connect(UpdateThings)
h4.triggered.connect(ThankWindow) h4.triggered.connect(ThankWindow)

View File

@ -1,5 +1,5 @@
{ {
"Version": "2.1.0", "Version": "2.1.0-1",
"Thank": [ "Thank": [
"感谢 @a2035274 @虚幻的早晨 https://bbs.deepin.org/post/238301", "感谢 @a2035274 @虚幻的早晨 https://bbs.deepin.org/post/238301",
"感谢 @zhangs https://bbs.deepin.org/post/227948", "感谢 @zhangs https://bbs.deepin.org/post/227948",

View File

@ -98,7 +98,11 @@ def ReadLocalInformation():
def ReadInternetInformation(): def ReadInternetInformation():
global internetJsonList global internetJsonList
# C++ 版本是用 curl 的,考虑到 Python 用 requests 反而方便,于是不用 curl # C++ 版本是用 curl 的,考虑到 Python 用 requests 反而方便,于是不用 curl
try:
internetJsonList = json.loads(requests.get(f"{internetWineSource}/information.json").text) internetJsonList = json.loads(requests.get(f"{internetWineSource}/information.json").text)
except:
QtWidgets.QMessageBox.critical(window, "错误", "无法连接服务器!")
return
nmodel = QtGui.QStandardItemModel(window) nmodel = QtGui.QStandardItemModel(window)
for i in internetJsonList: for i in internetJsonList:
item = QtGui.QStandardItem(i[0]) item = QtGui.QStandardItem(i[0])

View File

@ -11,4 +11,5 @@ Comment=Wine Package Builder
Comment[zh]=Wine Comment[zh]=Wine
Terminal=false Terminal=false
StartupNotify=true StartupNotify=true
NoDisplay=true
MimeType=application/vnd.microsoft.portable-executable;application/x-dosexec;application/x-msi;application-x-executable;application/application-x-ms-dos-executable;application/application-x-msdownload;application/octet-stream MimeType=application/vnd.microsoft.portable-executable;application/x-dosexec;application/x-msi;application-x-executable;application/application-x-ms-dos-executable;application/application-x-msdownload;application/octet-stream

View File

@ -6,6 +6,7 @@ Version=1.7.0
Exec=/usr/bin/deepin-wine-packager-with-script Exec=/usr/bin/deepin-wine-packager-with-script
Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg Icon=/opt/apps/deepin-wine-runner/deepin-wine-runner.svg
Name=Wine Package Builder For UOS Name=Wine Package Builder For UOS
NoDisplay=true
Name[zh]=Wine () Name[zh]=Wine ()
Comment=Wine Package Builder For UOS Comment=Wine Package Builder For UOS
Comment[zh]=Wine () Comment[zh]=Wine ()

View File

@ -9,5 +9,6 @@ Name=Setting VirtualMachine
Name[zh]= Windows Name[zh]= Windows
Comment=Setting VirtualMachine Comment=Setting VirtualMachine
Comment[zh]= Comment[zh]=
NoDisplay=true
Terminal=false Terminal=false
StartupNotify=true StartupNotify=true

View File

@ -781,7 +781,11 @@ fi
debPackagePath = f"/tmp/{random.randint(0, 9999)}" debPackagePath = f"/tmp/{random.randint(0, 9999)}"
#self.run_command(f"rm -rfv /tmp/{debPackagePath}") #self.run_command(f"rm -rfv /tmp/{debPackagePath}")
print("f") print("f")
self.run_command(f"rm -rfv '{debPackagePath}'") # 为了避免删库,必须保证是 deb 文件构建目录才进行清空
if os.path.exists(f"{debPackagePath}/DEBIAN/control"):
self.run_command(f"rm -rfv '{debPackagePath}/usr'")
self.run_command(f"rm -rfv '{debPackagePath}/opt'")
self.run_command(f"rm -rfv '{debPackagePath}/DEBIAN'")
print("d") print("d")
############### ###############
# 创建目录 # 创建目录

BIN
dxvk.7z Normal file

Binary file not shown.

View File

@ -1,5 +1,5 @@
{ {
"Version": "2.1.0", "Version": "2.1.0-1",
"Thank": [ "Thank": [
"感谢 @a2035274 @虚幻的早晨 https://bbs.deepin.org/post/238301", "感谢 @a2035274 @虚幻的早晨 https://bbs.deepin.org/post/238301",
"感谢 @zhangs https://bbs.deepin.org/post/227948", "感谢 @zhangs https://bbs.deepin.org/post/227948",

View File

@ -1,12 +1,12 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# 使用系统默认的 python3 运行 # 使用系统默认的 python3 运行
########################################################################################### #################################################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢 # 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本2.0.0 # 版本2.0.0
# 更新时间2022年08月12日 # 更新时间2022年08月12日
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序 # 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建 # 基于 Python3 的 PyQt5 构建
########################################################################################### #################################################################################################################
################# #################
# 引入所需的库 # 引入所需的库
################# #################
@ -17,6 +17,7 @@ import json
import base64 import base64
import shutil import shutil
import hashlib import hashlib
import platform
import requests import requests
import threading import threading
import traceback import traceback
@ -27,6 +28,19 @@ import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets import PyQt5.QtWidgets as QtWidgets
from Model import * from Model import *
def PythonLower():
app = QtWidgets.QApplication(sys.argv)
QtWidgets.QMessageBox.critical(None, "错误", "Python 至少需要 3.6 及以上版本,目前版本:" + platform.python_version() + "")
sys.exit(1)
# Python 版本检测,因为 f-string 格式化要至少 Python 3.6 及以上的版本,所以需要检测
# 判断主版本号
if sys.version_info[0] > 3:
PythonLower()
if sys.version_info[1] < 6:
PythonLower()
################### ###################
# 程序所需事件 # 程序所需事件
################### ###################
@ -1374,7 +1388,13 @@ exe路径\' 参数 \'
<b>千万不要中断后不删除源的情况下 apt upgrade </b>中断后只需重新打开脚本输入 repair 或者随意安装一个 Wine会自动执行恢复操作即可 <b>千万不要中断后不删除源的情况下 apt upgrade </b>中断后只需重新打开脚本输入 repair 或者随意安装一个 Wine会自动执行恢复操作即可
以及此脚本安装的 Wine 无法保证 100% 能使用以及副作用是会提示 以及此脚本安装的 Wine 无法保证 100% 能使用以及副作用是会提示
<code>N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构跳过配置文件 'main/binary-i386/Packages' 的获取</code>''' <code>N: 鉴于仓库 'https://community-packages.deepin.com/beige beige InRelease' 不支持 'i386' 体系结构跳过配置文件 'main/binary-i386/Packages' 的获取</code>'''
updateThingsString = '''<b>※1、新增新的 Wine 安装器,并支持将安装的 Wine 打包到 Wine 程序 deb 包中 updateThingsString = '''<h3>2.1.0-1 更新内容:</h3>
1删除多余图标
2修复将打包文件生成目录设置为 / 等重要目录导致删库的问题
3修复了打包器浏览按钮闪退生成的 postrm 有误的问题
4支持在输入信息时自动生成 deb 保存路径
<h3>2.1.0 更新内容</h3>
<b>1新增新的 Wine 安装器并支持将安装的 Wine 打包到 Wine 程序 deb 包中
2Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 可以不依赖 Wine一般不推荐把 Wine 打包入内推荐用依赖的形式并支持设置自定义依赖和生成模板 2Wine 打包器打包 Windows 应用支持将 Wine 打包入 deb 可以不依赖 Wine一般不推荐把 Wine 打包入内推荐用依赖的形式并支持设置自定义依赖和生成模板
3开始初步多语言支持 3开始初步多语言支持
4修复了在没有安装任何 Wine 的情况下使用高级功能导致程序闪退的问题 4修复了在没有安装任何 Wine 的情况下使用高级功能导致程序闪退的问题
@ -1389,7 +1409,7 @@ updateThingsString = '''<b>※1、新增新的 Wine 安装器,并支持将安
''' '''
for i in information["Thank"]: for i in information["Thank"]:
thankText += f"{i}\n" thankText += f"{i}\n"
updateTime = "2022年08月26" updateTime = "2022年09月03"
about = f'''<h1>关于</h1> about = f'''<h1>关于</h1>
<p>一个能让Linux用户更加方便运行Windows应用的程序内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器运行库安装工具等等</p> <p>一个能让Linux用户更加方便运行Windows应用的程序内置了对wine图形化的支持和各种Wine工具和自制Wine程序打包器运行库安装工具等等</p>
<p>同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具可以做到只需要用户下载系统镜像并点击安装即可无需顾及虚拟机安装创建虚拟机的分区等等</p> <p>同时也内置了基于VirtualBox制作的小白Windows虚拟机安装工具可以做到只需要用户下载系统镜像并点击安装即可无需顾及虚拟机安装创建虚拟机的分区等等</p>
@ -1743,6 +1763,7 @@ s2.triggered.connect(lambda: webbrowser.open_new_tab("https://s.threatbook.cn/")
s3.triggered.connect(lambda: webbrowser.open_new_tab("https://www.virustotal.com/")) s3.triggered.connect(lambda: webbrowser.open_new_tab("https://www.virustotal.com/"))
help = menu.addMenu(QtCore.QCoreApplication.translate("U", "帮助(&H)")) help = menu.addMenu(QtCore.QCoreApplication.translate("U", "帮助(&H)"))
runStatusWebSize = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "查询程序在 Wine 的运行情况"))
h1 = help.addMenu(QtCore.QCoreApplication.translate("U", "程序官网")) h1 = help.addMenu(QtCore.QCoreApplication.translate("U", "程序官网"))
h2 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "小提示")) h2 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "小提示"))
h3 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "更新内容")) h3 = QtWidgets.QAction(QtCore.QCoreApplication.translate("U", "更新内容"))
@ -1764,6 +1785,8 @@ h1.addAction(gitlink)
h1.addAction(gitlab) h1.addAction(gitlab)
h1.addAction(jihu) h1.addAction(jihu)
help.addSeparator() help.addSeparator()
help.addAction(runStatusWebSize)
help.addSeparator()
help.addAction(h2) help.addAction(h2)
help.addAction(h3) help.addAction(h3)
help.addAction(h4) help.addAction(h4)
@ -1788,6 +1811,7 @@ github.triggered.connect(lambda: webbrowser.open_new_tab("https://github.com/gfd
gitlink.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlink.org.cn/gfdgd_xi/deep-wine-runner")) gitlink.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlink.org.cn/gfdgd_xi/deep-wine-runner"))
gitlab.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlab.com/gfdgd-xi/deep-wine-runner")) gitlab.triggered.connect(lambda: webbrowser.open_new_tab("https://gitlab.com/gfdgd-xi/deep-wine-runner"))
jihu.triggered.connect(lambda: webbrowser.open_new_tab("https://jihulab.com//gfdgd-xi/deep-wine-runner")) jihu.triggered.connect(lambda: webbrowser.open_new_tab("https://jihulab.com//gfdgd-xi/deep-wine-runner"))
runStatusWebSize.triggered.connect(lambda: webbrowser.open_new_tab("https://gfdgd-xi.github.io/wine-runner-info"))
h2.triggered.connect(helps) h2.triggered.connect(helps)
h3.triggered.connect(UpdateThings) h3.triggered.connect(UpdateThings)
h4.triggered.connect(ThankWindow) h4.triggered.connect(ThankWindow)

Binary file not shown.

View File

@ -1,3 +1,3 @@
{ {
"Version": "2.1.0" "Version": "2.1.0-1"
} }