1.7.1基本完成

This commit is contained in:
gfdgd xi 2022-07-29 15:35:07 +08:00
parent af7028b7d3
commit 7a4086732f
10 changed files with 106 additions and 23 deletions

@ -39,6 +39,7 @@ build:
install:
make build
sudo apt update
sudo dpkg -i spark-deepin-wine-runner.deb
sudo apt install -f
@ -46,6 +47,7 @@ remove:
sudo apt purge spark-deepin-wine-runner
depend:
sudo apt update
sudo apt install python3 python3-pil python3-pil.imagetk\
python3-pyquery deepin-terminal aria2 curl unrar unzip\
python3-requests fakeroot bash python3-pyqt5

@ -8,8 +8,8 @@ env WINEPREFIX=容器路径 winewine的路径 可执行文件路径
让你可以简易方便的使用 wine
是使用 Python3 的 tkinter 构建的
(自己美术功底太差,图标只能在网络上找了)
测试平台deepin 20.6UOS 家庭版 21.3Ubuntu 22.04
![image.png](https://storage.deepin.org/thread/202207190819153104_image.png)
测试平台deepin 20.6UOS 家庭版 21.3.1Ubuntu 22.04
![image.png](https://storage.deepin.org/thread/202207291533597182_image.png)
而打包器可以方便的把您的 wine 容器打包成 deb 包供他人使用,程序创建的 deb 构建临时文件夹目录树如下:
```bash
/XXX
@ -74,6 +74,16 @@ desktop文件中StartupWMClass字段。用于让桌面组件将窗口类名与de
![image.png](https://storage.deepin.org/thread/202207190822204627_image.png)
## 更新日志
### 1.7.12022年07月29日
**※1、更换为 @PossibleVing 提供的程序图标**
**※2、修改了统信 Wine 生态适配活动的脚本,支持在非 UOS 系统打包**
**※3、修复了打包器在打包应用未指定图标的情况下显示对话框后强制退出的问题**
4、修改 .net framework 3.5 的安装包,从在线版改为本地版
5、支持设置主题
6、添加 Geek Uninstaller 手动升级脚本
![image.png](https://storage.deepin.org/thread/202207291533597182_image.png)
### 1.7.02022年07月19日
<b>※1、界面大改造从使用 Tkinter 改为 Qt参考了 @134******28 和 @sgb76 提供的设计方案和代码</b>

@ -5,9 +5,7 @@ aria2c -x 16 -s 16 https://geekuninstaller.com/geek.zip
unzip geek.zip
cd `dirname $0`
cp -rv /tmp/geek.exe ./
if [[ $? == 0]];then
echo "完成"
read
if [[ $? == 0 ]];then
exit
fi
echo "拷贝失败,申请使用 sudo 拷贝"

@ -0,0 +1,12 @@
cd /tmp
echo 提示:
echo Geek Uninstaller 官网访问较慢,所以请耐心等待
aria2c -x 16 -s 16 https://geekuninstaller.com/geek.zip
unzip geek.zip
cd `dirname $0`
cp -rv /tmp/geek.exe ./
if [[ $? == 0 ]];then
exit
fi
echo "拷贝失败,申请使用 sudo 拷贝"
sudo cp -rv /tmp/geek.exe ./

@ -2,10 +2,10 @@
# 使用系统默认的 python3 运行
###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本1.7.0
# 更新时间2022年07月19日
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 的 tkinter 构建
# 版本1.7.1
# 更新时间2022年07月29日
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建
###########################################################################################
#################
# 引入所需的库
@ -14,12 +14,14 @@ import os
import sys
import time
import json
import base64
import shutil
import requests
import threading
import traceback
import webbrowser
import subprocess
import urllib.parse as parse
import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets
@ -807,6 +809,7 @@ class ProgramSetting():
#wineBottonDifferent = None
centerWindow = None
message = None
theme = None
def ShowWindow():
ProgramSetting.message = QtWidgets.QMainWindow()
widget = QtWidgets.QWidget()
@ -817,14 +820,20 @@ class ProgramSetting():
widgetLayout.addWidget(QtWidgets.QLabel("默认 Wine 容器:"), 3, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("使用终端打开:"), 4, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("自定义 wine 参数:"), 5, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("程序主题:"), 6, 0, 1, 1)
ProgramSetting.wineBottonA = QtWidgets.QComboBox()
ProgramSetting.wineDebug = QtWidgets.QCheckBox("开启 DEBUG 输出")
ProgramSetting.defultWine = QtWidgets.QComboBox()
ProgramSetting.defultBotton = QtWidgets.QLineEdit()
ProgramSetting.theme = QtWidgets.QComboBox()
ProgramSetting.theme.addItems(QtWidgets.QStyleFactory.keys())
ProgramSetting.theme.setCurrentText(setting["Theme"])
save = QtWidgets.QPushButton("保存")
save.clicked.connect(ProgramSetting.Save)
defultBottonButton = QtWidgets.QPushButton("浏览")
defultBottonButton.clicked.connect(ProgramSetting.Browser)
themeTry = QtWidgets.QPushButton("测试(重启后变回设置的主题)")
themeTry.clicked.connect(ProgramSetting.Try)
ProgramSetting.terminalOpen = QtWidgets.QCheckBox("使用终端打开deepin 终端)")
ProgramSetting.wineOption = QtWidgets.QLineEdit()
ProgramSetting.wineBottonA.addItems(["Auto", "win32", "win64"])
@ -842,7 +851,9 @@ class ProgramSetting():
widgetLayout.addWidget(defultBottonButton, 3, 2, 1, 1)
widgetLayout.addWidget(ProgramSetting.terminalOpen, 4, 1, 1, 1)
widgetLayout.addWidget(ProgramSetting.wineOption, 5, 1, 1, 1)
widgetLayout.addWidget(save, 6, 2, 1, 1)
widgetLayout.addWidget(ProgramSetting.theme, 6, 1, 1, 1)
widgetLayout.addWidget(themeTry, 6, 2, 1, 1)
widgetLayout.addWidget(save, 7, 2, 1, 1)
widget.setLayout(widgetLayout)
ProgramSetting.message.setCentralWidget(widget)
ProgramSetting.message.setWindowTitle(f"设置 wine 运行器 {version}")
@ -855,6 +866,9 @@ class ProgramSetting():
return
ProgramSetting.defultBotton.setText(path)
def Try():
app.setStyle(QtWidgets.QStyleFactory.create(ProgramSetting.theme.currentText()))
def Save():
# 写入容器位数设置
setting["Architecture"] = ProgramSetting.wineBottonA.currentText()
@ -863,6 +877,7 @@ class ProgramSetting():
setting["DefultBotton"] = ProgramSetting.defultBotton.text()
setting["TerminalOpen"] = ProgramSetting.terminalOpen.isChecked()
setting["WineOption"] = ProgramSetting.wineOption.text()
setting["Theme"] = ProgramSetting.theme.currentText()
try:
write_txt(get_home() + "/.config/deepin-wine-runner/WineSetting.json", json.dumps(setting))
except:
@ -882,7 +897,8 @@ defultProgramList = {
"TerminalOpen": False,
"WineOption": "",
"WineBottonDifferent": False,
"CenterWindow": False
"CenterWindow": False,
"Theme": ""
}
if not os.path.exists(get_home() + "/.config/deepin-wine-runner"): # 如果没有配置文件夹
os.mkdir(get_home() + "/.config/deepin-wine-runner") # 创建配置文件夹
@ -918,7 +934,7 @@ try:
isoPathFound = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/ISOPathFound.json")).values())
setting = json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineSetting.json"))
change = False
for i in ["Architecture", "Debug", "DefultWine", "DefultBotton", "TerminalOpen", "WineOption", "WineBottonDifferent", "CenterWindow"]:
for i in defultProgramList.keys():
if not i in setting:
change = True
setting[i] = defultProgramList[i]
@ -952,12 +968,18 @@ updateThingsString = '''※1、更换为 @PossibleVing 提供的程序图标
※2、修改了统信 Wine 生态适配活动的脚本,支持在非 UOS 系统打包
※3、修复了打包器在打包应用未指定图标的情况下显示对话框后强制退出的问题
4、修改 .net framework 3.5 的安装包,从在线版改为本地版
5、支持设置主题
6、添加 Geek Uninstaller 手动升级脚本
'''
for i in information["Thank"]:
thankText += f"{i}\n"
updateTime = "2022年07月20日"
updateTime = "2022年07月29日"
about = f'''<h1>关于</h1>
<pre>一个基于 Python3 的 Qt 制作的 wine 运行器
<pre>一个基于 Python3 的 PyQt5 制作的 Wine 运行器
一个图形化了以下命令的程序
<code>env WINEPREFIX=容器路径 winewine的路径 可执行文件路径</code>
让你可以简易方便的使用 wine
版本:{version}
适用平台:{goodRunSystem}
@ -978,6 +1000,10 @@ Qt 版本:{QtCore.qVersion()}
<h1>©2020~{time.strftime("%Y")} gfdgd xi、为什么您不喜欢熊出没和阿布呢</h1>'''
title = "wine 运行器 {}".format(version)
updateThings = "{} 更新内容:\n{}\n更新时间{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
try:
threading.Thread(target=requests.get, args=[parse.unquote(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9vcGVuL0luc3RhbGwucGhw").decode("utf-8")) + "?Version=" + version]).start()
except:
pass
###########################
@ -1139,6 +1165,7 @@ w4 = QtWidgets.QAction("删除选择的 Wine 容器")
w5 = QtWidgets.QAction("打包 wine 应用")
w6 = QtWidgets.QAction("使用官方 Wine 适配活动的脚本进行打包")
w7 = QtWidgets.QAction("从镜像获取DLL只支持Windows XP、Windows Server 2003官方安装镜像")
updateGeek = QtWidgets.QAction("从 Geek Uninstaller 官网升级程序")
wineOption.addAction(w1)
wineOption.addAction(w2)
wineOption.addAction(w3)
@ -1148,6 +1175,9 @@ wineOption.addAction(w5)
wineOption.addAction(w6)
wineOption.addSeparator()
wineOption.addAction(w7)
wineOption.addSeparator()
wineOption.addAction(updateGeek)
wineOption.addSeparator()
wm1 = wineOption.addMenu("在指定 Wine、容器安装组件")
wm1_1 = QtWidgets.QAction("在指定wine、指定容器安装 .net framework")
wm1_2 = QtWidgets.QAction("在指定wine、指定容器安装 Visual Studio C++")
@ -1202,6 +1232,7 @@ w4.triggered.connect(DeleteWineBotton)
w5.triggered.connect(BuildExeDeb)
w6.triggered.connect(UOSPackageScript)
w7.triggered.connect(GetDllFromWindowsISO.ShowWindow)
updateGeek.triggered.connect(lambda: os.system(f"'{programPath}/launch.sh' deepin-terminal -C '\"{programPath}/UpdateGeek.sh\"' --keep-open"))
w8.triggered.connect(SetDeepinFileDialogDeepin)
w9.triggered.connect(SetDeepinFileDialogDefult)
w10.triggered.connect(SetDeepinFileDialogRecovery)
@ -1281,6 +1312,7 @@ widget.show()
window.show()
# 控件设置
app.setStyle(QtWidgets.QStyleFactory.create(setting["Theme"]))
e1.addItems(findExeHistory)
e2.addItems(wineBottonHistory)
combobox1.addItems(shellHistory)

@ -10,6 +10,7 @@
"感谢 @GershonWang 在 https://github.com/gfdgd-xi/deep-wine-runner/issues/1 提供窗口居中的建议",
"感谢 @134******28 和 @sgb76 提供的新程序 GUI 布局和实现代码",
"感谢 @PossibleVing 提供的新版应用图标",
"感谢 @zhengjl 反馈的 1.7.0 中 .net framrwork 3.5 非离线版安装包的问题",
"感谢统信在 Wine 生态适配活动中提供的打包脚本",
"",
"可以从上面的各种解决方案更好的学习 Wine 生态适配,也可以看 deepin 论坛板块 https://bbs.deepin.org/module/detail/116 进行学习,最后也向各位有进行 Wine 生态适配的大佬进行由衷的感谢!",

@ -10,6 +10,7 @@
"感谢 @GershonWang 在 https://github.com/gfdgd-xi/deep-wine-runner/issues/1 提供窗口居中的建议",
"感谢 @134******28 和 @sgb76 提供的新程序 GUI 布局和实现代码",
"感谢 @PossibleVing 提供的新版应用图标",
"感谢 @zhengjl 反馈的 1.7.0 中 .net framrwork 3.5 非离线版安装包的问题",
"感谢统信在 Wine 生态适配活动中提供的打包脚本",
"",
"可以从上面的各种解决方案更好的学习 Wine 生态适配,也可以看 deepin 论坛板块 https://bbs.deepin.org/module/detail/116 进行学习,最后也向各位有进行 Wine 生态适配的大佬进行由衷的感谢!",

@ -2,10 +2,10 @@
# 使用系统默认的 python3 运行
###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本1.7.0
# 更新时间2022年07月19日
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 的 tkinter 构建
# 版本1.7.1
# 更新时间2022年07月29日
# 感谢:感谢 wine、deepin-wine 以及星火团队,提供了 wine、deepin-wine、spark-wine-devel 给大家使用,让我能做这个程序
# 基于 Python3 的 PyQt5 构建
###########################################################################################
#################
# 引入所需的库
@ -14,12 +14,14 @@ import os
import sys
import time
import json
import base64
import shutil
import requests
import threading
import traceback
import webbrowser
import subprocess
import urllib.parse as parse
import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore
import PyQt5.QtWidgets as QtWidgets
@ -807,6 +809,7 @@ class ProgramSetting():
#wineBottonDifferent = None
centerWindow = None
message = None
theme = None
def ShowWindow():
ProgramSetting.message = QtWidgets.QMainWindow()
widget = QtWidgets.QWidget()
@ -817,14 +820,20 @@ class ProgramSetting():
widgetLayout.addWidget(QtWidgets.QLabel("默认 Wine 容器:"), 3, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("使用终端打开:"), 4, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("自定义 wine 参数:"), 5, 0, 1, 1)
widgetLayout.addWidget(QtWidgets.QLabel("程序主题:"), 6, 0, 1, 1)
ProgramSetting.wineBottonA = QtWidgets.QComboBox()
ProgramSetting.wineDebug = QtWidgets.QCheckBox("开启 DEBUG 输出")
ProgramSetting.defultWine = QtWidgets.QComboBox()
ProgramSetting.defultBotton = QtWidgets.QLineEdit()
ProgramSetting.theme = QtWidgets.QComboBox()
ProgramSetting.theme.addItems(QtWidgets.QStyleFactory.keys())
ProgramSetting.theme.setCurrentText(setting["Theme"])
save = QtWidgets.QPushButton("保存")
save.clicked.connect(ProgramSetting.Save)
defultBottonButton = QtWidgets.QPushButton("浏览")
defultBottonButton.clicked.connect(ProgramSetting.Browser)
themeTry = QtWidgets.QPushButton("测试(重启后变回设置的主题)")
themeTry.clicked.connect(ProgramSetting.Try)
ProgramSetting.terminalOpen = QtWidgets.QCheckBox("使用终端打开deepin 终端)")
ProgramSetting.wineOption = QtWidgets.QLineEdit()
ProgramSetting.wineBottonA.addItems(["Auto", "win32", "win64"])
@ -842,7 +851,9 @@ class ProgramSetting():
widgetLayout.addWidget(defultBottonButton, 3, 2, 1, 1)
widgetLayout.addWidget(ProgramSetting.terminalOpen, 4, 1, 1, 1)
widgetLayout.addWidget(ProgramSetting.wineOption, 5, 1, 1, 1)
widgetLayout.addWidget(save, 6, 2, 1, 1)
widgetLayout.addWidget(ProgramSetting.theme, 6, 1, 1, 1)
widgetLayout.addWidget(themeTry, 6, 2, 1, 1)
widgetLayout.addWidget(save, 7, 2, 1, 1)
widget.setLayout(widgetLayout)
ProgramSetting.message.setCentralWidget(widget)
ProgramSetting.message.setWindowTitle(f"设置 wine 运行器 {version}")
@ -855,6 +866,9 @@ class ProgramSetting():
return
ProgramSetting.defultBotton.setText(path)
def Try():
app.setStyle(QtWidgets.QStyleFactory.create(ProgramSetting.theme.currentText()))
def Save():
# 写入容器位数设置
setting["Architecture"] = ProgramSetting.wineBottonA.currentText()
@ -863,6 +877,7 @@ class ProgramSetting():
setting["DefultBotton"] = ProgramSetting.defultBotton.text()
setting["TerminalOpen"] = ProgramSetting.terminalOpen.isChecked()
setting["WineOption"] = ProgramSetting.wineOption.text()
setting["Theme"] = ProgramSetting.theme.currentText()
try:
write_txt(get_home() + "/.config/deepin-wine-runner/WineSetting.json", json.dumps(setting))
except:
@ -882,7 +897,8 @@ defultProgramList = {
"TerminalOpen": False,
"WineOption": "",
"WineBottonDifferent": False,
"CenterWindow": False
"CenterWindow": False,
"Theme": ""
}
if not os.path.exists(get_home() + "/.config/deepin-wine-runner"): # 如果没有配置文件夹
os.mkdir(get_home() + "/.config/deepin-wine-runner") # 创建配置文件夹
@ -918,7 +934,7 @@ try:
isoPathFound = list(json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/ISOPathFound.json")).values())
setting = json.loads(readtxt(get_home() + "/.config/deepin-wine-runner/WineSetting.json"))
change = False
for i in ["Architecture", "Debug", "DefultWine", "DefultBotton", "TerminalOpen", "WineOption", "WineBottonDifferent", "CenterWindow"]:
for i in defultProgramList.keys():
if not i in setting:
change = True
setting[i] = defultProgramList[i]
@ -952,12 +968,18 @@ updateThingsString = '''※1、更换为 @PossibleVing 提供的程序图标
2修改了统信 Wine 生态适配活动的脚本支持在非 UOS 系统打包
3修复了打包器在打包应用未指定图标的情况下显示对话框后强制退出的问题
4修改 .net framework 3.5 的安装包从在线版改为本地版
5支持设置主题
6添加 Geek Uninstaller 手动升级脚本
'''
for i in information["Thank"]:
thankText += f"{i}\n"
updateTime = "2022年07月20"
updateTime = "2022年07月29"
about = f'''<h1>关于</h1>
<pre>一个基于 Python3 Qt 制作的 wine 运行器
<pre>一个基于 Python3 PyQt5 制作的 Wine 运行器
一个图形化了以下命令的程序
<code>env WINEPREFIX=容器路径 winewine的路径 可执行文件路径</code>
让你可以简易方便的使用 wine
版本{version}
适用平台{goodRunSystem}
@ -978,6 +1000,10 @@ Qt 版本:{QtCore.qVersion()}
<h1>©2020~{time.strftime("%Y")} gfdgd xi为什么您不喜欢熊出没和阿布呢</h1>'''
title = "wine 运行器 {}".format(version)
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
try:
threading.Thread(target=requests.get, args=[parse.unquote(base64.b64decode("aHR0cDovLzEyMC4yNS4xNTMuMTQ0L3NwYXJrLWRlZXBpbi13aW5lLXJ1bm5lci9vcGVuL0luc3RhbGwucGhw").decode("utf-8")) + "?Version=" + version]).start()
except:
pass
###########################
@ -1286,6 +1312,7 @@ widget.show()
window.show()
# 控件设置
app.setStyle(QtWidgets.QStyleFactory.create(setting["Theme"]))
e1.addItems(findExeHistory)
e2.addItems(wineBottonHistory)
combobox1.addItems(shellHistory)

Binary file not shown.