python学习-11【图形用户界面】

server/2024/9/25 8:24:33/

1、EasyGUI

快速入门

在命令提示符中使用 pip install easygui 命令下载并安装 Easy GUI

功能演示

1、 msgbox() 函数可以显示一个对话框,默认提供名为 OK 的按钮

msgbox(msg='(message)', title='', ok_button='OK', image=None, root=None)

2、ccbox() 函数用于提供选择功能,使用 choice 指定选项

ccbox(msg='', title='', choice=('Continue', 'Cancel'), image=None)

选择 Continue 返回 1(True),选择 Cancel 返回 0(False)

3、buttonbox() 函数自定义一组按钮。
点击任意按钮会返回按钮的文本内容。

buttonbox(msg='', title='', choices=('Button1', 'Button2', 'Button3'), image=None, root=None)

在为 image 参数赋值时,可以设置 .gif 或 .png 格式的图像

4、enterbox() 函数用于为用户提供一个简单的输入框,该函数的返回值就是用户输入的字符串

enterbox(msg='', title='', default='', strip=True, image=None, root=None)

默认返回的值会自定去除首尾空格,当 strip 为 False 时,保留空格。

5、multpasswordbox() 函数可以提供多个输入框,最后一个输入框中会以密码的形式(*)显示输入的信息

multpasswordbox(msg='', title='', fields=(), values=())

python">import easygui
easygui.multpasswordbox('please input the username and the password:', title='login', field=('username: ', 'password: '))

在这里插入图片描述

2、Tkinter(官方默认)

常用组件

1、Label 组件用于在界面上输出描述内容

python">from tkinter import *tk1 = Tk() # 主窗口lab1 = Label(tk1, text='This is your message............', justify=LEFT, padx=10) # 文本 Label 对象,justify:文字对齐方式,pasx:设置水平位置与边框的距离
lab1.pack(side=RIGHT) # 设置文本 Label 组件的方位pic = PhotoImage(file='personal.png') # PhotoImage 实例化一个图片对象
pic_lab = Label(tk1, image=pic)
pic_lab.pack(side=LEFT)mainloop() # 程序进入主事件循环

在这里插入图片描述

2、Button 组件可以生成一个按钮

python">from tkinter import *
import sysdef fun1():var.set('''abcdefg,hijklmn,opqrst,uvwxyz. ''')
def back():sys.exit(0) # 退出程序tk1 = Tk()
f1 = Frame(tk1)
f2 = Frame(tk1)
var = StringVar()
var.set('ABCDEFG')
lab1 = Label(f1, textvariable=var, justify=LEFT) # textvariable 参数设置文本的变化
lab1.pack(side=RIGHT)pic = PhotoImage(file='personal.png')
pic_lab = Label(f1, image=pic)
pic_lab.pack(side=LEFT)button1 = Button(f2, text='click me for more', command=fun1, padx=30)
button2 = Button(f2, text='close', command=back, padx=30)
button1.pack(side=LEFT)
button2.pack(side=RIGHT)
f1.pack(padx=10, pady=20)
f2.pack(padx=10, pady=20)mainloop()

在这里插入图片描述
在这里插入图片描述

  • pad(x, y, z):设置三维距离

3、Radiobutton 组件用于实现单选按钮的效果,按钮之间是互斥的关系

python">from tkinter import *tk1 = Tk()lab1 = Label(tk1, text='What is your favorite letter?', justify=LEFT, padx=10)
lab1.pack(side=TOP)choice = [('A', 1), ('B', 2), ('C', 3), ('D', 4)]
int_v = IntVar() # 处理整型数据
int_v.set(1)for i, j in choice:radio_bt = Radiobutton(tk1, text=i, variable=int_v, value=j)radio_bt.pack(anchor=W)mainloop()

在这里插入图片描述

事件处理

对于每个组件来说,都可以通过 bind() 方法将函数或方法绑定到到具体的事件上。当事件触发时,会调用 handler() 方法

使用 bind() 方法将具体的事件序列自定义的方法进行绑定。

事件序列使用字符串的形式来表示,包含在 <> 内,比如 <Button-1> 、<KeyPress-W>

python">from tkinter import *tk1 = Tk()
def fun1(location): # 显示位置print('location clicked: ', location.x, location.y)f1 = Frame(tk1, width=200, height=200)
f1.bind('<Button-1>', fun1)
f1.pack()mainloop()

3、wxPython 框架

安装 wxPython

pip install wxPython

wxPython 程序

wxPython 程序至少需要包括一个应用对象 wx.App 和一个窗口对象 wx.Frame

wx.Frame(parent, id=-1, title='', size=wx.DefaultSize, pos=wx.Defaultposition, name='frame', style=wx.DEFAULT_FRAME_STYLE)

  • parant:框架的父窗口。如果是顶级窗口,则值为 None。
  • id:新窗口的 wxPython ID 号,默认为 -1, 表示让 wxPython 自动生成一个新的 ID
  • title:窗口的标题
  • size:用于指定窗口的初始尺寸((-1, -1) 表示让系统决定窗口的初始尺寸)
  • pos:指定窗口左上角的位置((0, 0) 表示左上角,默认 (-1, -1) 表示让系统决定窗口的位置
  • name:框架内在的名称,通过该参数可以找到窗口
  • style:指定窗口类型的常量,可以通过或运算进行组合
python">import wxapp = wx.App() # 应用程序对象
frame = wx.Frame(None, title='wxPython window', size=(400, 300), pos=(100, 100)) # 窗口对象
frame.Show() # 显示窗口
app.MainLoop()

在这里插入图片描述

常用控件

wxPython 的所有控件都继承自 wx.Control 类

1、文本控件

  • wx.StaticText 用于在窗口中显示文本
    wx.StaticText(parent, id, label, size=wx.DefaultSize, pos=wx.DefaultPosition, style=0, name='staticText')

    • parent:父窗口部件

    • id:标识符,-1 表示自动创建一个唯一的标识

    • label:显示在静态控件中的文本内容

    • size:窗口部件的大小

    • pos:窗口部件的位置

    • style:样式标记

    • name:对象的名字

  • wx.Panel() 创建画板

  • wx.Font() 设置字体

    • 数字表示字体的整体尺寸
    • wx.DEFAULT 使用系统默认的字体
    • wx.FONTSTYLE_NORMAL 字体正常
    • wx.NORMAL 字体的醒目程度正常
python">import wxclass MyFrame(wx.Frame):def __init__(self, parent, id):wx.Frame.__init__(self, parent, id, title='Appreciation of Tang Poetry', pos=(100, 100), size=(400, 300))panel = wx.Panel(self)title = wx.StaticText(panel, label='奉和中书舍人贾至早朝大明宫——岑参[唐]', pos=(80, 20))font = wx.Font(10, wx.DEFAULT, wx.FONTSTYLE_NORMAL, wx.NORMAL)title.SetFont(font)wx.StaticText(panel, label='鸡鸣紫陌曙光寒,莺啭皇州春色阑。', pos=(100, 50))wx.StaticText(panel, label='金阙晓钟开万户,玉阶仙仗拥千官', pos=(100, 70))wx.StaticText(panel, label='花迎剑佩星初落,柳拂旌旗露未干。', pos=(100, 90))wx.StaticText(panel, label='独有凤凰池上客,阳春一曲和皆难。', pos=(100, 110))if __name__ == '__main__':app = wx.App()frame = MyFrame(None, id=-1)frame.Show()app.MainLoop()

在这里插入图片描述

  • wx.TextCtrl 接收用于输入的文本
    wx.TextCtrl(parent, id, value='', size=wx.DefaultSize, pos=wx.DefaultPosition, style=0, validator=wx.DefaultValidator, name = wx.TextCtrlNameStr)
    • value:显示在该控件中的初始文本
    • style:单行输入文本框的样式
    • validator:用于过滤数据
python">import wxclass MyFrame(wx.Frame):def __init__(self, parent, id):wx.Frame.__init__(self, parent, id, title='login', size=(400, 300))panel = wx.Panel(self)self.static_title = wx.StaticText(panel, label='user login page', pos=(140, 20))self.label_user = wx.StaticText(panel, label='username: ', pos=(50, 70))self.user_name = wx.TextCtrl(panel, pos=(120, 70), size=(220, 25), style=wx.TE_LEFT)self.label_pwd = wx.StaticText(panel, label='password: ', pos=(50, 110))self.pwd = wx.TextCtrl(panel, pos=(120, 110), size=(220, 25), style=wx.TE_PASSWORD)if __name__ == '__main__':app = wx.App()frame = MyFrame(None, id=-1)frame.Show()app.MainLoop()

在这里插入图片描述

2、按钮控件

wx.Button 控件用于生成一个按钮

python">import wxclass MyFrame(wx.Frame):def __init__(self, parent, id):wx.Frame.__init__(self, parent, id, title='login', size=(400, 300))panel = wx.Panel(self)self.static_title = wx.StaticText(panel, label='user login page', pos=(140, 20))self.label_user = wx.StaticText(panel, label='username: ', pos=(50, 70))self.user_name = wx.TextCtrl(panel, pos=(120, 70), size=(220, 25), style=wx.TE_LEFT)self.label_pwd = wx.StaticText(panel, label='password: ', pos=(50, 110))self.pwd = wx.TextCtrl(panel, pos=(120, 110), size=(220, 25), style=wx.TE_PASSWORD)# 按钮self.bt_confirm = wx.Button(panel, label='confirm', pos=(125, 160))self.bt_cancel = wx.Button(panel, label='cancel', pos=(215, 160))if __name__ == '__main__':app = wx.App()frame = MyFrame(None, id=-1)frame.Show()app.MainLoop()

在这里插入图片描述

布局管理

size 布局(尺寸布局器)可以随着界面调整而自动调整到合适的位置

  • BoxSizer:在水平或垂直线
  • GridSizer:基础的网格布局(适用于同样的尺寸且整齐放入)
  • FlexGridSizer:以 GridSizer 为基础,更好地适应不同尺寸的窗口部件
  • GridBagSizer:基于 GridSizer,可以随意放置
  • StaticBoxSizer:标准的 BoxSizer,附带有标题和环线

e.g.(BoxSizer):

python">import wxclass MyFrame(wx.Frame):def __init__(self, parent, id):wx.Frame.__init__(self, parent, id, 'login', size=(400, 300))panel = wx.Panel(self)self.bt_confirm = wx.Button(panel, label='confirm')self.bt_cancel = wx.Button(panel, label='cancel')self.title = wx.StaticText(panel, label='user login page')self.label_user = wx.StaticText(panel, label='username: ')self.text_user = wx.TextCtrl(panel, style=wx.TE_LEFT)self.label_pwd = wx.StaticText(panel, label='password: ')self.text_pwd = wx.TextCtrl(panel, style=wx.TE_PASSWORD)# 添加容器 容器中的控件 横向 排列hsizer_user = wx.BoxSizer(wx.HORIZONTAL)hsizer_user.Add(self.label_user, proportion=0, flag=wx.ALL, border=5)hsizer_user.Add(self.text_user, proportion=1, flag=wx.ALL, border=5)hsizer_pwd = wx.BoxSizer(wx.HORIZONTAL)hsizer_pwd.Add(self.label_pwd, proportion=0, flag=wx.ALL, border=5)hsizer_pwd.Add(self.text_pwd, proportion=1, flag=wx.ALL, border=5)hsizer_btn = wx.BoxSizer(wx.HORIZONTAL)hsizer_btn.Add(self.bt_confirm, proportion=0, flag=wx.ALIGN_CENTER, border=5)hsizer_btn.Add(self.bt_cancel, proportion=1, flag=wx.ALIGN_CENTER, border=5)# 添加容器 容器中控件 纵向 排列vsizer_all = wx.BoxSizer(wx.VERTICAL)vsizer_all.Add(self.title, proportion=0, flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER, border=15)vsizer_all.Add(hsizer_user, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45)vsizer_all.Add(hsizer_pwd, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=45)vsizer_all.Add(hsizer_btn, proportion=0, flag=wx.ALIGN_CENTER | wx.TOP, border=15)panel.SetSizer(vsizer_all) # 设置尺寸器if __name__ == '__main__':app = wx.App()frame = MyFrame(parent=None, id=-1)frame.Show()app.MainLoop()

Add() 方法将控件放置到尺寸器中:Add(control, proportion, flag, border)

  • control:表示需要添加的控件
  • proportion:控制窗口的总尺寸,相对其它窗口的比例,取 0、1、2
  • flag:使用 | 操作符可以指定对齐方式
  • border:控制控件的边距
事件处理
python">import wxclass MyFrame(wx.Frame):def __init__(self):super().__init__(None, title='require', size=(300, 200))panel = wx.Panel(parent=self)self.statictext = wx.StaticText(parent=panel, label='clicking button brings surprises', pos=(20, 20))b = wx.Button(parent=panel, label='click', pos=(100, 70))self.Bind(wx.EVT_BUTTON, self.on_click, b) # EVT_BUTTON 表示按钮单击事件def on_click(self, event):self.statictext.SetLabelText('Good Morning!')if __name__ == '__main__':app = wx.App()frame = MyFrame()frame.Show()app.MainLoop()

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/server/121727.html

相关文章

Cilium + ebpf 系列文章- XDP (eXpress data Path)(四)

前言: 现有网络容器的性能消耗与通信简单流程: 1、只要是Pod都有自己的网络命名空间。 2、Pod的网络命名空间由Pod内的容器使用并共享但是由暂停容器(Pause Container)管理。 3、Pod内的容器网络通过veth_pair对与主机网络命名空间打通。 …

短视频矩阵管理系统贴牌 源码开发

抖音账号矩阵的开发核心维度包括&#xff1a; 多账号管理开发维度&#xff1a;通过运用不同类型的账号矩阵&#xff0c;可以实现统一且便捷的管理。目前&#xff0c;矩阵系统支持管理抖音、快手、视频号,b站的账号&#xff0c;未来计划加入小红书,tk等等的账号管理。 矩阵账号…

蓝队技能-应急响应篇Web内存马查杀JVM分析Class提取诊断反编译日志定性

知识点&#xff1a; 1、应急响应-Web内存马-定性&排查 2、应急响应-Web内存马-分析&日志 注&#xff1a;传统WEB类型的内存马只要网站重启后就清除了。 演示案例-蓝队技能-JAVA Web内存马-JVM分析&日志URL&内存查杀 0、环境搭建 参考地址&#xff1a;http…

如何安装部署kafka

安装和部署Apache Kafka需要以下几个步骤&#xff0c;包括下载 Kafka、配置 ZooKeeper&#xff08;或者使用 Kafka 自带的 Kafka Raft 模式替代 ZooKeeper&#xff09;&#xff0c;以及启动 Kafka 服务。以下是一个但基于 Linux 的典型安装流程&#xff0c;可以根据需要改装到其…

高级算法设计与分析 学习笔记7 数据结构扩充

OS tree 数据统计树 本体是红黑树&#xff0c;除了自己的数字外还要记录自己这颗子树有几个节点。 这种特性可以让使用者迅速找到自己要找的第i个数。 往左走&#xff0c;给的那个数字就是排名&#xff0c;但是往右边走的话&#xff0c;那就的先加上当前的排名&#xff08;也就…

little-kernel分析

文章目录 1 简介2 源码获取3 编译4 运行流程4.1 crt0.S4.2 kmain4.2.1 堆栈保护 4.3 bootstrap2 5 little kernel OS5.1 概要5.2 线程5.2.1 数据结构5.2.2 相关操作5.2.2.1 thread_init_early5.2.2.2 thread_init5.2.2.3 thread_create5.2.2.4 thread_resume5.2.2.5 thread_exi…

Android Studio开发发布教程

本文讲解Android Studio如何发布APP。 在Android Studiobuild菜单栏下点击Generate Singed Bundle/APK…打开对话框。 选择APK点击Next 点击Create New...进行创建

智能手机表面缺陷识别检测数据集 yolo数据集 1300张

智能手机表面缺陷识别检测数据集 yolo数据集 1300张 数据集名称 智能手机表面缺陷识别检测数据集&#xff08;Smartphone Surface Defect Recognition Dataset&#xff09; 数据集概述 该数据集是针对智能手机表面常见缺陷进行自动检测而专门构建的&#xff0c;主要应用于生…