Python tkinter 实现程序逻辑与界面设计分离

tkinter是Python自带的图形界面设计模块,以下内容初步实现了tkinter下程序逻辑与界面设计的分离。

项目文件夹:

project    # 项目文件夹login.py        # 主程序文件database.py     # 操作数据库的文件gbase.db        # 数据库文件ui    # 程序界面文件夹__ini__.py   # 空文件,使该文件夹成为包文件ui_login.py  # 登录窗口的界面设计文件ui_tools.py  # 一些界面设计的工具模块

首先是界面设计文件 ui_login.py

import tkinter as tk
from tkinter import ttk
from . import ui_tools  # 使用相对导入,使不同包的 import 能找到该模块class Login(tk.Tk):"""登录窗口UI"""def __init__(self):"""初始化"""super().__init__()  # 有点相当于tk.Tk()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)self.option_add('*Font', ('', 12))ttk.Style().configure(".", font=('', 12))frm = tk.Frame(self)frm.pack(padx=40, pady=20)self.welcome.set('欢迎光临高卢美发造型管理系统')tk.Label(frm, textvariable=self.welcome, font=('', 14, 'bold'), foreground='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()

界面设计工具模块 ui_tools.py

class WinCenter(object):"""使窗口居中"""def __init__(self, window):window.withdraw()  # 暂时不显示窗口来移动位置window.update_idletasks()  # 刷新GUI,获取窗口参数sx = window.winfo_screenwidth()sy = window.winfo_screenheight()wx = window.winfo_width()wy = window.winfo_height()px = (sx - wx) // 2py = (sy - wy) // 3window.geometry(f'{wx}x{wy}+{px}+{py}')window.deiconify()  # 使窗口显示

主程序文件 login.py

from ui import ui_login
import hashlib
import databaselg = ui_login.Login()def verify():code = lg.user.get()pwd = lg.pwd.get()lg.msg.set('')if not code:lg.msg.set('用户名不能为空!')returnelif not pwd:lg.msg.set('密码不能为空!')returnpassword = 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()

一些要点:

  1. 在主程序 login.py 中必须使用 lg.mainloop() 函数,界面设计程序 ui_login.py 的类 class
    Login(tk.Tk)
    中不能使用 mainloop() 函数。这样才能正确调用界面设计模块及其变量。
  2. 在类 class Login(tk.Tk) 中定义相关变量,如 self.user, self.pwd, self.btn_ok
    等,使主程序能够使用这些变量来修改界面及进行逻辑设计。
  3. 在界面设计程序 ui_login.py 中导入自定义的模块时,要使用相对导入,如上述的 from . import ui_tools 。如果是直接导入如 import ui_tools , 主程序会报错:找不到 ui_tools 模块。

以上是使用tkinter进行程序界面及逻辑分离的初步设计,等待不断完善。

发布日期:8月 27, 2021
作者:lshgly
分类:IT、全部、原创
标签:tkinter、界面分离

Python tkinter 实现程序逻辑与界面设计分离相关推荐

  1. 九十、Python的GUI系列 | QtDesigner进行界面设计

    @Author:Runsen @Date:2020/7/11 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  2. 奉献给你:《Visual C# 2005程序开发与界面设计秘诀》

    对于<Visual C# 2005程序开发与界面设计秘诀>,我们将其定位为一本Visual C# 2005的进阶技术研讨书,针对的是曾使用过Visual C# 2002或者已经对新版本的V ...

  3. 微信小程序的开发界面设计

    微信小程序的开发界面设计需要遵循微信官方的设计规范和标准,以确保小程序具有一致的外观和用户体验.以下是一些微信小程序开发界面设计的建议: 界面布局:微信小程序的界面布局应该简洁明了,易于使用.界面中应 ...

  4. python tkinter库、添加gui界面_使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)...

    使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二),创建一个,界面,布局,文件,路径 使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二) ...

  5. Python PyQt5系列(五)界面设计第一步Qt Design

    开发环境:win10 + python3.7 + PyQt5 开发工具:VS Code 开发要点:PyQt5的界面设计 第0步:安装PyQt5的界面设计库pyqt5_tools pip install ...

  6. 人脸识别系统OpenCV+dlib+python(含数据库)Pyqt5界面设计 项目源码 毕业设计

    一.项目主要技术 Python语言.dlib.OpenCV.Pyqt5界面设计.sqlite3数据库 本系统使用dlib作为人脸识别工具,dlib提供一个方法可将人脸图片数据映射到128维度的空间向量 ...

  7. Visual C# 2008程序开发与界面设计秘诀

    条款1  如何生成可执行文件.EXE 您可以采用下列两种方式来生成可执行文件.EXE: 方法一:在Visual Studio 2005的集成开发环境中,从"生成"菜单中选择&qu ...

  8. Python+tkinter实现简单的登录界面

    import tkinter as tk # 使用Tkinter前需要先导入 import tkinter.messagebox import pickle# 第1步,实例化object,建立窗口wi ...

  9. android 设计qq界面,[考试求助]仿照腾讯QQ应用软件,编写Android程序,登录界面设计...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 [哈哈] 不管了'先三倍再说 假如你每天签到拿4经验,18级300000/4= 75000天,如果从1岁开始签到,那100年= 36500天,你差不多要活 ...

最新文章

  1. 0基础JavaScript入门教程(一)认识代码
  2. 【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )
  3. 病毒在网络上传播的基本途径分析
  4. EOS 源代码解读 (2)插件-插件模板
  5. C++ STL容器总结之vector(超详细版)
  6. hibernate VS mybatis
  7. 【算法】归并排序 小和 问题
  8. nginx 配置反向代理和负载均衡
  9. python自动化六--操作mysql,redis,发送邮件,EXCEL,MD5加密
  10. 【Hoxton.SR1版本】Spring Cloud Sleuth分布式请求链路跟踪
  11. el-input只能输入数值和小数点,并且不显示上下箭头
  12. 遍历map集合常用的4种方式
  13. Linux Shel高级技巧(目录)
  14. Unity UGUI-Canvas
  15. zzulioj:1153: 简易版最长序列
  16. 刚构桥的优缺点_桥梁钢结构特点及优缺点
  17. 示波器如何设置实现单次触发
  18. 工作杂谈之说说工作中的二宗罪
  19. 最新最简便解决 teamviewre检测为商业用途 的方法
  20. servlet3.1规范翻译:第13章 安全

热门文章

  1. 转录调控研究技术之:DNA亲和纯化测序(DAP-seq)
  2. 用python的OpenCV库写一个寻找色块的代码
  3. altium designer导入cad图纸
  4. 打破双亲委派机制有什么用_tomcat打破双亲委派机制
  5. java 文件句柄不释放_Java文件句柄释放 | 学步园
  6. 夏日超好吃零食集合,你吃过几样?
  7. 三维立体电视图像生成方法
  8. Python3学习(八)
  9. 凹凸世界服务器维护到几点,凹凸世界手游2021年7月28日版本更新不停服维护公告-凹凸世界手游2021年7月28日更新了什么-Appfound...
  10. 货拉拉完成 3 亿美元 D 轮融资,2018 年全年业务量增长将近 200%