51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

初入Python:登陆界面以及登陆后显示新界面列子

自从成功上手 Python 后,就一发不可收拾,每天疯狂的练习,想做啥就去尝试,各种练习,其中遇到太多的坑,这些坑对于初学者而言需要花费巨额的时间去查阅和理解;

Python 学习感想

Python 作为我第一个掌握的 支持界面编程 的语言,我非常热爱它,它就像人们所说的那样,简单快捷方便

Python 的图形界面是真的非常糟糕的,虽然有很多大佬开发了一些 图形界面设计工具,但还是感觉糟糕,稳定性感觉不行,容易崩溃,还有就是控件太少;

比如 我昨天折腾的一个 小说追更工具,就差最后一步,显示文章内容了,结果突然发现,tkinter 居然没有内置的网页调用控件,虽然网上有些资料显示可以用其他第三方库实现,但是都是非常麻烦复杂的一个事情,另外也可以正则匹配 div 内容 然后慢慢调试好显示方式在输出到编辑器上面,但是这会是一个时间话,我最后选择了放弃,暂时不去折腾它

很多人都说 Python 的优点就是其 脚本方面 ,简单快捷,所以官方不会考虑也不需要考虑增加图形界面的发展潜力

对于我而言,我觉得能独立开发一款窗口程序是一件非常兴奋自豪的事情,所以即使如此,我也喜欢并且尝试用 Python 去编写窗口程序

目前依然能做到使用 Python 编写一些平时需要的功能脚本,奈何七秒记忆的我对于库的不熟悉,所以总是需要花费很多的时间...

最后,希望在未来的某天,完全掌握 Python 后,在去尝试接触 c++ 之类的 图形编程语言,那时 PHP + PYTHON 的功底或许能让我快速入门?

登陆界面代码

扯犊子了半天,进入正题,下面附上我写的 登陆界面以及登陆后显示新界面列子代码:

import tkinter as tk
import webbrowser
import configparser
import os
from tkinter import ttk
from tkinter import messagebox
class homes:
def init(self, 启动窗口):
self.启动窗口 = 启动窗口
self.启动窗口.title('')
self.启动窗口.resizable(width=False, height=False)
screenwidth = self.启动窗口.winfo_screenwidth()
screenheight = self.启动窗口.winfo_screenheight()
size = '%dx%d+%d+%d' % (1185, 698, (screenwidth - 1185) / 2, (screenheight - 698) / 2)
self.启动窗口.geometry(size)
`    self.标签1_标题 = tk.StringVar()
    self.标签1_标题.set('这是登陆后的界面,可以在这里添加登陆后的样式和功能')
    self.标签1 = tk.Label(self.启动窗口,textvariable=self.标签1_标题,anchor=tk.W)
    self.标签1.place(x=390,y=179,width=396,height=174)
`
class PyWinDesign:
#全局变量
global cf
cf = configparser.ConfigParser()
`def __init__(self, 启动窗口):
    self.启动窗口 = 启动窗口
    self.启动窗口.title('登陆')
    self.启动窗口.resizable(width=False, height=False)
    screenwidth = self.启动窗口.winfo_screenwidth()
    screenheight = self.启动窗口.winfo_screenheight()
    size = '%dx%d+%d+%d' % (348, 355, (screenwidth - 348) / 2, (screenheight - 355) / 2)
    self.启动窗口.geometry(size)
    
    self.photo = tk.PhotoImage(file=r'D:\Desktop\Python\logo.png')
    self.图片1 = ttk.Label(self.启动窗口,imag=self.photo,anchor=tk.CENTER)
    self.图片1.place(x=50,y=34,width=247,height=50)
    
    self.账号标签_标题 = tk.StringVar()
    self.账号标签_标题.set('账号:')
    self.账号标签 = ttk.Label(self.启动窗口,textvariable=self.账号标签_标题,anchor=tk.W)
    self.账号标签.place(x=56,y=147,width=37,height=24)
    
    self.账号编辑框_内容 = tk.StringVar()
    self.账号编辑框_内容.set('')
    self.账号编辑框 = ttk.Entry(self.启动窗口,textvariable=self.账号编辑框_内容,justify=tk.LEFT)
    self.账号编辑框.place(x=98,y=147,width=179,height=24)
    
    self.密码标签_标题 = tk.StringVar()
    self.密码标签_标题.set('密码:')
    self.密码标签 = ttk.Label(self.启动窗口,textvariable=self.密码标签_标题,anchor=tk.W)
    self.密码标签.place(x=56,y=198,width=37,height=24)
    
    self.密码编辑框_内容 = tk.StringVar()
    self.密码编辑框_内容.set('')
    self.密码编辑框 = ttk.Entry(self.启动窗口,textvariable=self.密码编辑框_内容,show='*',justify=tk.LEFT)
    self.密码编辑框.place(x=98,y=198,width=179,height=24)
    
    self.账号读取 = self.账号读取()
    self.登陆_标题 = tk.StringVar()
    self.登陆_标题.set('登陆')
    self.登陆 = ttk.Button(self.启动窗口,textvariable=self.登陆_标题)
    self.登陆.bind('<Button-1>',self.登陆_被鼠标左键按下)
    self.登陆.place(x=199,y=292,width=80,height=32)
    
    self.注册_标题 = tk.StringVar()
    self.注册_标题.set('注册')
    self.注册 = ttk.Button(self.启动窗口,textvariable=self.注册_标题)
    self.注册.bind('<Button-1>',self.注册_被鼠标左键按下)
    self.注册.place(x=90,y=292,width=80,height=32)
    
    self.记住账密_选中 = tk.IntVar()
    self.记住账密_选中.set(1)
    self.记住账密_标题 = tk.StringVar()
    self.记住账密_标题.set('记住账密')
    self.记住账密 = ttk.Checkbutton(self.启动窗口,textvariable=self.记住账密_标题,variable=self.记住账密_选中,onvalue=1,offvalue=0)
    self.记住账密.place(x=97,y=241,width=88,height=24)
    
def 账号存储(self):
    账号 = self.账号编辑框_内容.get()
    密码 = self.密码编辑框_内容.get()

    config = os.path.exists('config.ini')
    if config != 1:
        cf.add_section("User")
    cf.set("User", "username",账号)
    cf.set("User", "password",密码)

    with open("config.ini","w+") as f:
        cf.write(f)

def 账号读取(self):
    config = os.path.exists('config.ini')
    if config == 1:
        cf.read("config.ini")
        读账号 = cf.get("User", "username")
        读密码 = cf.get("User", "password")
        self.账号编辑框_内容.set(读账号)
        self.密码编辑框_内容.set(读密码)

def 销毁(self):
    for x in root.winfo_children():
        x.destroy()
    root.update()

def 登陆_被鼠标左键按下(self,event):
    记住账密 = self.记住账密_选中.get()
    账号 = self.账号编辑框_内容.get()
    密码 = self.密码编辑框_内容.get()

    if 记住账密 == 1:
        账号存储 = self.账号存储()
        if 账号 == 'admin' and 密码 == 'pass':
            messagebox.showinfo("提示","登陆成功")
            # 销毁登录框控件,一开始想直接销毁所有控件,然后更改界面大小,在添加新的控件,但是暂时遇到难题,不知道如何添加,destroy删除了所有 tk控件
            #self.销毁()
            root.withdraw() # 隐藏登陆框
            home.deiconify() # 显示登陆后的界面

        else:
            messagebox.showinfo("提示","登陆失败")



def 注册_被鼠标左键按下(self,event):
    webbrowser.open(url = 'https://www.mrwu.red/wp-login.php?action=register', new = 0)
`
if name == 'main':
home = tk.Tk()
root = tk.Toplevel()
`home.withdraw() #启动后先隐藏大界面
app = PyWinDesign(root)
apps = homes(home)
home.mainloop()</pre>
`
 演示效果
 
  
   
  
 
 最后唠叨几句
 可能会有大佬吐槽我代码写的太烂,代码中的中文看着太尬
 我想说我英语幼儿园毕业,既然 Python 支持中文,我为什么不用中文,非要去写个英文装逼,以后自己看自己代码都看不懂了,而且我图形界面用了辅助设计工具,那个工具生成的代码就是中文命名滴~
 抖音上看到某视频说可以先吧原控件全部销毁,在更改窗口大小,实现登陆后显示大窗口的效果
 最开始我也确实是这样的写法,后面发现问题有点严重,我的所有 tk 控件全部销毁掉了,也就是说无法在给登陆后的界面添加新的控件,不知道是不是我操作不对,我看视频中他的也是登陆后一片空白,没有一个控件,不知道他是没法添加还是故意留个坑的,以后有机会多在摸索这个,这次先用隐藏的方式来实现
 界面上的博客logo解密
 或许眼见的都发现了那个显眼的logo,其实一开始我是准备做全套的,把我博客面板做成工具的,但是遇到了些问题:
 1.面板工具页面需要登录,但是我博客登录为了安全起见,加了两个验证码,并且其中一个图形验证码还附带 随机key ,这就导致我不知道如何去实现模拟登陆效果了,如果去掉验证码,我博客安全会降低许多,并且会面临一堆垃圾账号注册,因此后面选择放弃,虽然真要折腾是可以弄出来的,但是那将花费很多时间,所以我选择把时间留给其他的练习
 2.网站是我的,我当然能自己开发独立 api 接口,自己定义登陆需要的参数,比如去掉验证码,只需要账号密码,并且返回方式是 json 更方便我的工具判断;最开始我想弄的,后面想想还是选择放弃,没有验证码真的不安全,我不希望某天我的账号或者其他付费会员账号被人爆破出来
 所以,总而言之,这次练习最终只能以一个列子为名结束,害
赞(0)
未经允许不得转载:工具盒子 » 初入Python:登陆界面以及登陆后显示新界面列子