python GUI 之 tkinter
写一个 登陆窗口来学习 tkinter ,还剩下一些问题
代码暂时如下
import tkinter as tk
import webbrowser
import pickle
from tkinter import messagebox
class window(tk.Tk):
def get_winfo_size(self):
return self.winfo_screenwidth(),self.winfo_screenheight()
def center_window(self,width,height):
screen_width, screen_height = self.get_winfo_size()
self.width = width
self.height = height
self.pos_x = int((screen_width - width) / 2)
self.pos_y = int((screen_height - height) / 2)
self.quit()
# print(self.winfo_reqwidth(), self.winfo_reqheight())
return super().geometry('{}x{}+{}+{}'.format(width, height, self.pos_x, self.pos_y))
def get_self_size(self):
return self.width,self.height
class login():
def __init__(self):
self.user_file = './user_info.pickle'
login = window()
login.resizable(0,0)
login.title('登录窗口')
login.geometry('500x300')
login.center_window(500, 300)
width, height = login.get_self_size()
print(width, height)
# 头部窗口
head_frame = tk.Frame(login)
# 画布 画背景图片
canvas = tk.Canvas(head_frame, bg='blue', height=100, width=500)
image_file = tk.PhotoImage(file='./image/bg.gif')
image = canvas.create_image(0, 0., anchor='nw', image=image_file)
canvas.pack()
head_frame.pack()
# 中间 窗口
centroid_frame = tk.Frame(login)
# 账号 密码框 登录 重置按钮
self.var_account_name = tk.StringVar()
self.var_psw = tk.StringVar()
self.signup_window = None
account_label = tk.Label(centroid_frame, text='账号', width=4, height=2)
account_label.grid(row=0, column=0, padx=5, pady=5)
account_entry = tk.Entry(centroid_frame, width=30, show=None,textvariable=self.var_account_name)
account_entry.grid(row=0, column=1, padx=5, pady=5)
psw_label = tk.Label(centroid_frame, text='密码', width=4, height=2)
psw_entry = tk.Entry(centroid_frame, width=30, show='*',textvariable=self.var_psw)
psw_label.grid(row=1, column=0, padx=5, pady=5)
psw_entry.grid(row=1, column=1, padx=5, pady=5)
register_label = tk.Label(centroid_frame, text="还没有账号?注册", fg="blue", cursor="hand2")
register_label.grid(row=1, column=2, padx=5, pady=5)
register_label.bind('<Button-1>',self.register_callback)
centroid_frame.pack()
# 尾部窗口
# tail_frame = tk.Frame(login)
remember_psw = tk.Checkbutton(login, text='记住密码')
remember_psw.place(x=120, y=205, anchor='nw')
auto_login = tk.Radiobutton(login, text='自动登录')
auto_login.place(x=210, y=205, anchor='nw')
login_btn = tk.Button(login, text='登录',command=self.login_trigger)
reset_btn = tk.Button(login, text='重置',command=self.reset_trigger)
login_btn.place(x=120, y=250, anchor='nw')
reset_btn.place(x=210, y=250, anchor='nw')
# tail_frame.place(x=0,y=250,anchor='nw')
# hyperlink = tkHyperlinkManager.HyperlinkManager(text)
login.mainloop()
def login_trigger(self):
usr_name = self.var_account_name.get()
psw = self.var_psw.get()
try:
with open(self.user_file,'rb') as usr_file:
user_info = pickle.load(usr_file)
except (FileNotFoundError,EOFError) as fe:
with open(self.user_file,'wb') as usr_file:
user_info = {'admin':'admin'}
pickle.dump(user_info,usr_file)
if usr_name not in user_info:
messagebox.showwarning(title='账号信息提示框',message='用户不存在')
return
else:
if psw != user_info[usr_name]:
messagebox.showerror(title='密码警告提示框',message='密码错误')
else:
messagebox.showinfo(title='登陆成功消息框',message='恭喜!登陆成功!')
def register_callback(self,event):
# webbrowser.open_new(r'http://www.baidu.com')
print('register callback...')
self.signup_window = window()
self.signup_window.center_window(400, 250)
self.signup_window.title('注册窗口')
# 注册 账号密码
self.signup_window.var_register_usr_name = tk.StringVar()
self.signup_window.var_register_usr_psw = tk.StringVar()
self.signup_window.var_register_usr_psw_confirm = tk.StringVar()
text_frame = tk.Frame(self.signup_window)
register_account_label = tk.Label(text_frame,text='账号',width=4,height=2)
register_account_entry = tk.Entry(text_frame,width=30,show=None,textvariable=self.signup_window.var_register_usr_name)
register_psw_label = tk.Label(text_frame,text='密码',width=4,height=2)
register_psw_entry = tk.Entry(text_frame,width=30,show='*',textvariable=self.signup_window.var_register_usr_psw)
register_psw_confirm_label = tk.Label(text_frame,text='确认密码',width=8,height=2)
register_psw_confirm_entry = tk.Entry(text_frame,width=30,show='*',textvariable=self.signup_window.var_register_usr_psw_confirm)
# register_account_label.place(x=0,y=20,anchor='nw')
# register_account_entry.place(x=30,y=20,anchor='nw')
# register_psw_label.place(x=0,y=60,anchor='nw')
# register_psw_entry.place(x=30,y=60,anchor='nw')
register_account_label.grid(row=0,column=0,padx=15,pady=10)
register_account_entry.grid(row=0,column=1,padx=15,pady=10)
register_psw_label.grid(row=1,column=0,padx=15,pady=10)
register_psw_entry.grid(row=1,column=1,padx=15,pady=10)
register_psw_confirm_label.grid(row=2,column=0,padx=15,pady=10)
register_psw_confirm_entry.grid(row=2,column=1,padx=15,pady=10)
text_frame.pack()
# 注册按钮
register_button = tk.Button(self.signup_window,text='注册',command=self.register_user)
register_button.pack()
self.signup_window.mainloop()
def register_user(self):
register_usr_name = self.signup_window.var_register_usr_name.get()
register_psw = self.signup_window.var_register_usr_psw.get()
register_psw_confirm = self.signup_window.var_register_usr_psw_confirm.get()
# 用户名 规则, 密码 规则 , 正则等待完善
print('register_usr_name %s' %register_usr_name)
print(register_psw , register_psw_confirm)
if register_psw != register_psw_confirm:
messagebox.showerror(title='密码不相等提示框',message='两次输入密码不等!')
else:
try:
with open(self.user_file) as usr_file:
register_user_info = {register_usr_name:register_psw}
print(register_user_info)
pickle.dump(register_user_info,usr_file)
self.signup_window.destroy()
except (FileNotFoundError,EOFError) as e:
print(e)
def reset_trigger(self):
self.var_account_name.set('') # 记得这里用 set 置空
self.var_psw.set('')
if __name__ == '__main__':
log = login()
python GUI 之 tkinter的更多相关文章
- Python GUI with Tkinter (from youtube) 在youtube上能找到很多编程视频...
Python GUI with Tkinter - 1 - Introduction以上链接是一个python tkinter视频系列的第一讲的链接.虽然英语不好,但是,程序还是看得懂的(照着做就可以 ...
- Python GUI编程(Tkinter) windows界面开发
Python实现GUI简单的来说可以调用Tkinter库,这样一般的需求都可以实现,显示简单的windows窗口代码如下: python_gui.py 1 #!C:\Python27\python.e ...
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介
Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...
- python GUI学习——Tkinter
支持python的常见GUI工具包: Tkinter 使用Tk平台 很容易得到 半标准 wxpython 基于wxWindows.跨平台越来越流行 Python Win 只能在Windows上使用 使 ...
- Python GUI工具Tkinter以及拖拉工具Page安装
如果使用Tkinter作为Python GUI工具,我们需要安装Tkinter,这个使用conda或者pip即可: conda install -c anaconda tk 为了提高界面编写效率,可以 ...
- Python -- Gui编程 -- Tkinter的使用 -- 基本控件
1.按钮 tkBtton.py import tkinter root = tkinter.Tk() btn1 = tkinter.Button(root, anchor=tkinter.E,\ te ...
- Python GUI编程--Tkinter
今天看到了GUI编程,书上推荐用wxPython,去官网上看了看,发现Windows的最高支持到2.7,我用的是3.4版本,咋办,用自带的库--Tkinter呗,它是Python的默认GUI库,几乎是 ...
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 二.Tkinter 是什么 三.Tkinter 控件详细介绍 1. T ...
- Python:GUI之tkinter学习笔记1控件的介绍及使用
相关内容: tkinter的使用 1.模块的导入 2.使用 3.控件介绍 Tk Button Label Frame Toplevel Menu Menubutton Canvas Entry Mes ...
- python GUI编程tkinter示例之目录树遍历工具
摘录 python核心编程 本节我们将展示一个中级的tkinter应用实例,这个应用是一个目录树遍历工具:它会从当前目录开始,提供一个文件列表,双击列表中任意的其他目录,就会使得工具切换到新目录中,用 ...
随机推荐
- Proxmox VE登陆的时候提示没有有效的订阅You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options.
问题描述: 用的是免费版的,所以每次都提示这个没有有效的订阅挺烦的 解决方法: 修改文件/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib. ...
- python 文件名的操作
1.文件操作 open()文件句柄:获取文件的路径信息 open() 打开一个文件,获取文件句柄 read() 全部读出出文件中的内容 readline() 读取文件中逐一读取一行数据 readlin ...
- ERROR in static/js/0.5d7325513eec31f1e291.js from UglifyJs
今天把vue项目打包是遇到这个问题.这是在服务器上打包时报的错误,本地打包不报错!很头疼!上网查了很多,发现有很多人和我遇到类似的问题,但是都没有解决我的问题!后来灵机一动,解决问题,这就跟大家说一下 ...
- 一本通 1223:An Easy Problem
\[传送门qwq\] [题目描述] 给定一个正整数N,求最小的.比N大的正整数M,使得M与N的二进制表示中有相同数目的1. 举个例子,假如给定的N为78,其二进制表示为1001110,包含4个1,那么 ...
- Python两大佬互相撕逼 技术何苦为难技术?
最近两天 Python 圈发生了一件大事,两个 Python 大佬撕逼了起来了. 不,其实是一个大佬(刘志军)被怼. 事情是这样的. 背景 人物介绍: 董明伟:公众号「Python 之美」的作者,似乎 ...
- centos 7修改时区
在线上环境遇到时间差八小时,怀疑是时区的原因: 然后再linux上运行: date 发现输出的是UTC时间,时间与现在差八个小时 然后通过以下命令去修改时区: ln -sf /usr/share/zo ...
- Jmeter名词注解
取值 ${ip}排除 .*\.js .*\.css .*\.png .*\.gif .*\.msp .*\.js 提取值 (.+?) (.*?)[() 括起来的部分就是需要提取的,对于你要提的内容需要 ...
- L2-4 部落 (25 分)
在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同 ...
- mapreduce map 的个数
在map阶段读取数据前,FileInputFormat会将输入文件分割成split.split的个数决定了map的个数.影响map个数(split个数)的主要因素有: 1) 文件的大小.当块(dfs. ...
- php函数 array_column
<?php $arr = [ [ 'id'=>1, 'name'=>'wang', 'age'=>10 ], [ 'id'=>2, 'name'=>'yong', ...