tiny-project/lanpp/main-gui.py
2022-04-18 00:13:14 +08:00

142 lines
6.5 KiB
Python

import pyperclip
import ftpserver
import os
import json
import sys
import socket
import webserver
import webbrowser
from tkinter import *
from tkinter import messagebox
from ttkthemes import *
from tkinter.ttk import *
from multiprocessing import Process
def getip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('192.168.1.1', 0))
ip = s.getsockname()[0]
except:
ip = "localhost"
finally:
s.close()
return ip
def jsonget(key_name):
with open("setting.json") as f:
json_data = f.read()
data = json.loads(json_data)
f.close()
return data[key_name]
def webserver_ui():
if True :
#webserverui_status = 1
subwindow = ThemedTk(theme="yaru", toplevel=True, themebg=True)
subwindow.title("WebServer | LAN++ Manager")
subwindow.geometry("850x500")
os.chdir(static_path)
task = Process(target=webserver.start)
def start():
task.start()
print("started")
def __close__():
task.terminate()
os.chdir(static_path)
print("closed")
def close():
if task.is_alive() == False:
start()
__close__()
os.chdir(static_path)
subwindow.destroy()
def copylink():
pyperclip.copy("http://" + str(getip()) + ":" + jsonget("webserverport"))
ntext = " 点击按钮以控制[浏览器文件管理服务]\n [启动] - 启动服务\n [关闭窗口并退出] - 退出窗口(退出服务)\n [复制访问链接] - 复制链接以便访问服务" + '当前配置:\n 端口:' + jsonget("ftpserverport") + "\n 目录: " + jsonget("webserverroot") + "\n 打开服务后请用浏览器打开此链接以操作文件: [http://" + str(getip()) + ":" + jsonget("webserverport") + "]\n"
lbl1 = Label(subwindow, text=ntext)
lbl1.grid(column=1, row=1)
wtext = " 已知Bug:终止服务后,端口仍会占用一段时间,建议终止服务后一分钟后重新启动服务\n 注意:在不了解此程序文档时请勿打开多个相同服务,如需要,可在Wiki的[特技]一栏中找到方法."
lbl2 = Label(subwindow, text=wtext)
lbl2.grid(column=1, row=2)
start_btn = Button(subwindow, text="启动", command=start)
start_btn.grid(column=1, row=3)
close_btn = Button(subwindow, text="关闭窗口并退出", command=close)
close_btn.grid(column=1, row=4)
copy_btn = Button(subwindow, text="复制访问链接", command=copylink)
copy_btn.grid(column=1, row=5)
subwindow.protocol("WM_DELETE_WINDOW", close)
subwindow.mainloop()
def ftpserver_ui():
if True :
#webserverui_status = 1
subwindow = ThemedTk(theme="yaru", toplevel=True, themebg=True)
subwindow.title("FTPServer | LAN++ Manager")
subwindow.geometry("850x500")
os.chdir(static_path)
task = Process(target=ftpserver.start)
def start():
task.start()
print("started")
def __close__():
task.terminate()
os.chdir(static_path)
print("closed")
def close():
if task.is_alive() == False:
start()
__close__()
os.chdir(static_path)
subwindow.destroy()
def copylink():
pyperclip.copy("ftp://" + jsonget("ftpserveruser") + "@" + str(getip()) + ":" + jsonget("ftpserverport"))
ntext = " 点击按钮以控制[FTP文件传输服务]\n [启动] - 启动服务\n [关闭窗口并退出] - 退出窗口(退出服务)\n [复制访问链接] - 复制链接以便访问服务" + '当前配置:\n 端口:' + jsonget("ftpserverport") + "\n 目录: " + jsonget("ftpserverroot") + "\n 用户名:" + jsonget("ftpserveruser") + "\n 密码:" + jsonget("ftpserverpass") + "\n 打开服务后请通过此链接连接FTP服务器: [ftp://" + jsonget("ftpserveruser") + "@" + str(getip()) + ":" + jsonget("ftpserverport") + "]"
lbl1 = Label(subwindow, text=ntext)
lbl1.grid(column=1, row=1)
wtext = " 已知Bug:终止服务后,端口仍会占用一段时间,建议终止服务后一分钟后重新启动服务\n 注意:在不了解此程序文档时请勿打开多个相同服务,如需要,可在Wiki的[特技]一栏中找到方法."
lbl2 = Label(subwindow, text=wtext)
lbl2.grid(column=1, row=2)
start_btn = Button(subwindow, text="启动", command=start)
start_btn.grid(column=1, row=3)
close_btn = Button(subwindow, text="关闭窗口并退出", command=close)
close_btn.grid(column=1, row=4)
copy_btn = Button(subwindow, text="复制访问链接", command=copylink)
copy_btn.grid(column=1, row=5)
subwindow.protocol("WM_DELETE_WINDOW", close)
subwindow.mainloop()
def setting_ui():
pass
def runexit():
sys.exit()
def about_ui():
def visit():
webbrowser.open("http://github.com/david-ajax/LANPP", new=0)
subwindow = ThemedTk(theme="yaru", toplevel=True, themebg=True)
subwindow.title("About | LAN++")
subwindow.geometry("470x270")
ntext = " LAN++ -- A powerful tool for local area network \n Version: 1.0 (Beta) \n Repo: http://github.com/david-ajax/LANpp \n Powered By Wang Zhiyu \n Use GPL 3.0 License"
lbl1 = Label(subwindow, text=ntext)
lbl1.grid(column=1, row=1)
visit_btn = Button(subwindow, text="Visit The Repository", command=visit)
visit_btn.grid(column=1, row=2)
exit_btn = Button(subwindow, text="Exit", command=subwindow.destroy)
exit_btn.grid(column=1, row=3)
def main():
window = ThemedTk(theme="yaru", toplevel=True, themebg=True)
window.title("LAN++ Manager")
window.geometry("800x200")
webserver = Button(window, text="浏览器文件管理服务", command=webserver_ui)
webserver.grid(column=0, row=2)
ftpserver = Button(window, text="FTP文件传输服务", command=ftpserver_ui)
ftpserver.grid(column=1, row=2)
setting = Button(window, text="设置", command=setting_ui)
setting.grid(column=2, row=2)
about = Button(window, text="关于", command=about_ui)
about.grid(column=3, row=2)
exit_btn = Button(window, text="退出", command=runexit)
exit_btn.grid(column=4, row=2)
window.mainloop()
if __name__ == '__main__':
static_path = os.getcwd()
fw=Tk()
fw.withdraw()
messagebox.showinfo(title='Welcome',message='欢迎使用LAN++ Beta Edition')
main()