Initial commit with README
This commit is contained in:
8
sys/lib/MikDOS/DOS/Command.txt
Normal file
8
sys/lib/MikDOS/DOS/Command.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
shutdown 关闭终端
|
||||
help 帮助
|
||||
startMik 启动MikOS
|
||||
setting 设置
|
||||
repair 修复运行环境
|
||||
time 时间
|
||||
open 打开
|
||||
restart 重启
|
||||
10
sys/lib/MikDOS/DOS/file/Command.txt
Normal file
10
sys/lib/MikDOS/DOS/file/Command.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
shutdown 关闭终端
|
||||
help 帮助
|
||||
startMik 启动MikOS
|
||||
setting 设置
|
||||
repair 修复运行环境
|
||||
time 时间
|
||||
open 打开
|
||||
restart 重启
|
||||
about 关于
|
||||
setting 设置
|
||||
1
sys/lib/MikDOS/DOS/file/config.json
Normal file
1
sys/lib/MikDOS/DOS/file/config.json
Normal file
@@ -0,0 +1 @@
|
||||
{"Debug":"True"}
|
||||
2
sys/lib/MikDOS/DOS/file/config_eg.txt
Normal file
2
sys/lib/MikDOS/DOS/file/config_eg.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
选项名称 值1(最小值)/值2(最大值)
|
||||
Debug True/False
|
||||
31
sys/lib/MikDOS/DOS/lib/DOSLib.py
Normal file
31
sys/lib/MikDOS/DOS/lib/DOSLib.py
Normal file
@@ -0,0 +1,31 @@
|
||||
"""
|
||||
本程序为MikDOS的运行库
|
||||
变量path为DOS工作目录,p_path为DOS上级目录
|
||||
"""
|
||||
import os, time
|
||||
|
||||
|
||||
|
||||
#帮助指令
|
||||
def helpdos(path):
|
||||
with open(path + '\\DOS\\file\\Command.txt', mode='r', encoding='utf-8') as cmd:
|
||||
file = cmd.read()
|
||||
print(file)
|
||||
#启动MikOS
|
||||
def startmik(p_path):
|
||||
os.startfile(p_path + '\\logon.pyw')
|
||||
#打开设置
|
||||
def setting(p_path):
|
||||
os.startfile(p_path + '\\setting\\setting.pyw')
|
||||
#打印时间
|
||||
def p_time():
|
||||
print(time.ctime())
|
||||
#延时打印(故意滴doge)
|
||||
def show_later():
|
||||
time.sleep(1)
|
||||
def dos_config(path):
|
||||
print('请阅读下面的教程')
|
||||
print('---------------------------------')
|
||||
with open(path + '\\DOS\\file\\config_eg.txt', mode='r', encoding='utf-8') as config_eg:
|
||||
file_con_eg = config_eg.read()
|
||||
print(file_con_eg)
|
||||
BIN
sys/lib/MikDOS/DOS/lib/__pycache__/DOSLib.cpython-311.pyc
Normal file
BIN
sys/lib/MikDOS/DOS/lib/__pycache__/DOSLib.cpython-311.pyc
Normal file
Binary file not shown.
BIN
sys/lib/MikDOS/DOS/lib/__pycache__/DOSLib.cpython-312.pyc
Normal file
BIN
sys/lib/MikDOS/DOS/lib/__pycache__/DOSLib.cpython-312.pyc
Normal file
Binary file not shown.
45
sys/lib/MikDOS/MikDOS_Main.py
Normal file
45
sys/lib/MikDOS/MikDOS_Main.py
Normal file
@@ -0,0 +1,45 @@
|
||||
import os, sys
|
||||
import DOS.lib.DOSLib as DOSLib
|
||||
from DOS.lib.DOSLib import show_later
|
||||
|
||||
|
||||
# 获取工作目录、上级目录
|
||||
path = os.path.dirname(os.path.realpath(sys.argv[0]))
|
||||
|
||||
parent_path = os.path.abspath('.')
|
||||
#打印系统信息
|
||||
|
||||
print('MikDOS V1')
|
||||
print('© Ark Krin Studio MikOS Dev Team 保留所有权利')
|
||||
while True:
|
||||
#获取用户输入
|
||||
inp = input('MikDOS>>')
|
||||
#统一输入格式
|
||||
comd = inp.lower()
|
||||
#判断
|
||||
#帮助
|
||||
if comd == 'help':
|
||||
show_later()
|
||||
DOSLib.helpdos(path)
|
||||
#关机
|
||||
elif comd == 'shutdown':
|
||||
print('正在关闭')
|
||||
show_later()
|
||||
sys.exit()
|
||||
#启动MikOS
|
||||
elif comd == 'startmik':
|
||||
show_later()
|
||||
DOSLib.startmik(parent_path)
|
||||
sys.exit()
|
||||
#打开设置
|
||||
elif comd == 'setting':
|
||||
show_later()
|
||||
DOSLib.setting(parent_path)
|
||||
#打印时间
|
||||
elif comd == 'time':
|
||||
show_later()
|
||||
DOSLib.p_time()
|
||||
#未输入指令
|
||||
else:
|
||||
print(inp, '不是一个可以执行的命令')
|
||||
continue
|
||||
28
sys/lib/RUN-MIKSC/__init__.mia
Normal file
28
sys/lib/RUN-MIKSC/__init__.mia
Normal file
@@ -0,0 +1,28 @@
|
||||
import tkinter as tk
|
||||
try:
|
||||
#绝对会报错,只是用于高亮提示,可以删除,真正的导入部分在Kernel
|
||||
import sys.kernel.UI as UI
|
||||
from sys.kernel.tools import *
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
class Run_Miksc:
|
||||
def __init__(self):
|
||||
self.File=kw["f"]
|
||||
self.json=json.loads(openr(self.File))
|
||||
if "File" in self.json:
|
||||
OperatingSystemHandle.StartFile(self.json["File"])
|
||||
elif "SApp" in self.json and "Start" in self.json:
|
||||
f=""
|
||||
if "F" in self.json:
|
||||
f=self.json["F"]
|
||||
OperatingSystemHandle.StartSysApp(self.json["SApp"],self.json["Start"],f=f)
|
||||
elif "App" in self.json and "Start" in self.json:
|
||||
f=""
|
||||
if "F" in self.json:
|
||||
f=self.json["F"]
|
||||
OperatingSystemHandle.StartApp(self.json["SApp"],self.json["Start"],f=f)
|
||||
else:
|
||||
pass
|
||||
Run_Miksc()
|
||||
BIN
sys/lib/RUN-TXT/ICO.png
Normal file
BIN
sys/lib/RUN-TXT/ICO.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 670 B |
180
sys/lib/RUN-TXT/__init__.mia
Normal file
180
sys/lib/RUN-TXT/__init__.mia
Normal file
@@ -0,0 +1,180 @@
|
||||
import tkinter as tk
|
||||
try:
|
||||
#绝对会报错,只是用于高亮提示,可以删除,真正的导入部分在Kernel
|
||||
import sys.kernel.UI as UI
|
||||
from sys.kernel.tools import *
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class Notepad_base(UI.Window):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.TitleText.config(text="记事本")
|
||||
self.geometry(f'750x550+{self.winfo_screenwidth() // 4}+{self.winfo_screenheight() // 8}')
|
||||
|
||||
self.Menu=UI.Menu(self)
|
||||
|
||||
""" 文件菜单 """
|
||||
self.fileMenu = tk.Menu(self, tearoff=0)
|
||||
self.Menu.add_sub(label='文件(F)', menu=self.fileMenu)
|
||||
self.fileMenu.add_command(label=f'新建(N){" " * 28}Ctrl+N')
|
||||
self.fileMenu.add_command(label=f'新窗口(W){" " * 16}Ctrl+Shift+N')
|
||||
self.fileMenu.add_command(label=f'打开(O)...{" " * 26}Ctrl+O')
|
||||
self.fileMenu.add_command(label=f'保存(S){" " * 29}Ctrl+S')
|
||||
self.fileMenu.add_command(label=f'另存为(A)...{" " * 15}Ctrl+Shift+S')
|
||||
self.fileMenu.add_command(label=f'页面设置(U)...')
|
||||
self.fileMenu.add_command(label=f'打印(P)...{" " * 27}Ctrl+P')
|
||||
self.fileMenu.add_command(label=f'退出(X)')
|
||||
|
||||
""" 编辑菜单 """
|
||||
# 创建二级菜单栏(此时为空)
|
||||
self.editMenu = tk.Menu(self, tearoff=0)
|
||||
# 向一级菜单栏添加 编辑 项,并与二级菜单(editMenu)建立级联关系(从属/上下级)
|
||||
self.Menu.add_sub(label='编辑(E)', menu=self.editMenu)
|
||||
# 编辑的二级菜单栏添加 ... 项
|
||||
self.editMenu.add_command(label=f'撤销(U){" " * 26}Ctrl+Z')
|
||||
self.editMenu.add_command(label=f'剪切(T){" " * 26}Ctrl+X')
|
||||
self.editMenu.add_command(label=f'复制(C){" " * 26}Ctrl+C')
|
||||
self.editMenu.add_command(label=f'粘贴(V){" " * 26}Ctrl+V')
|
||||
self.editMenu.add_command(label=f'删除(L){" " * 27}Delete')
|
||||
self.editMenu.add_command(label=f'使用 Bing 搜索...{" " * 14}Ctrl+E')
|
||||
self.editMenu.add_command(label=f'查找(F)...{" " * 25}Ctrl+F')
|
||||
self.editMenu.add_command(label=f'查找上一个(N){" " * 23}F3')
|
||||
self.editMenu.add_command(label=f'查找下一个(V){" " * 15}Shift+F3')
|
||||
self.editMenu.add_command(label=f'替换(R)...{" " * 23}Ctrl+H')
|
||||
self.editMenu.add_command(label=f'转到(G)...{" " * 23}Ctrl+G')
|
||||
self.editMenu.add_command(label=f'全选(A){" " * 26}Ctrl+A')
|
||||
self.editMenu.add_command(label=f'时间/日期(D){" " * 25}F5')
|
||||
|
||||
|
||||
""" 格式菜单 """
|
||||
# 全局变量
|
||||
self.word_wrap = tk.BooleanVar(value=True) # 是否选择勾上
|
||||
# 创建二级菜单栏(此时为空)
|
||||
self.formatMenu = tk.Menu(self, tearoff=0)
|
||||
# 向一级菜单栏添加 格式 项,并与二级菜单(formatMenu)建立级联关系(从属/上下级)
|
||||
self.Menu.add_sub(label='格式(O)', menu=self.formatMenu)
|
||||
# 格式的二级菜单栏添加 ... 项
|
||||
self.formatMenu.add_checkbutton(label='自动换行(W)', variable=self.word_wrap, onvalue=1, offvalue=0)
|
||||
self.formatMenu.add_command(label='字体(F)...')
|
||||
|
||||
""" 查看菜单 """
|
||||
# 全局变量
|
||||
self.state = tk.BooleanVar(value=True)
|
||||
# 创建二级菜单栏(此时为空)
|
||||
self.viewMenu = tk.Menu(self, tearoff=0)
|
||||
# 向一级菜单栏添加 查看 项,并与二级菜单(checkMenu)建立级联关系(从属/上下级)
|
||||
self.Menu.add_sub(label='查看(V)', menu=self.viewMenu)
|
||||
# 创建三级菜单栏(此时为空)
|
||||
self.threeViewMenu = tk.Menu(self.viewMenu, tearoff=0)
|
||||
# 查看的二级菜单栏添加 ... 项
|
||||
self.viewMenu.add_cascade(label='缩放(Z)', menu=self.threeViewMenu)
|
||||
self.viewMenu.add_checkbutton(label='状态栏(S)', variable=self.state, onvalue=1, offvalue=0)
|
||||
# 缩放的三级菜单栏添加 ... 项
|
||||
self.threeViewMenu.add_command(label=f'放大(I){" " * 14}Ctrl + 加号')
|
||||
self.threeViewMenu.add_command(label=f'缩小(O){" " * 13}Ctrl + 减号')
|
||||
self.threeViewMenu.add_command(label=f'恢复默认缩放{" " * 11}Ctrl+0')
|
||||
|
||||
""" 帮助菜单 """
|
||||
# 创建二级菜单栏(此时为空)
|
||||
self.helpMenu = tk.Menu(self, tearoff=0)
|
||||
# 向一级菜单栏添加 帮助 项,并与二级菜单(helpMenu)建立级联关系(从属/上下级)
|
||||
self.Menu.add_sub(label='帮助(H)', menu=self.helpMenu)
|
||||
# 帮助的二级菜单栏添加 ... 项
|
||||
self.helpMenu.add_command(label='查看帮助(H)')
|
||||
self.helpMenu.add_command(label='发送反馈(F)')
|
||||
self.helpMenu.add_command(label='关于文本编辑器(A)')
|
||||
# 菜单之间插入分隔线
|
||||
self.helpMenu.insert_separator(2)
|
||||
|
||||
""" 右键菜单 """
|
||||
# 创建二级菜单栏(此时为空)
|
||||
self.rightKeyMenu = tk.Menu(self, tearoff=0)
|
||||
# 创建三级菜单栏(此时为空)
|
||||
self.threeRightMenu = tk.Menu(self.rightKeyMenu, tearoff=0)
|
||||
# 右键菜单的二级菜单栏添加 ... 项
|
||||
self.rightKeyMenu.add_command(label='撤销(U)')
|
||||
self.rightKeyMenu.add_command(label='剪切(T)')
|
||||
self.rightKeyMenu.add_command(label='复制(C)')
|
||||
self.rightKeyMenu.add_command(label='粘贴(P)')
|
||||
self.rightKeyMenu.add_command(label='删除(D)')
|
||||
self.rightKeyMenu.add_command(label='全选(A)')
|
||||
self.rightKeyMenu.add_checkbutton(label='从右到左的阅读顺序(R)')
|
||||
self.rightKeyMenu.add_checkbutton(label='显示 Unicode 控制字符(S)')
|
||||
self.rightKeyMenu.add_cascade(label='插入 Unicode 控制字符(I)', menu=self.threeRightMenu)
|
||||
self.rightKeyMenu.add_command(label='关闭输入法(L)')
|
||||
self.rightKeyMenu.add_command(label='汉字重选(R)')
|
||||
self.rightKeyMenu.add_command(label='使用 Bing 搜索(B)...')
|
||||
# 插入 Unicode 控制字符(I)的三级菜单栏添加 ... 项
|
||||
self.threeRightMenu.add_command(label='特殊字符1')
|
||||
self.threeRightMenu.add('command', label='特殊字符2')
|
||||
self.threeRightMenu.insert(3, 'command', label='特殊字符3')
|
||||
# ...
|
||||
# 菜单之间插入分隔线
|
||||
self.rightKeyMenu.insert_separator(1)
|
||||
self.rightKeyMenu.insert_separator(6)
|
||||
self.rightKeyMenu.insert_separator(8)
|
||||
self.rightKeyMenu.insert_separator(12)
|
||||
self.rightKeyMenu.insert_separator(15)
|
||||
|
||||
# 捆绑鼠标右键事件
|
||||
self.bind('<Button-3>', lambda event: self.rightKeyEvent(event, self.rightKeyMenu))
|
||||
|
||||
""" 底行内容显示 """
|
||||
# 底部内容框架
|
||||
self.bottomFrame = tk.Frame(self.Widget)
|
||||
self.bottomFrame.pack(side=tk.BOTTOM, fill='both')
|
||||
# 状态栏框架
|
||||
self.stateFrame = tk.Frame(self.bottomFrame)
|
||||
self.stateFrame.pack(side=tk.BOTTOM, fill='both')
|
||||
# 字符编码
|
||||
self.charCodeLabel = tk.Label(self.stateFrame,text=' UTF-8',width=16,anchor='w')
|
||||
self.charCodeLabel.pack(side=tk.RIGHT)
|
||||
# 换行方式(回车换行)
|
||||
self.CRLFlabel = tk.Label(self.stateFrame,text=' Windows (CRLF)',width=17,anchor='w')
|
||||
self.CRLFlabel.pack(side=tk.RIGHT)
|
||||
# 字体大小
|
||||
self.fontSizeLabel = tk.Label(self.stateFrame, text='100%', width=6)
|
||||
self.fontSizeLabel.pack(side=tk.RIGHT)
|
||||
# 光标位置
|
||||
self.locationLabel = tk.Label(self.stateFrame,text=' 第 1 行,第 1 列',width=19,anchor='w')
|
||||
self.locationLabel.pack(side=tk.RIGHT)
|
||||
|
||||
# 右侧滚动条
|
||||
self.rightScrollbar = tk.Scrollbar(self.Widget, orient='vertical')
|
||||
self.rightScrollbar.pack(side=tk.RIGHT, fill='both')
|
||||
# 底侧滚动条
|
||||
self.bottomScrollbar = tk.Scrollbar(self.bottomFrame, orient="horizontal")
|
||||
self.bottomScrollbar.pack(side=tk.BOTTOM, fill='both')
|
||||
|
||||
# 文本编辑区域
|
||||
self.text = tk.Text(self.Widget)
|
||||
self.text.pack(expand=True, fill='both')
|
||||
# 将焦点设置到Text控件上
|
||||
self.text.focus()
|
||||
|
||||
# 修改窗口标题的图片
|
||||
self.notepad_photo = tk.PhotoImage(file=app_info["path"]+"ICO.png")
|
||||
self.TitleICO.config(image=self.notepad_photo)
|
||||
self.TaskICO.config(image=self.notepad_photo)
|
||||
self.TaskICO.update()
|
||||
|
||||
self.open()
|
||||
# Text文本鼠标右键菜单事件
|
||||
def rightKeyEvent(self, event, object):
|
||||
object.post(event.x_root, event.y_root)
|
||||
|
||||
def open(self):
|
||||
if os.path.isfile(kw["f"]):
|
||||
self.text.insert("insert",openr(kw["f"],2))
|
||||
# 代码测试
|
||||
if __name__ == '__main__':
|
||||
ui = Notepad_base() # 实例化记事本UI
|
||||
ui.mainloop() # 循环窗口运行
|
||||
else:
|
||||
print(f'导入【{__name__}】')
|
||||
|
||||
BIN
sys/lib/calc/ICO.png
Normal file
BIN
sys/lib/calc/ICO.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 261 B |
123
sys/lib/calc/__init__.mia
Normal file
123
sys/lib/calc/__init__.mia
Normal file
@@ -0,0 +1,123 @@
|
||||
import tkinter as tk
|
||||
try:
|
||||
#绝对会报错,只是用于高亮提示,可以删除,真正的导入部分在Kernel
|
||||
import sys.kernel.UI as UI
|
||||
from sys.kernel.tools import *
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
|
||||
# 定义主窗口
|
||||
root = UI.Window()
|
||||
root.TitleText.config(text="计算器")
|
||||
root.geometry("250x360")
|
||||
root.resizable(False, False)
|
||||
|
||||
# 修改窗口标题的图片
|
||||
notepad_photo = ImageTk.PhotoImage(Image.open(app_info["path"]+"ICO.png").resize([12,16]))
|
||||
root.TitleICO.config(image=notepad_photo)
|
||||
root.TaskICO.config(image=notepad_photo)
|
||||
root.TaskICO.update()
|
||||
|
||||
def Button_main(text,bg='#D4F1F4',width=3):
|
||||
return tk.Button(root, text=text, font=("Arial", 14), width=width, height=1, bd=4, bg=bg,command=lambda :yunsuan(text),overrelief='sunken',activebackground="light yellow")
|
||||
|
||||
|
||||
c = tk.Canvas(root, width=250, height=340)
|
||||
c.yunsuan = ''
|
||||
c.color = 'black'
|
||||
|
||||
|
||||
def update():
|
||||
c.create_rectangle(0, 0, 250, 340, fill='light gray', outline=None)
|
||||
c.create_rectangle(20, 20, 230, 70, width=2, fill='white',outline='black')
|
||||
if c.yunsuan == 'ERROR':
|
||||
c.color = 'tomato'
|
||||
else:
|
||||
c.color = 'black'
|
||||
c.create_text(225,70, text=c.yunsuan,font=('arial',30),fill = c.color,anchor='se')
|
||||
c.create_rectangle(0,19,18,70,fill='light gray',outline='light gray')
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def yunsuan(num):
|
||||
num = str(num)
|
||||
if c.yunsuan == 'ERROR' and num != 'CE':
|
||||
print('Debug:ERROR状态下无法运算')
|
||||
return
|
||||
|
||||
|
||||
if num in '0123456789+-*/.':
|
||||
if c.yunsuan == 0 or c.yunsuan =='0':
|
||||
c.yunsuan = num
|
||||
else:
|
||||
c.yunsuan += num
|
||||
elif num == '←':
|
||||
c.yunsuan = ''.join(list(c.yunsuan)[0:-1])
|
||||
elif num == 'CE':
|
||||
c.yunsuan = '0'
|
||||
elif num == '=':
|
||||
try:
|
||||
c.yunsuan = str(eval(c.yunsuan))
|
||||
except:
|
||||
c.yunsuan = 'ERROR'
|
||||
finally:
|
||||
print('Debug:try语句资源释放成功')
|
||||
print('Deubg:显示框内容',c.yunsuan)
|
||||
update()
|
||||
|
||||
# 定义数字按钮
|
||||
btn_1 = Button_main('1')
|
||||
btn_2 = Button_main('2')
|
||||
btn_3 = Button_main('3')
|
||||
btn_4 = Button_main('4')
|
||||
btn_5 = Button_main('5')
|
||||
btn_6 = Button_main('6')
|
||||
btn_7 = Button_main('7')
|
||||
btn_8 = Button_main('8')
|
||||
btn_9 = Button_main('9')
|
||||
btn_0 = Button_main('0',width=9)
|
||||
btn_point = Button_main('.')
|
||||
|
||||
|
||||
# 定义操作符按钮
|
||||
btn_add = Button_main('+')
|
||||
btn_sub = Button_main('-')
|
||||
btn_mul = Button_main('*')
|
||||
btn_div = Button_main('/')
|
||||
btn_eq = Button_main('=',width=8)
|
||||
btn_ce = Button_main(text='CE',bg='#F7AF9D')
|
||||
btn_back = Button_main(text='←')
|
||||
|
||||
|
||||
btn_1.place(x=10, y=100)
|
||||
btn_2.place(x=70, y=100)
|
||||
btn_3.place(x=130, y=100)
|
||||
btn_4.place(x=10, y=150)
|
||||
btn_5.place(x=70, y=150)
|
||||
btn_6.place(x=130, y=150)
|
||||
btn_7.place(x=10, y=200)
|
||||
btn_8.place(x=70, y=200)
|
||||
btn_9.place(x=130, y=200)
|
||||
btn_0.place(x=10, y=250)
|
||||
btn_point.place(x=70, y=300)
|
||||
|
||||
|
||||
|
||||
btn_add.place(x=190, y=100)
|
||||
btn_sub.place(x=190, y=150)
|
||||
btn_mul.place(x=190, y=200)
|
||||
btn_div.place(x=190, y=250)
|
||||
btn_eq.place(x=130, y=300)
|
||||
btn_ce.place(x=10, y=300)
|
||||
btn_back.place(x=130,y=250)
|
||||
|
||||
c.pack()
|
||||
# 运行主循环
|
||||
|
||||
update()
|
||||
root.mainloop()
|
||||
152
sys/lib/explorer/__init__.mia
Normal file
152
sys/lib/explorer/__init__.mia
Normal file
@@ -0,0 +1,152 @@
|
||||
import tkinter as tk
|
||||
try:
|
||||
#绝对会报错,只是用于高亮提示,可以删除,真正的导入部分在Kernel
|
||||
import sys.kernel.UI as UI
|
||||
from sys.kernel.tools import *
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
|
||||
def Omit(s):
|
||||
return s[:15] + '...' if len(s) > 15 else s
|
||||
|
||||
class DesktopFile:
|
||||
def __init__(self,c,username,i,desktop_imgs,nx,ny,dx,dy,global_dict,f,startapp):
|
||||
self.root=c.master
|
||||
self.username=username
|
||||
self.new_x=nx
|
||||
self.new_y=ny
|
||||
self.desktop_x=dx
|
||||
self.desktop_y=dy
|
||||
self.global_dict=global_dict
|
||||
self.f=f
|
||||
self.c=c
|
||||
self.i=i
|
||||
self.StartSysApp=startapp
|
||||
self.suffix=i.split(".")[-1].lower()
|
||||
if os.path.isfile(OperatingSystemHandle.UsersSite+self.username+"/Desktop/"+self.i):
|
||||
if self.suffix != i:
|
||||
if self.suffix in OperatingSystemHandle.suffixs:
|
||||
self.desktop_img = Image.open(OperatingSystemHandle.images_mik+OperatingSystemHandle.suffixs[self.suffix]+".ico")
|
||||
else:
|
||||
self.desktop_img = Image.open(OperatingSystemHandle.images_mik+OperatingSystemHandle.suffixs["[None]*"]+".ico")
|
||||
else:
|
||||
if i in OperatingSystemHandle.filesuffixs:
|
||||
self.desktop_img = Image.open(OperatingSystemHandle.images_mik+OperatingSystemHandle.filesuffixs[self.suffix]+".ico")
|
||||
else:
|
||||
self.desktop_img = Image.open(OperatingSystemHandle.images_mik+OperatingSystemHandle.suffixs["[None]*"]+".ico")
|
||||
if os.path.isdir(OperatingSystemHandle.UsersSite+self.username+"/Desktop/"+self.i):
|
||||
self.desktop_img = Image.open(OperatingSystemHandle.images_mik+OperatingSystemHandle.suffixs["[Dir]*"]+".ico")
|
||||
self.desktop_img = self.desktop_img.resize((90,90))
|
||||
if os.path.isfile(OperatingSystemHandle.UsersSite+self.username+"/Desktop/"+self.i):
|
||||
if self.suffix == "miksc":
|
||||
try:
|
||||
self.json=json.loads(openr(OperatingSystemHandle.UsersSite+self.username+"/Desktop/"+self.i))
|
||||
if "display-ico" in self.json:
|
||||
if "App" in self.json and "Start" in self.json:
|
||||
self.desktop_img = self.resize_and_return(Image.open(OperatingSystemHandle.NorAppSite+"/"+self.json["App"]+"/"+self.json["display-ico"]))
|
||||
if "SApp" in self.json and "Start" in self.json:
|
||||
self.desktop_img = self.resize_and_return(Image.open(OperatingSystemHandle.SysAppSite+"/"+self.json["SApp"]+"/"+self.json["display-ico"]))
|
||||
except:
|
||||
pass
|
||||
self.desktop_img = ImageTk.PhotoImage(self.desktop_img)
|
||||
desktop_imgs.append(self.desktop_img)
|
||||
self.desktop_btn = self.c.create_image((self.new_x-1)*100+50, 50+self.new_y*100, image=self.desktop_img)
|
||||
self.c.create_text((self.new_x-1)*100+50, (self.new_y+1)*100, text=Omit(i),font=('arial',10),fill="white")
|
||||
#self.layer.move(text, self.width//2-(self.layer.bbox(text)[2] - self.layer.bbox(text)[0])+27.5+add_xy, 0+add_xy)
|
||||
self.c.tag_bind(self.desktop_btn,'<Button-1>',self.Start)
|
||||
self.c.tag_bind(self.desktop_btn, '<Enter>', self.mouse_hand)
|
||||
self.c.tag_bind(self.desktop_btn, '<Leave>', self.mouse_arrow)
|
||||
if self.new_y < self.desktop_y-1:self.new_y+=1
|
||||
else:
|
||||
self.new_y=0
|
||||
self.new_x+=1
|
||||
if self.new_x >= self.desktop_x-1:
|
||||
self.f.ERROR("Desktop Draw","File Across Desktop Max","Main",[["0x00","0x00"]],"0x00")
|
||||
def mouse_hand(self,*args):
|
||||
self.root.config(cursor = 'hand2')
|
||||
def mouse_arrow(self,*args):
|
||||
self.root.config(cursor = 'arrow')
|
||||
def Start(self,event):
|
||||
OperatingSystemHandle.StartFile(OperatingSystemHandle.UsersSite+self.username+"/Desktop/"+self.i)
|
||||
def resize_and_return(self,image):
|
||||
width, height = image.size
|
||||
ratio = 50 / width
|
||||
new_height = int(height * ratio)
|
||||
resized_image = image.resize((50, new_height))
|
||||
return resized_image
|
||||
|
||||
|
||||
|
||||
class LogoPopUp(tk.Toplevel):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.overrideredirect(True)
|
||||
self.withdraw()
|
||||
self.config(bg=OperatingSystemHandle.color["tasks"]["win"])
|
||||
self.width=int(OperatingSystemHandle.root.winfo_width()*0.35)
|
||||
self.height=int(OperatingSystemHandle.root.winfo_height()*0.9)
|
||||
self.Tasks=tk.Frame
|
||||
self.geometry(f"{self.width}x{self.height}")
|
||||
self.Is_Focus()
|
||||
self.EmbedParentWindow()
|
||||
def Draw(self,event=tk.Event):
|
||||
if self.state() == "withdrawn":
|
||||
self.deiconify()
|
||||
self.geometry(f"+{event.widget.winfo_x()}+{OperatingSystemHandle.root.winfo_height()-self.Tasks.winfo_height()-self.height}")
|
||||
self.focus()
|
||||
@asyncs
|
||||
def Is_Focus(self):
|
||||
while True:
|
||||
if self.focus_get() != self:
|
||||
self.withdraw()
|
||||
time.sleep(0.1)
|
||||
@asyncs
|
||||
def EmbedParentWindow(self):
|
||||
#while True:
|
||||
# if master:
|
||||
# u32.SetParent(u32.GetParent(self.winfo_id()),master.winfo_id())
|
||||
# time.sleep(1)
|
||||
for i in range(10):
|
||||
u32.SetParent(u32.GetParent(self.winfo_id()),OperatingSystemHandle.root.winfo_id())
|
||||
class Explorer:
|
||||
def __init__(self):
|
||||
desktop_imgs=[]
|
||||
self.c = tk.Canvas(OperatingSystemHandle.root,width=OperatingSystemHandle.root.winfo_width(),height=OperatingSystemHandle.root.winfo_height()-30,highlightthickness=0)
|
||||
self.c.pack()
|
||||
|
||||
UI.master=self.c
|
||||
self.Tasks = tk.Frame(OperatingSystemHandle.root,height=30,bg=OperatingSystemHandle.color["tasks"]["bg"])
|
||||
self.Tasks.pack(side="bottom",fill="x")
|
||||
UI.TasksFrame=self.Tasks
|
||||
self.TasksIconImg=ImageTk.PhotoImage(Image.open(OperatingSystemHandle.images_mik+'/[MICO].png').resize([30,30]))
|
||||
self.TasksIconHovImg=ImageTk.PhotoImage(Image.open(OperatingSystemHandle.images_mik+'/[EICO].png').resize([30,30]))
|
||||
|
||||
self.LPU=LogoPopUp()
|
||||
self.LPU.Tasks=self.Tasks
|
||||
|
||||
self.TasksIconButton=tk.Button(self.Tasks,image=self.TasksIconImg,bg=OperatingSystemHandle.color["tasks"]["bg"],bd=0)
|
||||
self.TasksIconButton.pack(side="left")
|
||||
self.TasksIconButton.bind("<Enter>", lambda _: self.TasksIconButton.config(image=self.TasksIconHovImg))
|
||||
self.TasksIconButton.bind("<Leave>", lambda _: self.TasksIconButton.config(image=self.TasksIconImg))
|
||||
self.TasksIconButton.bind("<Button-1>",self.LPU.Draw)
|
||||
|
||||
self.bgimg = Image.open(OperatingSystemHandle.bg)
|
||||
self.bgimg = self.bgimg.resize((OperatingSystemHandle.root.winfo_width(), OperatingSystemHandle.root.winfo_height()))
|
||||
self.bgimg = ImageTk.PhotoImage(self.bgimg)
|
||||
|
||||
self.background = self.c.create_image(0, 0, anchor='nw', image=self.bgimg)
|
||||
|
||||
self.desktop_x=OperatingSystemHandle.root.winfo_width()//90-2
|
||||
self.desktop_y=OperatingSystemHandle.root.winfo_height()//90-2
|
||||
|
||||
self.new_x=1
|
||||
self.new_y=0
|
||||
DisplayContent=tk.Canvas(OperatingSystemHandle.root,width=OperatingSystemHandle.root.winfo_width(),height=OperatingSystemHandle.root.winfo_height()-30,highlightthickness=0)
|
||||
DisplayContent.pack(fill="both",expand=True)
|
||||
for i in os.listdir(OperatingSystemHandle.UsersSite+OperatingSystemHandle.username+"/Desktop"):
|
||||
i=DesktopFile(self.c,OperatingSystemHandle.username,i,desktop_imgs,self.new_x,self.new_y,self.desktop_x,self.desktop_y,globals(),self,OperatingSystemHandle.StartSysApp)
|
||||
self.new_x,self.new_y,self.desktop_x,self.desktop_y=i.new_x,i.new_y,i.desktop_x,i.desktop_y
|
||||
|
||||
Task_Explorer=Explorer()
|
||||
BIN
sys/lib/music/ICO.png
Normal file
BIN
sys/lib/music/ICO.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 723 B |
69
sys/lib/music/MMC Download.pyw
Normal file
69
sys/lib/music/MMC Download.pyw
Normal file
@@ -0,0 +1,69 @@
|
||||
from tkinter.messagebox import showinfo
|
||||
from tkinter import Tk, Listbox, Label
|
||||
from tkinter.simpledialog import askstring
|
||||
import requests, json
|
||||
from shutil import move, Error
|
||||
|
||||
|
||||
# 伪装自己的信息
|
||||
headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Referer': 'https://kuwo.cn',
|
||||
'Secret': '10373b58aee58943f95eaf17d38bc9cf50fbbef8e4bf4ec6401a3ae3ef8154560507f032',
|
||||
'Cookie': 'Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1687520303,1689840209; _ga=GA1.2.2021483490.1666455184; _ga_ETPBRPM9ML=GS1.2.1689840210.4.1.1689840304.60.0.0; Hm_Iuvt_cdb524f42f0ce19b169b8072123a4727=NkA4TadJGeBWwmP2mNGpYRrM8f62K8Cm; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1689840223; _gid=GA1.2.1606176174.1689840209; _gat=1',
|
||||
|
||||
}
|
||||
|
||||
name = askstring('获取名称', "请输入你要搜索的“音乐名称”或“歌手")
|
||||
# 音乐列表的地址
|
||||
list_url = f'https://songsearch.kugou.com/song_search_v2?keyword={name}&platform=WebFilter'
|
||||
|
||||
list_resp = requests.get(list_url, headers=headers)
|
||||
m_list = json.loads(list_resp.text[:])['data']['lists']
|
||||
name_list = []
|
||||
for i, s in enumerate(m_list):
|
||||
name_list.append(f'{i + 1}------{s.get("FileName")}')
|
||||
Download_window = Tk()
|
||||
Download_window.geometry('300x300')
|
||||
Download_window.title('搜索结果')
|
||||
MusicN_List = Listbox(Download_window, width = 40, height = 37)
|
||||
MusicN_List.pack()
|
||||
for j in name_list:
|
||||
MusicN_List.insert("end", j)
|
||||
num = askstring('输入序列号', '请输入要下载的音乐号(输入格式为 1 2):').split()
|
||||
for s in num:
|
||||
# 此处的 header1 可有可无 但是不带 cookie 的 headers 请求时 可能会出现问题
|
||||
headers1 = {
|
||||
'UserAgent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||
'Cookie': 'kg_mid=536e52feec7d1c95137aa1d341f8144e; kg_dfid=3exupN3BZJMQ3ftR4x0KOXDk; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; kg_mid_temp=536e52feec7d1c95137aa1d341f8144e'}
|
||||
|
||||
# 构造你请求资源的URL
|
||||
|
||||
info_url = f'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash={m_list[int(s) - 1].get("FileHash")}&album_audio_id={m_list[int(s) - 1].get("ID")}'
|
||||
|
||||
# 进行访问
|
||||
info_resp = requests.get(info_url, headers=headers1)
|
||||
|
||||
# 拿取你所请求资源的数据(这里是得到播放音乐的地址)
|
||||
get_music_url = info_resp.json()['data']['play_url']
|
||||
# print(f"音乐的播放地址为:'\n'{get_music_url}")
|
||||
|
||||
# 发送请求到服务器,获取音乐资源
|
||||
m_resp = requests.get(get_music_url, headers=headers1)
|
||||
|
||||
# 服务器回应的数据 --保存数据
|
||||
name = m_list[int(s) - 1].get('FileName') + '.mp3'
|
||||
|
||||
# 打开一个文件 写入二进制数据 并输出提示信息
|
||||
with open(name, 'wb') as f: # wb 写进二进制
|
||||
f.write(m_resp.content)
|
||||
if s in num:
|
||||
showinfo('成功', f"第{s}首,已经OK啦!")
|
||||
f.close()
|
||||
try:
|
||||
move(name, 'Music_Download')
|
||||
except Error:
|
||||
pass
|
||||
if s == num[-1]:
|
||||
showinfo('成功', f"\n您挑选的{len(num)}首音乐,已经全部下载完成!")
|
||||
43
sys/lib/music/MMC Main.py
Normal file
43
sys/lib/music/MMC Main.py
Normal file
@@ -0,0 +1,43 @@
|
||||
from tkinter import *
|
||||
import requests
|
||||
import json
|
||||
from tkinter.simpledialog import askstring
|
||||
from os import getcwd, mkdir, startfile
|
||||
from tkinter.messagebox import showinfo
|
||||
from shutil import move, Error
|
||||
from os.path import exists
|
||||
def init():
|
||||
if exists('Music_Download') == True:
|
||||
pass
|
||||
else:
|
||||
dir_name = getcwd()
|
||||
mkdir(dir_name + '\\Music_Download')
|
||||
def search():
|
||||
startfile(getcwd() + '\\music\\MMC Download.pyw')
|
||||
def open_MMC_Paly_File():
|
||||
startfile(getcwd() + '\\music\\MMC Player.py')
|
||||
def info():
|
||||
showinfo('关于', '网络歌曲来源于酷狗音乐,仅供学习交流使用,请勿用于商业用途\n主要开发:肝肝甘甘的野生电脑\nGUI修改以及美化:一只悠然自得\n版本:MyOS Special Edition V1(β2)')
|
||||
#初始化
|
||||
init()
|
||||
#创建窗口对象
|
||||
main_window = Tk()
|
||||
main_window.resizable(False, False)
|
||||
#窗口大小
|
||||
main_window.geometry('202x30')
|
||||
#窗口标题
|
||||
main_window.title('MMC')
|
||||
#--菜单栏
|
||||
#搜索网络歌曲选项
|
||||
into_search = Button(main_window, text = '搜索网络歌曲', command = search)
|
||||
into_search.grid(row = 0, column = 0)
|
||||
#播放歌曲选项
|
||||
into_play = Button(main_window, text = '播放本地歌曲', command = open_MMC_Paly_File)
|
||||
into_play.grid(row = 0, column = 1)
|
||||
#关于选项
|
||||
into_play = Button(main_window, text = '关于', command = info)
|
||||
into_play.grid(row = 0, column = 2)
|
||||
#定义背景颜色
|
||||
main_window.configure(background='gray')
|
||||
#显示窗口
|
||||
main_window.mainloop()
|
||||
69
sys/lib/music/MMC Player.py
Normal file
69
sys/lib/music/MMC Player.py
Normal file
@@ -0,0 +1,69 @@
|
||||
from os import listdir
|
||||
from tkinter import Tk, StringVar,Button,messagebox, Radiobutton
|
||||
from tkinter import ttk
|
||||
from sys import exit as ex
|
||||
from pygame import mixer
|
||||
import threading
|
||||
from tkinter.simpledialog import askfloat
|
||||
from tkinter.messagebox import showerror
|
||||
play_window = Tk()
|
||||
play_window.title('播放')
|
||||
play_window.configure(background='gray')
|
||||
play_window.geometry("500x150")
|
||||
|
||||
play_window.resizable(width=False, height=False)
|
||||
music_name = listdir('Music_Download')
|
||||
try:
|
||||
selected_music = StringVar(value=music_name[0])
|
||||
except:
|
||||
showerror('错误', '没有找到')
|
||||
else:
|
||||
music_dropdown = ttk.Combobox(play_window, textvariable=selected_music, values=music_name,state='readonly', width = 60)
|
||||
music_dropdown.place(x=20,y=20)
|
||||
def play_m():
|
||||
mixer.init()
|
||||
mixer.music.set_volume(0.1)
|
||||
music_name_in_def = music_dropdown.get()
|
||||
mixer.music.load('Music_Download/' + music_name_in_def)
|
||||
mixer.music.play(2)
|
||||
while mixer.music.get_busy():
|
||||
pass
|
||||
def pause_m():
|
||||
mixer.init()
|
||||
mixer.music.pause()
|
||||
def start_pause():
|
||||
mixer.init()
|
||||
global fadeout_TF
|
||||
mixer.music.unpause()
|
||||
|
||||
#创建多线程,以防应用未响应
|
||||
def start_tread_1():
|
||||
thread = threading.Thread(target = pause_m, args = ())
|
||||
thread.setDaemon(True)
|
||||
thread.start()
|
||||
def start_tread_2():
|
||||
thread = threading.Thread(target = play_m, args = ())
|
||||
thread.setDaemon(True)
|
||||
thread.start()
|
||||
def start_tread_3():
|
||||
thread = threading.Thread(target = start_pause, args = ())
|
||||
thread.setDaemon(True)
|
||||
thread.start()
|
||||
def val_set():
|
||||
mixer.init()
|
||||
val = askfloat('音量设置', '请输入音量大小(0-1之间的小数)')
|
||||
if val > 1 or val < 0:
|
||||
showerror('错误', '请输入一个小于1或大于0的数')
|
||||
else:
|
||||
mixer.music.set_volume(val)
|
||||
|
||||
play_button = Button(play_window, text="开始播放", command=start_tread_2,overrelief='sunken',bd=4,cursor='hand2')
|
||||
play_button.place(x=50, y=60)
|
||||
|
||||
pause_button = Button(play_window, text="暂停", command=start_tread_1,overrelief='sunken',bd=4,cursor='hand2')
|
||||
pause_button.place(x=400, y=60)
|
||||
unpause_button = Button(play_window, text="继续播放", command=start_tread_3,overrelief='sunken',bd=4,cursor='hand2')
|
||||
unpause_button.place(x=200, y=60)
|
||||
val_button = Button(play_window, text = "声音设置", command = val_set, overrelief='sunken',bd=4,cursor='hand2')
|
||||
val_button.place(x = 300, y = 60)
|
||||
play_window.mainloop()
|
||||
182
sys/lib/music/__init__.mia
Normal file
182
sys/lib/music/__init__.mia
Normal file
@@ -0,0 +1,182 @@
|
||||
import tkinter as tk
|
||||
try:
|
||||
#绝对会报错,只是用于高亮提示,可以删除,真正的导入部分在Kernel
|
||||
import sys.kernel.UI as UI
|
||||
from sys.kernel.tools import *
|
||||
except:
|
||||
pass
|
||||
import requests
|
||||
import json
|
||||
from tkinter.simpledialog import askstring
|
||||
from os import getcwd, mkdir, startfile
|
||||
from tkinter.messagebox import showinfo
|
||||
from shutil import move, Error
|
||||
from os.path import exists
|
||||
from os import listdir
|
||||
from tkinter import Tk, StringVar,Button,messagebox, Radiobutton
|
||||
from tkinter import ttk
|
||||
from sys import exit as ex
|
||||
from pygame import mixer
|
||||
import threading
|
||||
from tkinter.simpledialog import askfloat
|
||||
from tkinter.messagebox import showerror
|
||||
|
||||
def init():
|
||||
if exists('Music_Download') == True:
|
||||
pass
|
||||
else:
|
||||
dir_name = getcwd()
|
||||
mkdir(dir_name + '\\Music_Download')
|
||||
def search():
|
||||
# 伪装自己的信息
|
||||
headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||
'Accept': 'application/json, text/plain, */*',
|
||||
'Referer': 'https://kuwo.cn',
|
||||
'Secret': '10373b58aee58943f95eaf17d38bc9cf50fbbef8e4bf4ec6401a3ae3ef8154560507f032',
|
||||
'Cookie': 'Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1687520303,1689840209; _ga=GA1.2.2021483490.1666455184; _ga_ETPBRPM9ML=GS1.2.1689840210.4.1.1689840304.60.0.0; Hm_Iuvt_cdb524f42f0ce19b169b8072123a4727=NkA4TadJGeBWwmP2mNGpYRrM8f62K8Cm; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1689840223; _gid=GA1.2.1606176174.1689840209; _gat=1',
|
||||
|
||||
}
|
||||
|
||||
name = askstring('获取名称', "请输入你要搜索的“音乐名称”或“歌手")
|
||||
# 音乐列表的地址
|
||||
list_url = f'https://songsearch.kugou.com/song_search_v2?keyword={name}&platform=WebFilter'
|
||||
|
||||
list_resp = requests.get(list_url, headers=headers)
|
||||
m_list = json.loads(list_resp.text[:])['data']['lists']
|
||||
name_list = []
|
||||
for i, s in enumerate(m_list):
|
||||
name_list.append(f'{i + 1}------{s.get("FileName")}')
|
||||
Download_window = UI.Window()
|
||||
Download_window.geometry('300x300')
|
||||
Download_window.TitleText.config(text="搜素结果")
|
||||
Download_window=Download_window.Widget
|
||||
MusicN_List = tk.Listbox(Download_window, width = 40, height = 37)
|
||||
MusicN_List.pack()
|
||||
for j in name_list:
|
||||
MusicN_List.insert("end", j)
|
||||
num = askstring('输入序列号', '请输入要下载的音乐号(输入格式为 1 2):').split()
|
||||
for s in num:
|
||||
# 此处的 header1 可有可无 但是不带 cookie 的 headers 请求时 可能会出现问题
|
||||
headers1 = {
|
||||
'UserAgent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0',
|
||||
'Cookie': 'kg_mid=536e52feec7d1c95137aa1d341f8144e; kg_dfid=3exupN3BZJMQ3ftR4x0KOXDk; kg_dfid_collect=d41d8cd98f00b204e9800998ecf8427e; kg_mid_temp=536e52feec7d1c95137aa1d341f8144e'}
|
||||
|
||||
# 构造你请求资源的URL
|
||||
|
||||
info_url = f'https://wwwapi.kugou.com/yy/index.php?r=play/getdata&hash={m_list[int(s) - 1].get("FileHash")}&album_audio_id={m_list[int(s) - 1].get("ID")}'
|
||||
|
||||
# 进行访问
|
||||
info_resp = requests.get(info_url, headers=headers1)
|
||||
|
||||
# 拿取你所请求资源的数据(这里是得到播放音乐的地址)
|
||||
get_music_url = info_resp.json()['data']['play_url']
|
||||
# print(f"音乐的播放地址为:'\n'{get_music_url}")
|
||||
|
||||
# 发送请求到服务器,获取音乐资源
|
||||
m_resp = requests.get(get_music_url, headers=headers1)
|
||||
|
||||
# 服务器回应的数据 --保存数据
|
||||
name = m_list[int(s) - 1].get('FileName') + '.mp3'
|
||||
|
||||
# 打开一个文件 写入二进制数据 并输出提示信息
|
||||
with open(name, 'wb') as f: # wb 写进二进制
|
||||
f.write(m_resp.content)
|
||||
if s in num:
|
||||
showinfo('成功', f"第{s}首,已经OK啦!")
|
||||
f.close()
|
||||
try:
|
||||
move(name, 'Music_Download')
|
||||
except Error:
|
||||
pass
|
||||
if s == num[-1]:
|
||||
showinfo('成功', f"\n您挑选的{len(num)}首音乐,已经全部下载完成!")
|
||||
|
||||
def open_MMC_Paly_File():
|
||||
play_window = UI.Window()
|
||||
play_window.TitleText.config(text="播放")
|
||||
play_window.configure(background='gray')
|
||||
play_window.geometry("500x150")
|
||||
|
||||
play_window.resizable(width=False, height=False)
|
||||
play_window=play_window.Widget
|
||||
music_name = listdir('Music_Download')
|
||||
try:
|
||||
selected_music = StringVar(value=music_name[0])
|
||||
except:
|
||||
showerror('错误', '没有找到')
|
||||
else:
|
||||
music_dropdown = ttk.Combobox(play_window, textvariable=selected_music, values=music_name,state='readonly', width = 60)
|
||||
music_dropdown.place(x=20,y=20)
|
||||
def play_m():
|
||||
mixer.init()
|
||||
mixer.music.set_volume(0.1)
|
||||
music_name_in_def = music_dropdown.get()
|
||||
mixer.music.load('Music_Download/' + music_name_in_def)
|
||||
mixer.music.play(2)
|
||||
while mixer.music.get_busy():
|
||||
pass
|
||||
def pause_m():
|
||||
mixer.init()
|
||||
mixer.music.pause()
|
||||
def start_pause():
|
||||
mixer.init()
|
||||
global fadeout_TF
|
||||
mixer.music.unpause()
|
||||
|
||||
#创建多线程,以防应用未响应
|
||||
def start_tread_1():
|
||||
thread = threading.Thread(target = pause_m, args = ())
|
||||
thread.setDaemon(True)
|
||||
thread.start()
|
||||
def start_tread_2():
|
||||
thread = threading.Thread(target = play_m, args = ())
|
||||
thread.setDaemon(True)
|
||||
thread.start()
|
||||
def start_tread_3():
|
||||
thread = threading.Thread(target = start_pause, args = ())
|
||||
thread.setDaemon(True)
|
||||
thread.start()
|
||||
def val_set():
|
||||
mixer.init()
|
||||
val = askfloat('音量设置', '请输入音量大小(0-1之间的小数)')
|
||||
if val > 1 or val < 0:
|
||||
showerror('错误', '请输入一个小于1或大于0的数')
|
||||
else:
|
||||
mixer.music.set_volume(val)
|
||||
|
||||
play_button = Button(play_window, text="开始播放", command=start_tread_2,overrelief='sunken',bd=4,cursor='hand2')
|
||||
play_button.place(x=50, y=60)
|
||||
|
||||
pause_button = Button(play_window, text="暂停", command=start_tread_1,overrelief='sunken',bd=4,cursor='hand2')
|
||||
pause_button.place(x=400, y=60)
|
||||
unpause_button = Button(play_window, text="继续播放", command=start_tread_3,overrelief='sunken',bd=4,cursor='hand2')
|
||||
unpause_button.place(x=200, y=60)
|
||||
val_button = Button(play_window, text = "声音设置", command = val_set, overrelief='sunken',bd=4,cursor='hand2')
|
||||
val_button.place(x = 300, y = 60)
|
||||
play_window.mainloop()
|
||||
def info():
|
||||
showinfo('关于', '网络歌曲来源于酷狗音乐,仅供学习交流使用,请勿用于商业用途\n主要开发:肝肝甘甘的野生电脑\nGUI修改以及美化:一只悠然自得\n版本:MyOS Special Edition V1(β2)')
|
||||
#初始化
|
||||
init()
|
||||
#创建窗口对象
|
||||
main_window = UI.Window()
|
||||
main_window.resizable(False, False)
|
||||
#窗口大小
|
||||
main_window.geometry('202x50')
|
||||
#窗口标题
|
||||
main_window.TitleText.config(text="MMC")
|
||||
#--菜单栏
|
||||
#搜索网络歌曲选项
|
||||
into_search = Button(main_window.Widget, text = '搜索网络歌曲', command = search)
|
||||
into_search.grid(row = 0, column = 0)
|
||||
#播放歌曲选项
|
||||
into_play = Button(main_window.Widget, text = '播放本地歌曲', command = open_MMC_Paly_File)
|
||||
into_play.grid(row = 0, column = 1)
|
||||
#关于选项
|
||||
into_play = Button(main_window.Widget, text = '关于', command = info)
|
||||
into_play.grid(row = 0, column = 2)
|
||||
#定义背景颜色
|
||||
main_window.Widget.configure(background='gray')
|
||||
#显示窗口
|
||||
main_window.Widget.mainloop()
|
||||
BIN
sys/lib/setting/ICO.png
Normal file
BIN
sys/lib/setting/ICO.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
98
sys/lib/setting/__init__.mia
Normal file
98
sys/lib/setting/__init__.mia
Normal file
@@ -0,0 +1,98 @@
|
||||
from tkinter import Tk,Button,Canvas,messagebox,OptionMenu,StringVar
|
||||
from os import startfile,path,getcwd,system
|
||||
from sys import exit as ex
|
||||
|
||||
#----------Made by 悠然自得、添亮了(肝肝甘甘的野生电脑)----------#
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#设置尺寸为None值
|
||||
chicun = None
|
||||
|
||||
# 创建主窗口
|
||||
root = UI.Window()
|
||||
|
||||
#创建调整大小窗口
|
||||
|
||||
root2 = UI.Window()
|
||||
|
||||
#暂时隐藏副窗口
|
||||
root2.withdraw()
|
||||
|
||||
#设置尺寸
|
||||
root.geometry("400x300")
|
||||
root2.geometry("100x150")
|
||||
|
||||
#标题设置
|
||||
root.title("设置")
|
||||
|
||||
#设置背景色
|
||||
root.configure(background='gray')
|
||||
root2.configure(background='gray')
|
||||
|
||||
|
||||
#不可放大缩小:设置
|
||||
root.resizable(width=False, height=False)
|
||||
root2.resizable(width=False, height=False)
|
||||
|
||||
|
||||
def Button1():
|
||||
global chicun
|
||||
chicun = '500x300'
|
||||
root2.withdraw()
|
||||
|
||||
def Button2():
|
||||
global chicun
|
||||
chicun = '750x450'
|
||||
root2.withdraw()
|
||||
|
||||
def Button3():
|
||||
global chicun
|
||||
chicun = '1000x600'
|
||||
root2.withdraw()
|
||||
#副窗口按钮
|
||||
button1 = Button(root2.Widget, text="500x300",overrelief='sunken',bd=4,command=Button1)
|
||||
button1.pack(side="top", pady=8)
|
||||
|
||||
button2 = Button(root2.Widget, text="750x450",overrelief='sunken',bd=4,command=Button2)
|
||||
button2.pack(side="top", pady=8)
|
||||
|
||||
button3 = Button(root2.Widget, text="1000x600",overrelief='sunken',bd=4,command=Button3)
|
||||
button3.pack(side="top", pady=8)
|
||||
|
||||
|
||||
|
||||
|
||||
def open4():
|
||||
root = UI.Window()
|
||||
root.withdraw()
|
||||
messagebox.showinfo('操作系统信息',f'名称:MikOS \n版本号:{Kernel["VerSion"]}\nPowered by Python Tkinter\n© 2023 G Dev Hub MikOS Dev Team')
|
||||
messagebox.showinfo('终端信息', f'名称:MayDOS \n版本号:{DOS["VerSion"]}© 2023 MayDOS Team')
|
||||
root.mainloop()
|
||||
|
||||
|
||||
# 创建按钮
|
||||
button1 = Button(root.Widget, text="设置窗口大小", command=None, width=20,overrelief='sunken',bd=4)
|
||||
button2 = Button(root.Widget, text="修改背景", command=None, width=20,overrelief='sunken',bd=4)
|
||||
button3 = Button(root.Widget, text="修改配置文件", command=None, width=20,overrelief='sunken',bd=4)
|
||||
button4 = Button(root.Widget, text="终端", command=None, width=20,overrelief='sunken',bd=4)
|
||||
button5 = Button(root.Widget, text="关于系统", command=open4, width=20,overrelief='sunken',bd=4)
|
||||
|
||||
# 将按钮竖着并排显示在窗口中
|
||||
button1.grid(row=0, column=0, padx=40, pady=(16,0))
|
||||
button2.grid(row=1, column=0, padx=40, pady=(10,0))
|
||||
button3.grid(row=2, column=0, padx=40, pady=(10,0))
|
||||
button4.grid(row=3, column=0, padx=40, pady=(10,0))
|
||||
button5.grid(row=4, column=0, padx=40, pady=(10,0))
|
||||
|
||||
root2.protocol("WM_DELETE_WINDOW", root2.withdraw)
|
||||
root.protocol("WM_DELETE_WINDOW",ex)
|
||||
# 运行主程序
|
||||
root.mainloop()
|
||||
96
sys/lib/setting/setting_bg.pyw
Normal file
96
sys/lib/setting/setting_bg.pyw
Normal file
@@ -0,0 +1,96 @@
|
||||
from os import listdir
|
||||
from tkinter import Tk, StringVar,Button,messagebox
|
||||
from tkinter import ttk
|
||||
from tkinter.filedialog import askopenfilename
|
||||
from sys import exit as ex
|
||||
|
||||
|
||||
#----------Made by 悠然自得、添亮了(肝肝甘甘的野生电脑)----------#
|
||||
|
||||
|
||||
# 创建主窗口
|
||||
root = Tk()
|
||||
root.title("修改背景")
|
||||
|
||||
#设置背景色
|
||||
root.configure(background='gray')
|
||||
#设置大小及不可缩放
|
||||
|
||||
root.geometry("200x100")
|
||||
|
||||
root.resizable(width=False, height=False)
|
||||
# 读取BG文件夹内容
|
||||
try:
|
||||
bg_files = listdir("bg")
|
||||
except:
|
||||
bg_files = listdir("../bg")
|
||||
|
||||
# 创建下拉菜单并添加选项
|
||||
selected_bg = StringVar(value=bg_files[0])
|
||||
bg_dropdown = ttk.Combobox(root, textvariable=selected_bg, values=bg_files,state='readonly')
|
||||
bg_dropdown.place(x=20,y=20)
|
||||
|
||||
|
||||
|
||||
def get_new_img():
|
||||
main_img = askopenfilename(initialdir='C:/Users/', filetypes=[('图片', '*.png;*.jpg;*.jpeg;*.bmp;')])
|
||||
if main_img == '' or main_img == None:
|
||||
print('Debug:检测到路径失效或关闭路径选择窗口,已取消写入配置文件')
|
||||
return
|
||||
print('Debug:导入选择路径为:',main_img)
|
||||
current_selection = bg_dropdown.get()
|
||||
try:
|
||||
with open("配置.txt", "r") as f:
|
||||
lines = f.readlines()
|
||||
lines[1] = f"{main_img}\n"
|
||||
with open("配置.txt", "w") as f:
|
||||
f.writelines(lines)
|
||||
print(f"Debug:将 {repr(main_img)} 写入配置文件")
|
||||
except:
|
||||
with open("..\配置.txt", "r") as f:
|
||||
lines = f.readlines()
|
||||
lines[1] = f"{main_img}\n"
|
||||
with open("..\配置.txt", "w") as f:
|
||||
f.writelines(lines)
|
||||
print(f"Debug:将 {repr(main_img)} 写入配置文件")
|
||||
finally:
|
||||
print('Debug:try语句资源释放成功')
|
||||
messagebox.showinfo('MyOS:提示', '背景修改成功!')
|
||||
ex()
|
||||
|
||||
|
||||
def modify_config():
|
||||
current_selection = bg_dropdown.get()
|
||||
try:
|
||||
with open("配置.txt", "r") as f:
|
||||
lines = f.readlines()
|
||||
lines[1] = f"bg\{current_selection}\n"
|
||||
|
||||
with open("配置.txt", "w") as f:
|
||||
f.writelines(lines)
|
||||
print(f"Debug:将选项 {current_selection} 写入配置文件")
|
||||
except:
|
||||
with open("..\配置.txt", "r") as f:
|
||||
lines = f.readlines()
|
||||
lines[1] = f"bg\{current_selection}\n"
|
||||
with open("..\配置.txt", "w") as f:
|
||||
f.writelines(lines)
|
||||
print(f"Debug:将选项 {current_selection} 写入配置文件")
|
||||
finally:
|
||||
print('Debug:try语句资源释放成功')
|
||||
messagebox.showinfo('MyOS:提示','背景修改成功!')
|
||||
ex()
|
||||
|
||||
|
||||
|
||||
modify_button = Button(root, text="修改背景", command=modify_config,overrelief='sunken',bd=4,cursor='hand2')
|
||||
modify_button.place(x=20, y=60)
|
||||
|
||||
new_img_button = Button(root,text="自定义", command=get_new_img,overrelief='sunken',bd=4,cursor='hand2')
|
||||
new_img_button.place(x=86, y=60)
|
||||
|
||||
|
||||
quit_button = Button(root, text="关闭", command=ex,overrelief='sunken',bd=4,cursor='hand2')
|
||||
quit_button.place(x=140, y=60)
|
||||
# 运行主循环
|
||||
root.mainloop()
|
||||
Reference in New Issue
Block a user