在tkinter的界面设计中,使用模板继承,这样继承过来的代码具有模板的特性。这样做的主要目的是想在基础模板中调整字体、字号,前景颜色,背景颜色等,使继承于该基础模板的多个其他界面设计文件统一具有基础模板的设定,从而达到界面风格统一的效果。
项目文件夹
project
login.py
database.py
gbase.db
ui
__ini__.py
ui_base.py
ui_login.py
ui_tools.py
基础模板 ui_base.py
import tkinter as tk
from tkinter import ttk
class BaseWindow(tk.Tk):
"""创建基础窗口,设置常用参数"""
def __init__(self):
super().__init__()
self.font_name = '微软雅黑'
self.font_size = 14
self.font = (self.font_name, self.font_size)
self.option_add('*Font', self.font)
ttk.Style().configure(".", font=self.font)
登录界面继承于该模板 ui_login.py
import tkinter as tk
from tkinter import ttk
from . import ui_base
from . import ui_tools
class Login(ui_base.BaseWindow):
"""登录窗口UI"""
def __init__(self):
"""初始化"""
super().__init__()
self.welcome = tk.StringVar()
self.user = tk.StringVar()
self.pwd = tk.StringVar()
self.msg = tk.StringVar()
self.btn_ok = ttk.Button()
self.run()
def run(self):
self.title('系统登录')
self.resizable(False, False)
frm = tk.Frame(self)
frm.pack(padx=40, pady=20)
self.welcome.set('欢迎光临高卢美发造型管理系统')
tk.Label(frm, textvariable=self.welcome, font=(self.font_name, self.font_size + 2, 'bold'),
fg='green').pack(pady=20)
user_frm = tk.Frame(frm)
user_frm.pack(pady=10)
pwd_frm = tk.Frame(frm)
pwd_frm.pack(pady=10)
btn_frm = tk.Frame(frm)
btn_frm.pack(pady=10)
tk.Label(user_frm, text='用户名', width=8, anchor='w').pack(padx=5, side='left')
tk.Entry(user_frm, textvariable=self.user).pack(side='left')
tk.Label(pwd_frm, text='密码', width=8, anchor='w').pack(padx=5, side='left')
tk.Entry(pwd_frm, textvariable=self.pwd, show="*").pack(side='left')
self.btn_ok = ttk.Button(btn_frm, text='确定')
self.btn_ok.pack(padx=10, side='left')
ttk.Button(btn_frm, text='取消', command=self.destroy).pack(side='left')
tk.Label(frm, textvariable=self.msg, fg='red').pack(pady=10)
ui_tools.WinCenter(self)
if __name__ == '__main__':
lg = Login()
lg.title('逻辑与界面分离设计')
lg.welcome.set('欢迎你UI时代!')
lg.mainloop()
登录主程序 login.py
from ui import ui_login
import hashlib
import database
lg = ui_login.Login()
def verify():
code = lg.user.get()
pwd = lg.pwd.get()
lg.msg.set('')
if not code:
lg.msg.set('用户名不能为空!')
return
elif not pwd:
lg.msg.set('密码不能为空!')
return
password = hashlib.md5((code+pwd).encode()).hexdigest()
db = database.Sqlite3DB()
sql_text = f"select id from users where code = ? and password = ? ;"
db.cur.execute(sql_text, (code, password))
result = db.cur.fetchone()
if result:
lg.msg.set('登录成功!')
else:
lg.msg.set('用户名或者密码错误!')
lg.btn_ok.configure(command=verify)
lg.mainloop()
发布日期:8月 28, 2021 作者:lshgly 编辑tkinter 界面设计中的模板继承 分类:IT、Uncategorized、全部、原创 标签:python、tkinter、模板继承、界面设计
|