This commit is contained in:
2022-07-12 20:37:59 +08:00
parent d477bee819
commit 2eb05c9b7c
33 changed files with 1123 additions and 27 deletions

79
main.py
View File

@@ -2,8 +2,8 @@
# 使用系统默认的 python3 运行
###########################################################################################
# 作者gfdgd xi、为什么您不喜欢熊出没和阿布呢
# 版本1.6.0
# 更新时间2022年07月10
# 版本1.6.1
# 更新时间2022年07月11
# 感谢:感谢 wine 以及 deepin-wine 团队,提供了 wine 和 deepin-wine 给大家使用,让我能做这个程序
# 基于 Python3 的 tkinter 构建
###########################################################################################
@@ -475,6 +475,33 @@ def InstallWineFont():
def WineRunnerBugUpload():
threading.Thread(target=os.system, args=[programPath + "/deepin-wine-runner-update-bug"]).start()
def GetScreenSize():
screenInformation = []
# 使用 xrandr 进行筛选
for i in subprocess.getoutput("xrandr").split('\n'):
if not " connected " in i: # 检测连接的显示器
continue
# 获取分辨率基本信息,如
# DisplayPort-0 connected 1600x900+1280+0 (normal left inverted right x axis y axis) 434mm x 236mm
# 先判断是否为主屏幕
main = False
if "primary" in i:
main = True
# 进行进一步筛选
i = i[i.index("connected"):].replace("connected", "").replace("primary", "")
# 进行初步筛选,如
# 1600x900+1280+0 (normal left inverted right x axis y axis) 434mm x 236mm
i = i[:i.index("(")].replace(" ", "")
# 筛选为 1600x900+0+0 进行最后数值的提取
screenInformation.append([
int(i[:i.index("x")]), # 获取宽度
int(i[i.index("x") + 1 :i.index("+")]), # 获取高度
int(i[i.index("+") + 1:].split('+')[0]), # 获取显示屏 X 坐标
int(i[i.index("+") + 1:].split('+')[1]), # 获取显示屏 Y 坐标
main # 是否为主屏幕
])
return screenInformation # 返回结果
class UpdateWindow():
data = {}
def ShowWindow():
@@ -707,7 +734,8 @@ class ProgramSetting():
defultBotton = None
terminalOpen = None
wineOption = None
wineBottonDifferent = None
#wineBottonDifferent = None
centerWindow = None
def ShowWindow():
message = tk.Toplevel()
ProgramSetting.wineBottonA = tk.StringVar()
@@ -732,12 +760,16 @@ class ProgramSetting():
ttk.Label(message, text="自定义 wine 参数:").grid(row=5, column=0)
ProgramSetting.wineOption = tk.StringVar()
ProgramSetting.wineOption.set(setting["WineOption"])
ProgramSetting.centerWindow = tk.IntVar()
ProgramSetting.centerWindow.set(setting["CenterWindow"])
ttk.Label(message, text="窗口居中设置:").grid(row=6, column=0)
ttk.Checkbutton(message, text="开启窗口在主显示器居中的选项", variable=ProgramSetting.centerWindow).grid(row=6, column=1)
#ttk.Label(message, text="容器创建规则:").grid(row=6, column=0)
#ProgramSetting.wineBottonDifferent = tk.IntVar()
#ProgramSetting.wineBottonDifferent.set(setting["WineBottonDifferent"])
ttk.Checkbutton(message, text="为每一个可执行文件创建单独的容器(如果勾选的话,上面默认 Wine 容器选项将会指定这些产生的 Wine 容器默认存放目录)", variable=ProgramSetting.wineBottonDifferent)
#ttk.Checkbutton(message, text="为每一个可执行文件创建单独的容器(如果勾选的话,上面默认 Wine 容器选项将会指定这些产生的 Wine 容器默认存放目录)", variable=ProgramSetting.wineBottonDifferent)
ttk.Entry(message, width=40, textvariable=ProgramSetting.wineOption).grid(row=5, column=1, columnspan=2)
ttk.Button(message, text="保存", command=ProgramSetting.Save).grid(row=6, column=0, columnspan=3, sticky=tk.E)
ttk.Button(message, text="保存", command=ProgramSetting.Save).grid(row=7, column=0, columnspan=3, sticky=tk.E)
# 设置
message.title(f"设置 wine 运行器 {version}")
# 显示
@@ -757,7 +789,8 @@ class ProgramSetting():
setting["DefultBotton"] = ProgramSetting.defultBotton.get()
setting["TerminalOpen"] = bool(ProgramSetting.terminalOpen.get())
setting["WineOption"] = ProgramSetting.wineOption.get()
setting["WineBottonDifferent"] = bool(ProgramSetting.wineBottonDifferent.get())
#setting["WineBottonDifferent"] = bool(ProgramSetting.wineBottonDifferent.get())
setting["CenterWindow"] = bool(ProgramSetting.centerWindow.get())
try:
write_txt(get_home() + "/.config/deepin-wine-runner/WineSetting.json", json.dumps(setting))
except:
@@ -776,7 +809,8 @@ defultProgramList = {
"DefultBotton" : get_home() + "/.wine",
"TerminalOpen": False,
"WineOption": "",
"WineBottonDifferent": False
"WineBottonDifferent": False,
"CenterWindow": False
}
if not os.path.exists(get_home() + "/.config/deepin-wine-runner"): # 如果没有配置文件夹
os.mkdir(get_home() + "/.config/deepin-wine-runner") # 创建配置文件夹
@@ -812,7 +846,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"]:
for i in ["Architecture", "Debug", "DefultWine", "DefultBotton", "TerminalOpen", "WineOption", "WineBottonDifferent", "CenterWindow"]:
if not i in setting:
change = True
setting[i] = defultProgramList[i]
@@ -847,18 +881,13 @@ tips = '''提示:
exe路径\' 参数 \'
即可(单引号需要输入)
5、wine 容器如果没有指定,则会默认为 ~/.wine'''
updateThingsString = '''※1、新增程序感谢、谢明以及程序的建议和问题反馈和内置更新程序
2、支持 winetricks 指定 Wine 打开
3、新增窗口透明工具,感谢@a2035274 和 @虚幻的早晨 在论坛的讨论
4、支持在指定容器、Wine 安装 MSXML
※5、支持启用/关闭 opengl感谢@zhangs 在论坛发帖)以及支持安装/卸载 winbind
※6、添加云沙箱的网站链接快捷方式
※7、支持从星火应用商店源安装 Windows 常见字体
8、优化窗口布局以及默认显示位置
9、支持打开指定容器、Wine 的资源管理器
updateThingsString = '''※1、添加 @delsin 和 @神末shenmo 建议的 postrm 脚本
2、将 pip 由阿里源改为华为源,提升下载速度
3、优化多屏窗口居中问题,并设置居中选项为选开防止错误
4、修复 1.6.0 程序无法保存设置的问题
'''
title = "wine 运行器 {}".format(version)
updateTime = "2022年07月10"
updateTime = "2022年07月11"
updateThings = "{} 更新内容:\n{}\n更新时间:{}".format(version, updateThingsString, updateTime, time.strftime("%Y"))
thankText = ""
for i in information["Thank"]:
@@ -994,6 +1023,7 @@ if len(sys.argv) > 1 and sys.argv[1]:
menu.configure(activebackground="dodgerblue")
programmenu.configure(activebackground="dodgerblue")
wineOption.configure(activebackground="dodgerblue")
safeWebsize.configure(activebackground="dodgerblue")
help.configure(activebackground="dodgerblue")
e1['value'] = findExeHistory
e2['value'] = wineBottonHistory
@@ -1031,8 +1061,15 @@ o1.grid(row=2, column=1)
returnText.grid(row=6, column=0, columnspan=3)
# 启动窗口
window.pack(fill=tk.BOTH, expand = True)
# 窗口居中
win.update()
win.geometry(f"{win.winfo_width()}x{win.winfo_height()}+{win.winfo_screenwidth() // 2 - win.winfo_width() // 2}+{win.winfo_screenheight() // 2 - win.winfo_height() // 2}")
if setting["CenterWindow"]:
try:
# 窗口居中(如果设置开启)
win.update()
# 获取主显示器分辨率
for i in GetScreenSize():
if i[4]:
win.geometry(f"{win.winfo_width()}x{win.winfo_height()}+{i[2] + (i[0] // 2 - win.winfo_width() // 2)}+{i[3] + (i[1] // 2 - win.winfo_height() // 2)}")
except:
print("设置居中错误,忽略")
# 显示窗口
win.mainloop()