经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
Python GUI编程详解
来源:jb51  时间:2021/10/8 13:06:15  对本文有异议

Python GUI编程

0.创建窗口

  1. import tkinter as tk
  2. #创建一个窗口
  3. root = tk.Tk()
  4. root.mainloop()
  5. # 第2步,给窗口的可视化起名字
  6. root.title('My Window')
  7. # 设置窗口最小和最大
  8. root.minsize(300,300)
  9. root.maxsize(500,500)

img

1.Label和Button的使用

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # author:洪卫
  4. import tkinter as tk # 使用Tkinter前需要先导入
  5. # 第1步,实例化object,建立窗口window
  6. window = tk.Tk()
  7. # 第2步,给窗口的可视化起名字
  8. window.title('My Window')
  9. # 第3步,设定窗口的大小(长 * 宽)
  10. window.geometry('500x300') # 这里的乘是小x
  11. # 第4步,在图形界面上设定标签
  12. var = tk.StringVar() # 将label标签的内容设置为字符类型,用var来接收hit_me函数的传出内容用以显示在标签上
  13. l = tk.Label(window, textvariable=var, bg='green', fg='white', font=('Arial', 12), width=30, height=2)
  14. # 说明: bg为背景,fg为字体颜色,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
  15. l.pack()
  16. # 定义一个函数功能(内容自己自由编写),供点击Button按键时调用,调用命令参数command=函数名
  17. on_hit = False
  18.  
  19. def hit_me():
  20. global on_hit
  21. if on_hit == False:
  22. on_hit = True
  23. var.set('you hit me')
  24. else:
  25. on_hit = False
  26. var.set('')
  27.  
  28. # 第5步,在窗口界面设置放置Button按键
  29. b = tk.Button(window, text='hit me', font=('Arial', 12), width=10, height=1, command=hit_me)
  30. b.pack()
  31. # 第6步,主窗口循环显示
  32. window.mainloop()

2.Entry和Text的使用

Entry是tkinter类中提供的的一个单行文本输入域,用来输入显示一行文本,收集键盘输入(类似 HTML 中的 text)。

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # author:洪卫
  4. import tkinter as tk # 使用Tkinter前需要先导入
  5. # 第1步,实例化object,建立窗口window
  6. window = tk.Tk()
  7. # 第2步,给窗口的可视化起名字
  8. window.title('My Window')
  9. # 第3步,设定窗口的大小(长 * 宽)
  10. window.geometry('500x300') # 这里的乘是小x
  11. # 第4步,在图形界面上设定输入框控件entry并放置控件
  12. e1 = tk.Entry(window, show='*', font=('Arial', 14)) # 显示成密文形式
  13. e2 = tk.Entry(window, show=None, font=('Arial', 14)) # 显示成明文形式
  14. e1.pack()
  15. e2.pack()
  16. # 第5步,主窗口循环显示
  17. window.mainloop()

Text是tkinter类中提供的的一个多行文本区域,显示多行文本,可用来收集(或显示)用户输入的文字(类似 HTML 中的 textarea),格式化文本显示,允许你用不同的样式和属性来显示和编辑文本,同时支持内嵌图象和窗口。

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # author:洪卫
  4. import tkinter as tk # 使用Tkinter前需要先导入
  5. # 第1步,实例化object,建立窗口window
  6. window = tk.Tk()
  7. # 第2步,给窗口的可视化起名字
  8. window.title('My Window')
  9. # 第3步,设定窗口的大小(长 * 宽)
  10. window.geometry('500x300') # 这里的乘是小x
  11. # 第4步,在图形界面上设定输入框控件entry框并放置
  12. e = tk.Entry(window, show=None) # 显示成明文形式
  13. e.pack()
  14.  
  15. # 第5步,定义两个触发事件时的函数insert_point和insert_end(注意:因为Python的执行顺序是从上往下,所以函数一定要放在按钮的上面)
  16. def insert_point(): # 在鼠标焦点处插入输入内容
  17. var = e.get()
  18. t.insert('insert', var)
  19.  
  20. def insert_end(): # 在文本框内容最后接着插入输入内容
  21. var = e.get()
  22. t.insert('end', var)
  23.  
  24. # 第6步,创建并放置两个按钮分别触发两种情况
  25. b1 = tk.Button(window, text='insert point', width=10,
  26. height=2, command=insert_point)
  27. b1.pack()
  28. b2 = tk.Button(window, text='insert end', width=10,
  29. height=2, command=insert_end)
  30. b2.pack()
  31. # 第7步,创建并放置一个多行文本框text用以显示,指定height=3为文本框是三个字符高度
  32. t = tk.Text(window, height=3)
  33. t.pack()
  34. # 第8步,主窗口循环显示
  35. window.mainloop()

Entry.get() 获取输入的文本内容。

Text.insert(‘insert',content) 鼠标焦点处插入内容

Text.insert(‘end',content) 末尾插入内容。

3.Grid网格布局

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # author:洪卫
  4. import tkinter as tk # 使用Tkinter前需要先导入
  5. # 第1步,实例化object,建立窗口window
  6. window = tk.Tk()
  7. # 第2步,给窗口的可视化起名字
  8. window.title('My Window')
  9. # 第3步,设定窗口的大小(长 * 宽)
  10. window.geometry('500x300') # 这里的乘是小x
  11. # 第4步,grid 放置方法
  12. for i in range(3):
  13. for j in range(3):
  14. tk.Label(window, text='('+str(i)+','+str(j)+')').grid(row=i, column=j, padx=10, pady=10, ipadx=10, ipady=10)
  15. # 第5步,主窗口循环显示
  16. window.mainloop()

4.Frame框架

Frame:框架,用来承载放置其他GUI元素,就是一个容器,是一个在 Windows 上分离小区域的部件, 它能将 Windows 分成不同的区,然后存放不同的其他部件. 同时一个 Frame 上也能再分成两个 Frame, Frame 可以认为是一种容器.

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # author:洪卫
  4. import tkinter as tk # 使用Tkinter前需要先导入
  5. # 第1步,实例化object,建立窗口window
  6. window = tk.Tk()
  7. # 第2步,给窗口的可视化起名字
  8. window.title('My Window')
  9. # 第3步,设定窗口的大小(长 * 宽)
  10. window.geometry('500x300') # 这里的乘是小x
  11. # 第4步,在图形界面上创建一个标签用以显示内容并放置
  12. tk.Label(window, text='on the window', bg='red', font=('Arial', 16)).pack() # 和前面部件分开创建和放置不同,其实可以创建和放置一步完成
  13. # 第5步,创建一个主frame,长在主window窗口上
  14. frame = tk.Frame(window)
  15. frame.pack()
  16. # 第6步,创建第二层框架frame,长在主框架frame上面
  17. frame_l = tk.Frame(frame) # 第二层frame,左frame,长在主frame上
  18. frame_r = tk.Frame(frame) # 第二层frame,右frame,长在主frame上
  19. frame_l.pack(side='left')
  20. frame_r.pack(side='right')
  21. # 第7步,创建三组标签,为第二层frame上面的内容,分为左区域和右区域,用不同颜色标识
  22. tk.Label(frame_l, text='on the frame_l1', bg='green').pack()
  23. tk.Label(frame_l, text='on the frame_l2', bg='green').pack()
  24. tk.Label(frame_l, text='on the frame_l3', bg='green').pack()
  25. tk.Label(frame_r, text='on the frame_r1', bg='yellow').pack()
  26. tk.Label(frame_r, text='on the frame_r2', bg='yellow').pack()
  27. tk.Label(frame_r, text='on the frame_r3', bg='yellow').pack()
  28. # 第8步,主窗口循环显示
  29. window.mainloop()

在这里插入图片描述

关于边距

padx,pady 外边距水平方向和垂直方向。

ipadx,ipady 内边距。

padx=10,表示左右边距为10像素。

padx=(10,20) 表示左边距10,右边距20.

https://www.cnblogs.com/rainbow-tan/p/14694211.html

5.messagebox消息框

  1. import tkinter as tk
  2. from tkinter import messagebox
  3. if __name__ == '__main__':
  4. def LoginButton():
  5. u = rt.username.get()
  6. p = rt.password.get()
  7. if len(u) == 0 or len(p) == 0:
  8. messagebox.showerror('提示:', '输入信息为空')
  9. else:
  10. messagebox.showinfo('提示:', '用户名: %s\n密码为: %s\n' % (u, p))
  11.  
  12. # 主窗口
  13. rt = tk.Tk()
  14. rt.geometry('300x300')
  15. # 变量
  16. rt.username = tk.StringVar()
  17. rt.password = tk.StringVar()
  18. # 账号
  19. f1 = tk.Frame(rt)
  20. tk.Label(f1, text='账号: ').grid(row=0, column=0, padx=30)
  21. tk.Entry(f1, textvariable=rt.username).grid(row=0, column=1)
  22. f1.grid(pady=50)
  23. # 密码
  24. f2 = tk.Frame(rt)
  25. tk.Label(f2, text='密码: ').grid(row=1, column=0, padx=30)
  26. tk.Entry(f2, show='*', textvariable=rt.password).grid(row=1, column=1)
  27. f2.grid()
  28. # 登录按钮
  29. tk.Button(rt, text='登录', command=LoginButton).grid(pady=30)
  30. rt.mainloop()

在这里插入图片描述

6.下拉框

  1. def GetIdentity(*args):
  2. identity = rt.identity.get()
  3. print(identity)
  4. # 身份下拉框
  5. f0 = tk.Frame(rt)
  6. tk.Label(f0, text='身份: ').grid(row=0, column=0, padx=(5,30))
  7. identityBox = ttk.Combobox(f0, textvariable=rt.identity, values=['管理员', '用户', '其他'],width=10)
  8. identityBox.grid(row=0, column=1)
  9. identityBox.current(1)
  10. identityBox.bind("<<ComboboxSelected>>", GetIdentity)
  11. f0.grid(padx=0,pady=20)

在这里插入图片描述

7.Menu菜单

创建一个顶级菜单,你需要先创建一个菜单实例,然后使用 add() 方法将命令和其它子菜单添加进去:

  1. import tkinter as tk
  2. root = tk.Tk()
  3. def callback():
  4. print("~被调用啦~")
  5. #创建一个顶级菜单
  6. menubar = tk.Menu(root)
  7. menubar.add_command(label = "Hello", command = callback)
  8. menubar.add_command(label = "Quit", command = root.quit)
  9. #显示菜单
  10. root.config(menu = menubar)
  11. root.mainloop()

2.创建一个下拉菜单(或者其他子菜单),方法也是大同小异,最主要的区别是它们最后需要添加到主菜单上(而不是窗口上):

  1. import tkinter as tk
  2. root = tk.Tk()
  3. def callback():
  4. print("~被调用了~")
  5. # 创建一个顶级菜单
  6. menubar = tk.Menu(root)
  7. # 创建一个下拉菜单“文件”,然后将它添加到顶级菜单中
  8. filemenu = tk.Menu(menubar, tearoff=False)
  9. filemenu.add_command(label="打开", command=callback)
  10. filemenu.add_command(label="保存", command=callback)
  11. filemenu.add_separator()
  12. filemenu.add_command(label="退出", command=root.quit)
  13. menubar.add_cascade(label="文件", menu=filemenu)
  14. # 创建另一个下拉菜单“编辑”,然后将它添加到顶级菜单中
  15. editmenu = tk.Menu(menubar, tearoff=False)
  16. editmenu.add_command(label="剪切", command=callback)
  17. editmenu.add_command(label="拷贝", command=callback)
  18. editmenu.add_command(label="粘贴", command=callback)
  19. menubar.add_cascade(label="编辑", menu=editmenu)
  20. # 显示菜单
  21. root.config(menu=menubar)
  22. root.mainloop()

https://blog.csdn.net/qq_41556318/article/details/85273584


项目学习、

1.点名器

在这里插入图片描述

在这里插入图片描述

a.导航栏

顶级菜单分为两个子菜单:菜单和导入人名列表。

子菜单三个功能:删除库,退出,显示作者。

b.主体

用一个Label 表示提示信息(请导入人名列表,请选择人数)

然后三个Label分别显示选择几个人,三个Button按钮。

清零按钮用来清屏三个Label。

c.逻辑

运行程序,先检查是否当前工作目录下是否有文件库.txt(人名数据表)

没有提示导入,然后点击导入,会在工作目录下生成一个库.txt。

点对应的生成按钮,利用random函数从人名表中生成。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注w3xue的更多内容!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号