PyCharm 2024.1.1 构建GUI用户界面
PyCharm 是什么
-PyCharm是一种由JetBrains开发的Python集成开发环境(IDE)。它提供了代码编辑、调试、代码分析、版本控制等一系列功能,可以帮助开发者更高效地开发和管理Python项目。PyCharm具有智能代码补全、语法高亮、代码重构、自动格式化等功能,同时还可以与常用的Python框架和工具进行集成,如Django、Flask、Pytest等。总而言之,PyCharm是一款功能强大的Python开发工具。
参考资料
- Python GUI 编程 | 菜鸟教程
- python tk 档案 | Usage格式 (无连接)
一些准备
- PyCharm官网:jetbrains.com/zh-cn/
- 免费安装包:pycharm-community-2024.1.1.exe
——————————————————————————————————————————————
-先打开官网,点击下载,往下滑,找到windows版开源免费
如果实在要用上边的(反正我觉得没必要,python就够了)还想白嫖
2024激活码在评论区(主要是太长了)
-好,我们默认下好了,打开安装包
点击下一步
-设置下安装路径
点击下一步
-注意PATH勾选
-等待安装
-重启(啊啊啊,我得保存一下啊)
安装好了
-Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
打开PC,新建项目
进入init.py的文件下输入#encoding:utf-8__version__ = "v0.1.0"
记录版本信息
在lib根目录下新建fz文件,编写 docopt 文档注释
docopt会校验Usage内的命令格式,如 clidemo cmdA valueA 中,cmdA如果在命令行中出现 ,则为 True,否则为False,对应数值或字符串,否则为None
docopt校验输入的命令格式中,不存在Usage定义的格式,则会提示错误,并显示使用方法
Tips:可能会报错,属于正常现象
#encoding:utf-8""" CLI Demo Tool
Usage:
clidemo cmdA <valueA>
clidemo cmdB paramB <valueB>
Options:
-h --help Show Help doc.
-v --version Show Version.
"""
-pycharm窗口情况
-编前测试:
打开 cmd 输入python -m tkinter
测试有没有安装成功,一般python安装时自带
如果出现以下窗口,说明安装成功(电脑系统不同,窗口样式不同,但大致差不多)
编程部分
-导入tk库
import tkinter
正确tk使用方法~
创建一个GUI程序
- 导入 Tkinter 模块
- 创建控件
- 指定这个控件的 master, 即这个控件属于哪一个
- 告诉 GM(geometry manager) 有一个控件产生了。
# CSDN-熟
import tkinter
import tkinter as tk # 导入tkinter库
app = tkinter.Tk() # 让窗口等待与用户的交互
app.mainloop() # 返回 循环
- tk窗口
也可以自定义大小与标题
# CSDN-熟
import tkinter
import tkinter as tk # 导入tkinter库
app = tkinter.Tk() # 让窗口等待与用户的交互
app.title(app, 'EXOS-CSDN -熟') # 设置标题
app.geometry('500x500') # 大小
app.mainloop() # 返回 循环
Tkinter 组件
名称 | 描述 |
---|---|
Button | 按钮控件;在程序中显示按钮。 |
Canvas | 画布控件;显示图形元素如线条或文本 |
Checkbutton | 多选框控件;用于在程序中提供多项选择框 |
Entry | 输入控件;用于显示简单的文本内容 |
Frame | 框架控件;在屏幕上显示一个矩形区域,多用来作为容器 |
Label | 标签控件;可以显示文本和位图 |
…… | …… |
-以此类推,我们可以写出一个标准的用户界面
一个登录系统(不墨迹,上代码)
import tkinter as tk
from tkinter import messagebox
from Pillow import ImageTk
# CSDN -熟
sql = []
app = tk.Tk()
app.title('EXOS >> 个人')
app.geometry('500x500')
canva = tk.Canvas(app, width=700, height=500)
image_f = ImageTk.PhotoImage(file = 'perple.gif')
image = canvas.create_img(0, 0, anchor='nw', image=image_f)
canva.pack()
Name_lable = tk.Label(app, text='User', font=(16))
Email_lable = tk.Label(app, text='Email', font=(16))
Password_lable = tk.Label(app, text='Password', font=(16))
Name_lable.place(x=300, y=500)
Email_lable.place(x=300, y=500)
Password_lable.place(x=300, y=511)
nameval = tk.StringVar()
passwordval = tk.StringVar()
Name_entry = tk.Entry(app, textvariable=nameval, font=(12))
Email_entry = tk.Entry(app, textvariable=email, font=(12))
Password_entry = tk.Entry(app, textvariable=passwordval, show="·", font=(12))
Name_entry.place(x=400, y=520)
Email_entry.place(x=400, y=520)
Password_entry.place(x=400, y=560)
def sign_in_fun() :
user_si_name = name_entry.get()
user_si_psw = psw_entry.get()
if user_si_name in success:
i = success.index(user_si_name)
if success[i + 1] == user_si_pass:
tk.messagebox.showinfo(title='EXOS >> 登录信息', message="登录成功")
else:
tk.messagebox.showinfo(title='EXOS >> 登录信息', message="密码错误")
else:
res = tk.messagebox.askquestion(title='EXOS >> 登录信息', message="注意:用户名不存在,是否注册账号")
if res == 'yes':
sing_in_fun()
else:
pass
def sign_up_fun() :
singn_up_w = tk.Tk()
singn_up_w.title('EXOS >> 个人')
singn_up_w.geometry('500x500')
up_name_l = tk.Label(singn_up_w, text='User', font=(12))
up_name_l = tk.Label(singn_up_w, text='Email', font=(12))
up_name_l = tk.Label(singn_up_w, text='Password', font=(12))
up_name_l = tk.Label(singn_up_w, text='Confirm Password', font=(12))
su_name_entry.place(x=270, y=50)
su_email_entry.place(x=270, y=150)
su_pass_entry.place(x=270, y=150)
su_cpass_entry.place(x=270, y=250)
def su_conf() :
su_user = su_name_entry.get()
su_email = su_email_entry.get()
su_psw = su_pass_entry.get()
su_cpsw = su_cpass_entry.get()
if su_psw == su_cpsw:
tk.messagebox.showinfo(title='EXOS >> 注册', message='注册成功')
success_app(su_user)
success_app(su_psw)
singn_up_w.destroy()
else:
tk.messagebox.showinfo(title='EXOS >> 注册', message='密码错误')
def su_cancel_b():
result = tk.messagebox.askquestion(title="EXOS >> 放弃注册", message="是否放弃注册")
if result == "yes":
singn_up_w.destroy()
else:
pass
su_confirm_button = tk.Button(singn_up_w, text="Sign up", command=su_conf_b)
su_cancle_button = tk.Button(singn_up_w, text="Cancel", command=su_cancel_b)
su_confirm_button.place(x=170, y=320)
su_cancle_button.place(x=365, y=320)
signin_button = tk.Button(app, text='SING IN', command=sign_in_fun)
signup_button = tk.Button(app, text='SING IN', command=sign_up_fun)
signin_button.place(x=350, y=590)
signup_button.place(x=460, y=590)
app.mainloop()
——————————————————————————————————————————————