Initial commit with README

This commit is contained in:
GVSADS
2026-01-25 17:01:16 +08:00
commit 246bbd8fd9
106 changed files with 2071 additions and 0 deletions

View File

@@ -0,0 +1,8 @@
shutdown 关闭终端
help 帮助
startMik 启动MikOS
setting 设置
repair 修复运行环境
time 时间
open 打开
restart 重启

View File

@@ -0,0 +1,10 @@
shutdown 关闭终端
help 帮助
startMik 启动MikOS
setting 设置
repair 修复运行环境
time 时间
open 打开
restart 重启
about 关于
setting 设置

View File

@@ -0,0 +1 @@
{"Debug":"True"}

View File

@@ -0,0 +1,2 @@
选项名称 值1(最小值)/值2(最大值)
Debug True/False

View 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)

View 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

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 670 B

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

123
sys/lib/calc/__init__.mia Normal file
View 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()

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 B

View 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
View 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()

View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View 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()

View 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()