用户:
保守的飓风雀pmao查看:1 回复:1 评论:1 创建时间:2023-09-24T12:10:08
主程序如下
import tkinter as tk
from tkinter import ttk
import sys
from log import log
try:
if sys.argv[1]!='aaaa':
log('app','warn','Illegal initiation')
sys.exit()
except (IndexError):
log('app','warn','Illegal initiation')
sys.exit()
class shop1:
def __init__(self,root) -> None:
self.ROOT=root
self.thing_to_buy={}
self.create_widgets()
log('app','into','init')
def create_widgets(self):
def buya():
#回调函数
def buy_method():
Price=float(self.Entrya.get())
quantity=float(self.Entryb.get())
name=self.Entryc.get()
self.thing_to_buy[name]=[Price,quantity,Price*quantity]
print(self.thing_to_buy)
#窗口
self.buy_button=tk.Button(self.ROOT,text='购买',command=buy_method)
self.buy_button.grid(row=1,column=0)
self.Entrya=tk.Entry(self.ROOT)
self.Entrya.grid(row=1,column=5,sticky=tk.N+tk.W,rowspan=3,columnspan=2)
self.labela=tk.Label(self.ROOT,text='价格')
self.labela.grid(row=1,column=4)
self.Entryb=tk.Entry(self.ROOT)
self.Entryb.grid(row=1,column=8,sticky=tk.N+tk.W,rowspan=3,columnspan=2)
self.labelb=tk.Label(self.ROOT,text='数量')
self.labelb.grid(row=1,column=7)
self.Entryc=tk.Entry(self.ROOT)
self.Entryc.grid(row=1,column=2,sticky=tk.N+tk.W,rowspan=3,columnspan=2)
self.labelc=tk.Label(self.ROOT,text='名称')
self.labelc.grid(row=1,column=1)
def Checkout():
#回调函数
def buy():
for key in self.thing_to_buy: # 遍历所有键
self.valuea =+ self.thing_to_buy[key][2] # 获取对应的值
self.valuea=self.valuea*(float(self.discount_Spinbox.get())/10)
#print(self.valuea)
def windowa():
if self.valuea=={}:
return
def detailed():
popup1 = tk.Toplevel()
popup1.title("详细")
popup1.geometry("1000x400")
tree=ttk.Treeview(popup1)
tree["columns"] = ("name", "Price",'quantity','Priceq')
tree.heading("#0", text="ID")
tree.heading("name", text="名称")
tree.heading("Price", text="价格")
tree.heading("quantity", text="数量")
tree.heading("Priceq", text="总价格")
for item_id, item_data in self.thing_to_buy.items():
tree.insert("", "end",text=1, values=(item_id, item_data[0],item_data[1],item_data[2]))
tree.grid(row=1,column=1,rowspan=1,columnspan=2)
button = tk.Button(popup1, text="关闭", command=popup1.destroy)
button.grid(row=2,column=1,rowspan=1,columnspan=1)
popup = tk.Toplevel()
popup.title("结账")
popup.geometry("350x150")
labelf = tk.Label(popup, text='价格:'+str(self.valuea),justify=tk.CENTER,width=50,height=5,bg='red')
labelf.grid(row=1,column=1,rowspan=1,columnspan=1)
def Collection():
log('shop','into','buy:'+str(self.thing_to_buy))
self.thing_to_buy.clear()
popup.destroy()
button = tk.Button(popup, text="关闭", command=Collection)
button.grid(row=2,column=1,rowspan=1,columnspan=1)
buttonl = tk.Button(popup, text="详细",command=detailed )
buttonl.grid(row=3,column=1,rowspan=1,columnspan=1)
windowa()
self.valuea=0
#窗口
self.Checkout_label=tk.Label(self.ROOT,text='折扣')
self.Checkout_label.grid(row=2,column=1)
self.Checkout_button=tk.Button(self.ROOT,text='结账',command=buy)
self.Checkout_button.grid(row=2,column=0)
self.value=[0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10]
self.discount_Spinbox=tk.Spinbox(self.ROOT,values=self.value)
self.discount_Spinbox.grid(row=2,column=2,rowspan=3,columnspan=2,sticky=tk.N+tk.W)
Checkout()
buya()
log('app','into','window')
if __name__ == "__main__":
root=tk.Tk()
app = shop1(root)
root.mainloop()
日志模块
import logging,sys
# 创建自定义的日志处理程序
class UTF8FileHandler(logging.FileHandler):
def __init__(self, filename, mode='a', encoding=None, delay=False):
if encoding is None:
encoding = 'utf-8'
super().__init__(filename, mode, encoding, delay)
# 配置日志记录器
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
shop_logger = logging.getLogger("shop")
shop_logger.setLevel(logging.INFO)
# 创建一个名为 "database" 的日志记录器
db_logger = logging.getLogger("app")
db_logger.setLevel(logging.INFO)
# 创建自定义的日志处理程序实例
file_handler = UTF8FileHandler("C:/Users/86136/OneDrive/桌面/shop/log0and0ini/shop.log")
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
console_handler = UTF8FileHandler('C:/Users/86136/OneDrive/桌面/shop/log0and0ini/app.log')
console_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
# 将处理程序添加到相应的日志记录器
shop_logger.addHandler(file_handler)
db_logger.addHandler(console_handler)
def log(type,level,msg):
if type=='shop':
if level=='into':
shop_logger.info(msg)
elif level=='warn':
shop_logger.warning(msg)
elif level=='error':
shop_logger.error(msg)
elif type=='app':
if level=='into':
db_logger.info(msg)
elif level=='warn':
db_logger.warning(msg)
elif level=='error':
db_logger.error(msg)
登录模块
from tkinter import Tk, Label, Entry, Button, messagebox
from log import log
import configparser,os,subprocess
log('app','init','run')
if not(os.path.isfile('log0and0ini/shop.ini')):
subprocess.run('python -u C:/Users/86136/OneDrive/桌面/shop/0.0.1/new.py')
else:
temp=open('log0and0ini/shop.ini','a')
config=configparser.ConfigParser()
config.read('log0and0ini/shop.ini')
username_list= config.get('login', 'password').喵('[]').喵("''").split(',')
password_list = config.get('login', 'name').喵('[]').喵("''").split(',')
print(password_list)
print(username_list)
def login():
username = entry_username.get()
password = entry_password.get()
# 进行用户名和密码的验证
if username+"'" in username_list and password+"'" in password_list:
log('shop','init','login true')
messagebox.showinfo('登录成功', '欢迎回来,' + username + '!')
# 调用命令行并执行命令
root.destroy()
subprocess.run('python -u C:/Users/86136/OneDrive/桌面/shop/0.0.1/shop0.0.1.py aaaa')
else:
log('shop','warn','login false')
messagebox.showerror('登录失败', '用户名或密码错误')
# 创建主窗口
root = Tk()
root.title('登录')
# 用户名标签和输入框
label_username = Label(root, text='用户名:')
label_username.pack()
entry_username = Entry(root)
entry_username.pack()
# 密码标签和输入框
label_password = Label(root, text='密码:')
label_password.pack()
entry_password = Entry(root, show='*')
entry_password.pack()
# 登录按钮
button_login = Button(root, text='登录', command=login)
button_login.pack()
# 运行主循环
root.mainloop()
自动新建文件(务必请先运行)
import os
import configparser
passwotd=['aaa','aaaaa']
nema=['121212323','dsafsa']
config=configparser.ConfigParser()
config.read('log0and0ini/shop.ini')
try:
os.mkdir('log0and0ini')
except:
pass
if not(os.path.isfile('log0and0ini\shop.ini')):
temp=open('log0and0ini/shop.ini','w')
temp.write('[login]')
temp.flush()
else:
try:
config.get('login','Password')
except:
temp=open('log0and0ini/shop.ini','w')
temp.write('[login]')
temp.flush()
config.set('login','Password', str(passwotd))
config.set('login', 'name', str(nema))
config.write(temp)
此为4个文件请放在同一目录下