python笔记-界面开发

1、界面开发:wxPython

  • 一个开源的Python GUI开发工具包
  • 提供了一个跨平台的GUI编程接口,支持Windows、macOS、Linux等多个操作系统
  • 可以创建多种GUI应用程序,包括桌面应用程序、游戏、数据分析和可视化工具、web应用程序等
  • 基于C++编写的WxWidgets库的Python封装,它提供了许多GUI部件,如按钮、文本框、标签、复选框、单选按钮、列表框、菜单和滚动条等
  • 支持用户自定义部件,WxPython还提供了可扩展的事件处理机制和数据绑定功能,方便开发者管理和处理用户操作和数据
  • 是一个功能强大的GUI开发工具包,可以满足各种GUI应用程序的需求,同时也易于学习和使用;
    2、常用组件速查
  • 组件:窗口 类名:wx.Frame 主要用途:主应用程序窗口
  • 组件:面板 类名:wx.Panel 主要用途:容器,用于分组控件
  • 组件:按钮 类名:wx.Button 主要用途:触发操作
  • 组件:文本框 类名:wx.TextCtrl 主要用途:单行或多行文本输入
  • 组件:标签 类名:wx.StaticText 主要用途:显示静态文本
  • 组件:复选框 类名:wx.CheckBox 主要用途:多项选择
  • 组件:单选按钮 类名:wx.RadioButton 主要用途:单项选择
  • 组件:列表框 类名:wx.ListBox 主要用途:显示可选列表
  • 组件:组合框 类名:wx.ComboBox 主要用途:下拉选择列表
  • 组件:滑块 类名:wx.Slider 主要用途:数值范围选择
  • 组件:菜单 类名:wx.Menu 主要用途:应用程序菜单
  • 组件:工具栏 类名:wx.ToolBar 主要用途:工具按钮集合
  • 组件:状态栏 类名:wx.StatusBar 主要用途:状态信息显示
    3、常用操作
  • 创建应用程序对象
    app = wx.App()
  • 创建窗口,并居中显示
    '''size:宽,高 pos:左上角的x坐标、y坐标(左上角是x=0,y=0的原点)'''
    frm = wx.Frame(None,title='python学习',
    size=(400,400),
    pos=(100,100),
    style=wx.DEFAULT_FRAME_STYLE)
    '''居中显示窗口'''
    frm.Centre()
    '''None - 父窗口(None 表示没有父窗口,是顶级窗口)'''
    '''title="我的第一个窗口" - 窗口标题'''
    '''size=(400, 300) - 窗口大小:宽400像素,高300像素'''
  • 创建面板
    pl = wx.Panel(frm,size=(400,400),pos=(100,100))
  • 创建静态文本
    staticText = wx.StaticText(pl,label='欢迎学习python',pos=(100,100))
  • 创建按钮
    btn = wx.Button(pl,label='测试',pos=(10,10))
  • 给按钮绑定事件,按下btn按钮后执行onClick函数
    frm.Bind(wx.EVT_BUTTON,onClick,btn)
  • 显示窗口
    frame.Show()
  • 一个完整的窗口程序
点击查看代码
import wx

#1.创建一个自己的窗口类
class MyWindow(wx.Frame):
    def __init__(self):
        #2.调用父类的初始化方法
        wx.Frame.__init__(self,None,title='我的小程序',size=(400,400))
        self.Centre()

        #3.创建面板(panel),所有控件都放在面板上
        self.pl = wx.Panel(self)

        #4.设置面板背景颜色
        self.pl.SetBackgroundColour(wx.Colour(240,240,240))  #浅灰色

        #5.创建字体对象
        self.font = wx.Font(16,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD)

        #6.创建标签(显示文字)
        self.label = wx.StaticText(self.pl,label='欢迎使用我的程序',pos=(50,30),style=wx.TE_CENTER)
        self.label.SetFont(self.font) #给标签设置字体

        #7.创建文本框
        self.text_input = wx.TextCtrl(self.pl,pos=(50,80),size=(200,30))

        #8.创建按钮
        self.btn = wx.Button(self.pl,label='点击我',pos=(50,130),size=(100,40))
        self.btn.SetFont(self.font)

        #9.给按钮绑定事件(当按钮被点击时做什么)
        self.Bind(wx.EVT_BUTTON,self.on_button_click,self.btn)

        #10.创建 状态栏(显示在窗口底部)
        self.CreateStatusBar()
        self.SetStatusText('就绪')

        #11.按钮点击事件的处理函数
    def on_button_click(self,event):
        #获取文本框的内容
        text = self.text_input.GetValue()

        #弹出消息框
        wx.MessageBox(f"你输入了:{text}","提示",wx.OK|wx.ICON_INFORMATION)

        #在状态栏显示信息
        self.SetStatusText(f"刚才输入了:{text}")

if __name__ == '__main__':
    app = wx.App()
    window = MyWindow()
    window.Show()
    app.MainLoop()     #进入主循环
  • 简单抽奖器完整代码
点击查看代码
import random

import wx
class MyFrame(wx.Frame):
    Namelist = ['张三','李四','王五','tom','jake','miya','jack','Coco','王麻子']
    #构造方法
    def __init__(self):
        wx.Frame.__init__(self,None,title='抽奖器',pos=(100,100),size=(400,300))
        #super().__init__(None,title='抽奖器',pos=(100,100),size=(400,300))   #super().__init__() 在调用父类构造函数时,不需要显式传递 self 参数:
        '''创建面板'''
        self.pl = wx.Panel(self,pos=(100,100),size=(400,400))
        '''设置背景颜色'''
        self.pl.SetBackgroundColour((50,150,0))

        '''创建字体:字体大小,字体包,字体风格,是否加粗'''
        self.font = wx.Font(20,wx.FONTFAMILY_SWISS,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD)

        '''创建静态文本'''
        #self.staticText = wx.StaticText(self.pl,label='欢迎使用抽奖器',pos=(100,10))
        #创建显示名字的静态文本
        self.staticText = wx.StaticText(self.pl, label=random.choice(self.Namelist), pos=(0, 50),size=(400,60),style=wx.ALIGN_CENTER)
        '''为静态文本设置字体'''
        self.staticText.SetFont(self.font)
        '''为静态文本设置背景颜色'''
        #self.staticText.SetBackgroundColour((255,255,180))
        '''创建按钮'''
        self.btn1 = wx.Button(self.pl,label='开始抽奖',pos=(100,120),size=(80,40))
        self.btn2 = wx.Button(self.pl, label='结束抽奖', pos=(200, 120),size=(80,40))
        '''为按钮绑定事件(按下按钮后执行的操作)'''
        self.Bind(wx.EVT_BUTTON,self.onClick,self.btn1)
        self.Bind(wx.EVT_BUTTON,self.stop_name,self.btn2)
        '''初始化计时器变量'''
        self.timer = None
        '''居中显示'''
        self.Center()

    def onClick(self,event):
        self.timter = wx.Timer(self)   #创建一个定时器
        self.Bind(wx.EVT_TIMER,self.update_name,self.timter)   #绑定定时器
        self.timter.Start(100)  #每个500毫秒启动一次定时器

    def update_name(self,event):
        self.staticText.SetLabel(random.choice(self.Namelist))
        self.staticText.Refresh()

    def stop_name(self,event):
        self.timter.Stop()   #停止计时器

if __name__ == '__main__':   #python程序的主入口
    app = wx.App()   #创建一个应用对象
    frm = MyFrame()  #创建窗口
    frm.Show()       #显示窗口
    app.MainLoop()   #让窗口一直显示
  • 文本输入框设置
    self.entry = wx.TextCtrl(self.pl,pos=(20,10),size=(190,30),style=wx.TE_RIGHT | wx.TE_READONLY)
    • wx.TE_RIGHT:文本右对齐
    • wx.TE_READONLY:只读(用户不能直接输入)
posted @ 2026-01-21 10:59  jake瑞  阅读(24)  评论(0)    收藏  举报