改用ttk美化

This commit is contained in:
zhbaor 2021-11-04 21:06:18 +08:00
parent 8d77a2590d
commit d351c07c18

100
manage.py
View file

@ -1,12 +1,12 @@
from configparser import ConfigParser from configparser import ConfigParser
from pathlib import Path from pathlib import Path
from json import dump, dumps from json import dump, dumps
from subprocess import CREATE_NO_WINDOW, STDOUT, Popen, PIPE from subprocess import STDOUT, Popen, PIPE
from threading import Thread from threading import Thread
from queue import Empty, SimpleQueue from queue import Empty, SimpleQueue
from tkinter import * import tkinter as tk
import tkinter.ttk as ttk
from tkinter import filedialog from tkinter import filedialog
from tkinter.ttk import *
from platform import system from platform import system
config = ConfigParser() config = ConfigParser()
@ -15,6 +15,9 @@ output_queue = SimpleQueue()
finished = False finished = False
win_os = system() == "Windows" win_os = system() == "Windows"
if win_os:
from subprocess import CREATE_NO_WINDOW
def check_config_valid(config: ConfigParser, options: dict[str, list[str]]) -> bool: def check_config_valid(config: ConfigParser, options: dict[str, list[str]]) -> bool:
for sec in options: for sec in options:
@ -87,7 +90,10 @@ def sync_func(command: list[str]) -> None:
output_queue.put_nowait(f"db.json: {db_log}\n") output_queue.put_nowait(f"db.json: {db_log}\n")
output_queue.put_nowait(f"command: {command}\n") output_queue.put_nowait(f"command: {command}\n")
output_queue.put_nowait("Started lftp...\n") output_queue.put_nowait("Started lftp...\n")
proc = Popen(command, stdout=PIPE, stderr=STDOUT, creationflags=CREATE_NO_WINDOW) if win_os:
proc = Popen(command, stdout=PIPE, stderr=STDOUT, creationflags=CREATE_NO_WINDOW)
else:
proc = Popen(command, stdout=PIPE, stderr=STDOUT)
ret_val = None ret_val = None
while ret_val is None: while ret_val is None:
ret_val = proc.poll() ret_val = proc.poll()
@ -102,57 +108,57 @@ def display_output():
try: try:
while True: while True:
line = output_queue.get_nowait() line = output_queue.get_nowait()
lftp_output.insert(END, line) lftp_output.insert(tk.END, line)
except Empty: except Empty:
pass pass
lftp_output.see(END) lftp_output.see(tk.END)
if not finished: if not finished:
root.after(200, display_output) root.after(200, display_output)
def sync_all_files(_: Event) -> None: def sync_all_files(_: tk.Event) -> None:
get_config() get_config()
lftp_output.delete("1.0", END) lftp_output.delete("1.0", tk.END)
Thread(target=sync_func, args=(sync_all_command(),), daemon=True).start() Thread(target=sync_func, args=(sync_all_command(),), daemon=True).start()
root.after(200, display_output) root.after(200, display_output)
def sync_pdf_files(_: Event) -> None: def sync_pdf_files(_: tk.Event) -> None:
get_config() get_config()
lftp_output.delete("1.0", END) lftp_output.delete("1.0", tk.END)
Thread(target=sync_func, args=(sync_pdf_command(),), daemon=True).start() Thread(target=sync_func, args=(sync_pdf_command(),), daemon=True).start()
root.after(200, display_output) root.after(200, display_output)
def select_lftp(_: Event) -> None: def select_lftp(_: tk.Event) -> None:
file_path = filedialog.askopenfilename() file_path = filedialog.askopenfilename()
config["ftp"]["lftp"] = file_path config["ftp"]["lftp"] = file_path
lftp_entry.delete(0, END) lftp_entry.delete(0, tk.END)
lftp_entry.insert(0, file_path) lftp_entry.insert(0, file_path)
def select_local(_: Event) -> None: def select_local(_: tk.Event) -> None:
file_path = filedialog.askdirectory() file_path = filedialog.askdirectory()
config["file"]["local"] = file_path config["file"]["local"] = file_path
local_entry.delete(0, END) local_entry.delete(0, tk.END)
local_entry.insert(0, file_path) local_entry.insert(0, file_path)
def load_config(_: Event) -> None: def load_config(_: tk.Event) -> None:
config.read("config.ini") config.read("config.ini")
if not check_config_valid(config, options): if not check_config_valid(config, options):
set_default_config(config, options) set_default_config(config, options)
host_entry.delete(0, END) host_entry.delete(0, tk.END)
host_entry.insert(0, config["ftp"]["host"]) host_entry.insert(0, config["ftp"]["host"])
user_entry.delete(0, END) user_entry.delete(0, tk.END)
user_entry.insert(0, config["ftp"]["user"]) user_entry.insert(0, config["ftp"]["user"])
pass_entry.delete(0, END) pass_entry.delete(0, tk.END)
pass_entry.insert(0, config["ftp"]["pass"]) pass_entry.insert(0, config["ftp"]["pass"])
lftp_entry.delete(0, END) lftp_entry.delete(0, tk.END)
lftp_entry.insert(0, config["ftp"]["lftp"]) lftp_entry.insert(0, config["ftp"]["lftp"])
local_entry.delete(0, END) local_entry.delete(0, tk.END)
local_entry.insert(0, config["file"]["local"]) local_entry.insert(0, config["file"]["local"])
remote_entry.delete(0, END) remote_entry.delete(0, tk.END)
remote_entry.insert(0, config["file"]["remote"]) remote_entry.insert(0, config["file"]["remote"])
@ -165,7 +171,7 @@ def get_config() -> None:
config["file"]["remote"] = remote_entry.get() config["file"]["remote"] = remote_entry.get()
def save_config(_: Event) -> None: def save_config(_: tk.Event) -> None:
get_config() get_config()
with open("config.ini", "w") as f: with open("config.ini", "w") as f:
config.write(f) config.write(f)
@ -175,74 +181,74 @@ config.read("config.ini")
if not check_config_valid(config, options): if not check_config_valid(config, options):
set_default_config(config, options) set_default_config(config, options)
root = Tk() root = tk.Tk()
ftp_frm = Frame(root, border=1) ftp_frm = ttk.Frame(root, border=1)
ftp_frm.grid(row=0, column=0, pady=10, padx=10) ftp_frm.grid(row=0, column=0, pady=10, padx=10)
Label(ftp_frm, text="FTP Settings").grid(row=0, column=0, columnspan=3) ttk.Label(ftp_frm, text="FTP Settings").grid(row=0, column=0, columnspan=3)
Label(ftp_frm, text="Hostname", width=10).grid(row=1, column=0) ttk.Label(ftp_frm, text="Hostname", width=10).grid(row=1, column=0)
host_entry = Entry(ftp_frm, width=40) host_entry = ttk.Entry(ftp_frm, width=40)
host_entry.insert(0, config["ftp"]["host"]) host_entry.insert(0, config["ftp"]["host"])
host_entry.grid(row=1, column=1, columnspan=2) host_entry.grid(row=1, column=1, columnspan=2)
Label(ftp_frm, text="Username", width=10).grid(row=2, column=0) ttk.Label(ftp_frm, text="Username", width=10).grid(row=2, column=0)
user_entry = Entry(ftp_frm, width=40) user_entry = ttk.Entry(ftp_frm, width=40)
user_entry.insert(0, config["ftp"]["user"]) user_entry.insert(0, config["ftp"]["user"])
user_entry.grid(row=2, column=1, columnspan=2) user_entry.grid(row=2, column=1, columnspan=2)
Label(ftp_frm, text="Password", width=10).grid(row=3, column=0) ttk.Label(ftp_frm, text="Password", width=10).grid(row=3, column=0)
pass_entry = Entry(ftp_frm, width=40, show="*") pass_entry = ttk.Entry(ftp_frm, width=40, show="*")
pass_entry.insert(0, config["ftp"]["pass"]) pass_entry.insert(0, config["ftp"]["pass"])
pass_entry.grid(row=3, column=1, columnspan=2) pass_entry.grid(row=3, column=1, columnspan=2)
Label(ftp_frm, text="lftp Path", width=10).grid(row=4, column=0) ttk.Label(ftp_frm, text="lftp Path", width=10).grid(row=4, column=0)
lftp_entry = Entry(ftp_frm, width=29) lftp_entry = ttk.Entry(ftp_frm, width=29)
lftp_entry.insert(0, config["ftp"]["lftp"]) lftp_entry.insert(0, config["ftp"]["lftp"])
lftp_entry.grid(row=4, column=1) lftp_entry.grid(row=4, column=1)
lftp_select_btn = Button(ftp_frm, text="Select...", width=10) lftp_select_btn = ttk.Button(ftp_frm, text="Select...", width=10)
lftp_select_btn.grid(row=4, column=2) lftp_select_btn.grid(row=4, column=2)
lftp_select_btn.bind("<Button-1>", select_lftp) lftp_select_btn.bind("<Button-1>", select_lftp)
file_frm = Frame(root) file_frm = ttk.Frame(root)
file_frm.grid(row=1, column=0, pady=10, padx=10) file_frm.grid(row=1, column=0, pady=10, padx=10)
Label(file_frm, text="File Path Settings").grid(row=0, column=0, columnspan=3) ttk.Label(file_frm, text="File Path Settings").grid(row=0, column=0, columnspan=3)
Label(file_frm, text="Local Path", width=12).grid(row=1, column=0) ttk.Label(file_frm, text="Local Path", width=12).grid(row=1, column=0)
local_entry = Entry(file_frm, width=27) local_entry = ttk.Entry(file_frm, width=27)
local_entry.insert(0, config["file"]["local"]) local_entry.insert(0, config["file"]["local"])
local_entry.grid(row=1, column=1) local_entry.grid(row=1, column=1)
local_select_btn = Button(file_frm, text="Select...", width=10) local_select_btn = ttk.Button(file_frm, text="Select...", width=10)
local_select_btn.grid(row=1, column=2) local_select_btn.grid(row=1, column=2)
local_select_btn.bind("<Button-1>", select_local) local_select_btn.bind("<Button-1>", select_local)
Label(file_frm, text="Remote Path", width=12).grid(row=2, column=0) ttk.Label(file_frm, text="Remote Path", width=12).grid(row=2, column=0)
remote_entry = Entry(file_frm, width=38) remote_entry = ttk.Entry(file_frm, width=38)
remote_entry.insert(0, config["file"]["remote"]) remote_entry.insert(0, config["file"]["remote"])
remote_entry.grid(row=2, column=1, columnspan=2) remote_entry.grid(row=2, column=1, columnspan=2)
actions_frm = Frame(root) actions_frm = ttk.Frame(root)
actions_frm.grid(row=2, column=0, pady=10, padx=10) actions_frm.grid(row=2, column=0, pady=10, padx=10)
load_btn = Button(actions_frm, text="Load Config", width=12) load_btn = ttk.Button(actions_frm, text="Load Config", width=12)
load_btn.grid(row=0, column=0) load_btn.grid(row=0, column=0)
load_btn.bind("<Button-1>", load_config) load_btn.bind("<Button-1>", load_config)
save_btn = Button(actions_frm, text="Save Config", width=12) save_btn = ttk.Button(actions_frm, text="Save Config", width=12)
save_btn.grid(row=0, column=1) save_btn.grid(row=0, column=1)
save_btn.bind("<Button-1>", save_config) save_btn.bind("<Button-1>", save_config)
sync_all_btn = Button(actions_frm, text="Sync all Files", width=12) sync_all_btn = ttk.Button(actions_frm, text="Sync all Files", width=12)
sync_all_btn.grid(row=0, column=2) sync_all_btn.grid(row=0, column=2)
sync_all_btn.bind("<Button-1>", sync_all_files) sync_all_btn.bind("<Button-1>", sync_all_files)
sync_pdf_btn = Button(actions_frm, text="Sync PDF Files", width=12) sync_pdf_btn = ttk.Button(actions_frm, text="Sync PDF Files", width=12)
sync_pdf_btn.grid(row=0, column=3) sync_pdf_btn.grid(row=0, column=3)
sync_pdf_btn.bind("<Button-1>", sync_pdf_files) sync_pdf_btn.bind("<Button-1>", sync_pdf_files)
lftp_output = Text(actions_frm, width=53, height=12) lftp_output = tk.Text(actions_frm, width=53, height=12)
lftp_output.grid(row=1, column=0, columnspan=4) lftp_output.grid(row=1, column=0, columnspan=4)
root.mainloop() root.mainloop()