#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import ttk #tk的部件进阶
from tkinter import scrolledtext #滚动条文本
from tkinter import Menu #菜单栏
from tkinter import messagebox as msg #消息弹框
from tkinter import Tk #
from tkinter import Spinbox #数字调整框
'''
模块一 演示tkinter多窗口关闭 隐藏按钮 显示等相关操作
模块二 演示一个先提示登录框 登录成功后显示登录页面的例子
'''
# ====================================================================
# 模块一 主窗体类的定义
# ====================================================================
class MulWindos():
def __init__(self):
self.win = Tk()
self.win.title('多窗口操作')
#self.win.attributes("-topmost",1) #窗口置顶
self.win.geometry("200x400+250+250")
#附带窗口的创建
self.top = tk.Toplevel()
#self.top.overrideredirect(1) #隐藏窗口的所有按钮 如关闭缩小等
self.top.title('python3')
self.top.withdraw() #隐藏窗口
#self.top.resizable(0, 0) #禁用最大化和自己调整大小
self.top.attributes('-toolwindow', True) #删除最大化 最小化按钮
#调用创建部件函数
self.create_widget()
#绑定事件
self.bind_event()
# ================================================================
# 创建部件
# ================================================================
def create_widget(self):
ext_btn = ttk.Button(self.win, text='扩展功能>>>', width=40,
command=self.ext_featrues)
ext_btn.grid(column=0, row=0, sticky='W', pady=20)
hide_btn = ttk.Button(self.win, text='隐藏扩展<<<', width=40,
command=self.hide_featrues)
hide_btn.grid(column=0, row=1, sticky='W', pady=20)
# ================================================================
# 绑定事件
# ================================================================
def bind_event(self):
self.top.protocol("WM_DELETE_WINDOW", self.close_callback)
# ================================================================
# 按钮功能函数
# ================================================================
# 显示扩展窗口
def ext_featrues(self):
print('显示扩展窗口')
# 普通弹出方式
self.top.update() #更新页面
self.top.deiconify() #展示页面
#指定显示的位置 宽 X 高 + X偏移 + Y偏移
self.top.geometry("200x400+465+250")
self.top.grab_set() #设置为模态窗口
# 飞入弹出方式
#self.top.iconify()
#self.top.deiconify()
# 隐藏扩展窗口
def hide_featrues(self):
self.top.withdraw() #取消页面
# 窗口关闭两个窗口一起关闭
def close_callback(self):
if msg.askyesnocancel('取消登录','您确认要取消登录吗'):
self.top.destroy()
self.win.destroy()
else:
return
# ====================================================================
# 模块二 软件登录
# ====================================================================
class Login():
def __init__(self):
# 直接显示登录窗口
self.win = Tk()
self.win.title('抢班助手 -v1.0.0') # 设置标题
login = self.create_login() # 展示登录按钮
# 登录窗口的定义
def create_login(self):
# 创建一个平面
self.login_frame = tk.Frame(self.win)
self.login_frame.grid(padx=15, pady=15)
# 登录框 用户名和密码
ttk.Label(self.login_frame, text='用户名').grid(column=1, row=1,
columnspan=2)
self.username = ttk.Entry(self.login_frame)
self.username.grid(column=3, row=1, columnspan=3)
ttk.Label(self.login_frame, text='密码').grid(column=1, row=2,
columnspan=2)
self.password = ttk.Entry(self.login_frame, show='*')
self.password.grid(column=3,row=2,columnspan=3)
# 登录框 注册和登录按钮
ttk.Button(self.login_frame, text='注册', command=self.reg).grid(
column=2, row=3, columnspan=2, pady=15)
ttk.Button(self.login_frame, text='登录', command=self.cert).grid(
column=4, row=3, pady=15)
# 主页面的定义
def create_index(self):
# 创建一个平面
self.index_frame = tk.Frame(self.win)
self.index_frame.grid()
# 建立对应的标题
ttk.Label(self.index_frame,
text='欢迎 hello 您的账户到期时间为 2020-12-31').grid(column=0,
row=0)
# 登录按钮方法
def cert(self):
#获取账号名和密码
username = self.username.get()
password = self.password.get()
print("username is : {} \n password is : {} ".format(username,
password))
# 验证账号名和密码
# 可以用socket 或者 mysql数据库验证的方式登录
# 这里仅做最简单的验证操作
if username == 'hello' and password == 'hello':
print('验证通过')
self.login_frame.destroy() #销毁掉当前的登录页面
self.create_index() #创建登录页面
else:
msg.showerror('登录失败','账号或者密码错误')
# 注册按钮方法
def reg(self):
reg_top = tk.Toplevel(self.login_frame)
tk.Label(reg_top, text='用户注册').grid(column=2, row=2)
# ====================================================================
# 运行程序
# ====================================================================
mulwin = Login()
mulwin.win.mainloop()