一、基础

from tkinter import *

from tkinter.ttk import *

import os

class MainWindow(Tk):

def __init__(self):

super().__init__()

self.title("

显示效果:

注意:tkinter在Mac上Panedwindow不支持修改前景色背景色

二、添加查询区域

在右边的Pannedwindow容器中,添加一个LabelFrame容器作为查询区域,在LabelFrame容器中添加一系列的Label、Entry、Button控件,可以输入学号、姓名、电话、身份证、查询、和显示全部信息:

self.Pane_right = PanedWindow(width=725, height=540, style="right.TPanedwindow")

self.Pane_right.place(x=170, y=94)

# LabelFrame

self.LabelFrame_query = LabelFrame(self.Pane_right,text = "学生信息查询",width = 700,height = 70)

self.LabelFrame_query.place(x = 10 , y = 10)

# 添加控件

self.Label_sno = Label(self.LabelFrame_query,text = "学号:")

self.Label_sno.place(x = 5,y = 13)

self.Entry_sno = Entry(self.LabelFrame_query,width = 8)

self.Entry_sno.place(x = 40,y = 10)

self.Label_name = Label(self.LabelFrame_query, text="姓名:")

self.Label_name.place(x=125, y=13)

self.Entry_name = Entry(self.LabelFrame_query, width=8)

self.Entry_name.place(x=160, y=10)

self.Label_mobile = Label(self.LabelFrame_query, text="电话:")

self.Label_mobile.place(x=245, y=13)

self.Entry_mobile = Entry(self.LabelFrame_query, width=8)

self.Entry_mobile.place(x=280, y=10)

self.Label_id = Label(self.LabelFrame_query, text="身份证:")

self.Label_id.place(x=365, y=13)

self.Entry_id = Entry(self.LabelFrame_query, width=10)

self.Entry_id.place(x=420, y=10)

self.Button_query = Button(self.LabelFrame_query, text="查询",width = 4)

self.Button_query.place(x=520, y=10)

self.Button_all = Button(self.LabelFrame_query, text="显示全部",width = 8)

self.Button_all.place(x=590, y=10)

显示效果:

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::1

三、加载Treeview控件

创建控件、设置对齐方式和每个列的标题.

# 添加TreeView控件

self.Tree = Treeview(self.Pane_right,columns=("sno","names",

"gender","birthday","mobile","email","address"),show="headings",height=20)

# 设置每一个列的宽度和对齐的方式

self.Tree.column("sno",width=100,anchor="center")

self.Tree.column("names",width=80,anchor="center")

self.Tree.column("gender",width=80,anchor="center")

self.Tree.column("birthday",width=100,anchor="center")

self.Tree.column("mobile",width=100,anchor="center")

self.Tree.column("email", width=100, anchor="center")

self.Tree.column("address",width=120,anchor="center")

# 设置每个列的标题

self.Tree.heading("sno",text="学号")

self.Tree.heading("names", text="姓名")

self.Tree.heading("gender", text="性别")

self.Tree.heading("birthday", text="生日")

self.Tree.heading("mobile", text="手机号码")

self.Tree.heading("email", text="邮箱地址")

self.Tree.heading("address", text="家庭住址")

self.Tree.place(x=10,y=80)

显示效果:

四、实现登录用户登录信息加载

登录成功后,在顶部显示用户姓名和登录时间,用户姓名是怎么来的?是我们在登录窗口输入的,所以这就涉及到了跨窗体数据的传递。这一点非常重要!登录窗体(登录信息)==>主窗体 传递的基本方式:构造函数 在主窗体的构造函数中添加一个接收参数current_user,在登录窗体加载新窗体时将参数传递进去; 但是我们登录窗体的登录函数login()中用户名的变量user是局部变量,函数调用完了之后就变量就没有了,那怎么调用呢?我们需要在登录窗体的构造函数中定义全局变量:

self.user = "" # 当前的用户

为了获取用户登录的时间,我们定义一个获取当前时间的方法:

def get_now_time(self):

today = datetime.today()

return ("%04d-%02d-%02d %02d:%02d:%02d"%(today.year,

today.month,today.day,today.hour,today.minute,today.second))

然后在加载主窗体时将参数self.user和self.get_now_time()作为参数传递进去

main_window = maingui.MainWindow(self.user,self.get_now_time())

另一边,我们在主窗体中,在构造函数中添加全局变量.

self.login_user = current_user

self.login_time = current_time

之后,我们在Top_banner中通过标签将user信息展示出来:

self.Label_login_user = Label(self,text = "当前用户:"+str(self.login_user).title()

+" 登录时间:"+self.login_time)

self.Label_login_user.place(x = 650,y = 40)

这样主窗口就会显示通过登录窗口登录的用户名(首字母自动转大写)和登录时间:效果演示:

五、加载学生信息到TreeView中

1. 我们在主窗体中定义全局变量来存储学生信息:

self.all_student_list = []

self.file_path = "/Users/yushengtan/Desktop/Demo/Studentmgr/Student.txt"

2. 定义方法读取文件中的学生信息

def load_file_student_info(self):

if not os.path.exists(self.file_path):

showinfo("系统消息","提供的文件名不存在!")

else:

try:

with open(file = self.file_path,mode = "r") as fd:

# 一次读一行

current_line = fd.readline()

while current_line:

temp_list = current_line.split(",") # 长字符串分割层三个

self.all_student_list.append(temp_list)

# 读取下一行,读完了循环就结束了

current_line = fd.readline()

except:

showinfo("系统消息","文件读取出现异常!")

然后我们在构造方法中把这个函数写入,以实现自动把学生信息写入到all_student_list中

self.load_file_student_info()

3. 定义加载TreeView信息的方法

文件中读取到的学生信息存储到all_student_list列表,以此作为参数传入加载TreeView的方法中;

def load_treeview(self,current_list:list):

# 判断是否有数据:

if len(current_list) == 0:

showinfo("系统消息","没有数据加载")

else:

for index in range(len(current_list)):

self.Tree.insert("",index,values=(current_list[index][0],current_list[index][1],

current_list[index][2],current_list[index][3],current_list[index][4],

current_list[index][5],current_list[index][6]))

在构造方法中调用该方法,自动把所有学生信息加载到TreeView中

self.load_treeview(self.all_student_list)

运行效果:

python界面设计实例-Python GUI项目实战:主窗体的界面设计与实现相关推荐

  1. 跟着王进老师学开发Python篇第三季:Tkinter GUI项目实战篇-王进-专题视频课程

    跟着王进老师学开发Python篇第三季:Tkinter GUI项目实战篇-465人已学习 课程介绍         本季课程为Tkinter GUI项目实战:学生信息管理系统, 内容包含:项目总体介绍 ...

  2. tkinter项目实战_Python GUI项目实战(二)主窗体的界面设计与实现

    前言 上一节我们介绍了Python GUI项目实战(一)登录窗体的设计与实现,实现了该项目登录窗体的GUI的搭建,用户的账号和密码校验完成后应当跳转到主窗体界面,这一节我们将具体介绍主窗体界面的设计与 ...

  3. delphi 登录界面 主窗体 切换_Python GUI项目实战(二)主窗体的界面设计与实现

    前言 上一节我们介绍了Python GUI项目实战(一)登录窗体的设计与实现,实现了该项目登录窗体的GUI的搭建,用户的账号和密码校验完成后应当跳转到主窗体界面,这一节我们将具体介绍主窗体界面的设计与 ...

  4. 视频教程-Python+Vue+Django前后端分离项目实战-Python

    Python+Vue+Django前后端分离项目实战 教学风格独特,以学员视角出发设计课程,难易适度,重点突出,架构清晰,将实战经验融合到教学中.讲授技术同时传递方法.得到广大学员的高度认可. 王进 ...

  5. python快速编程入门课后程序题答案-Python编程从零基础到项目实战 完整PPT+习题答案...

    Python编程从零基础到项目实战是一本介绍Python相关知识的Python基础教程,内容涉及算法.Python数据分析.图形处理.Web开发.科学计算.项目管理.人工智能.Python爬虫等.其中 ...

  6. 零基础学python实战答案-Python编程从零基础到项目实战 完整PPT+习题答案

    Python编程从零基础到项目实战是一本介绍Python相关知识的Python基础教程,内容涉及算法.Python数据分析.图形处理.Web开发.科学计算.项目管理.人工智能.Python爬虫等.其中 ...

  7. div+css静态网页设计web网页设计实例作业 ——中国风的茶文化(4页) web课程设计-HTML网页制作代码

    web网页设计实例作业 --中国风的茶文化(4页) web课程设计-HTML网页制作代码 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. ...

  8. web网页设计实例作业 ——中国风的茶文化(4页) web课程设计-HTML网页制作代码

    web网页设计实例作业 --中国风的茶文化(4页) web课程设计-HTML网页制作代码 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. ...

  9. python界面设计实例-Python GUI项目实战(二)主窗体的界面设计与实现

    前言 上一节我们介绍了登录窗体的GUI设计与功能实现,用户的账号和密码校验完成后应当跳转到主窗体内容,这一节我们将具体介绍主窗体界面的设计与功能实现! 一.基础界面设计 我们新建一个900x640的窗 ...

  10. python界面设计实例qt_python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例...

    在默认情况下,我们使用PyQt5创建出来的窗口和部件都是默认的样式,虽然谈不上很丑,但是也毫无美感可言.其实,在PyQt5中,我们可以有较高的自由度来自定义窗口和各种小部件的样式,通过自定义这些样式, ...

最新文章

  1. 一行CSS样式去除百度地图版权,去除百度地图右上角平移缩放控件的市县区文字
  2. 口腔微生物——“你的大能量,超乎我想象”
  3. 专访唐杰:万亿参数大模型只是一个开始
  4. string 字符串中字符无效_7.3 C++字符串类 | 使用string输出
  5. Python基础知识4--数据结构(树)
  6. Javascript的IE跟Firefox(火狐)兼容性-转
  7. 构造函数为什么不能是虚函数 ( 转载自C/C++程序员之家)
  8. redis-full-check
  9. float去掉小数点之后_float类型的存储方式
  10. SAP MM模块-实施顾问岗位-面试手册-面试总结
  11. 进入传奇荣耀显示服务器不存在,传奇荣耀————【合区】5月10日合区公告
  12. 超详细的80个Python入门实例,代码清晰拿来即用,学习提升必备
  13. 解决百度文库文字无法复制
  14. 三星s9更新android9.0,三星Galaxy S9/S9+ Android 9.0系统更新新进展
  15. scratch作品_孩子的scratch作品只能演示?教你把它三步变为电脑软件
  16. 用nmap查看局域网存活的主机
  17. UINO优锘:EMV,让IT告警实现至繁归于至简
  18. NIOS II——PIO寄存器分析及使用
  19. clip gradient
  20. 【阿里云物联网平台-1】使用MQTTfx模拟客户端,往阿里云物联网平台发布数据

热门文章

  1. leetcode 349. Intersection of Two Arrays
  2. 基于UDP的DDos反射放大攻击
  3. mysql 视图 临时表模式
  4. python写文件无法换行的问题
  5. 百分点内存数据库架构演变
  6. Java实现二叉树的构建与遍历
  7. 中间人攻击框架以及工具,中国寒龙出品欢迎下载!~
  8. 规则引擎QLExpress的简单应用
  9. 2011年11月份第一周51Aspx源码发布详情
  10. 码农翻身之——分布式,集群,负载均衡