首页 > 编程语言 >第十二章 GUI界面编程

第十二章 GUI界面编程

时间:2022-12-28 18:13:17浏览次数:28  
标签:__ self 编程 StaticText 第十二章 label wx GUI panel

实例01:使用wx.StaticText输出Python之禅

   使用StaticText类输出中文版的Python之禅。

 

代码如下:

#_*-coding:utf-8 _*_
import wx
class MyFrame(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self, parent, id,title="创建StaticText类",
                         pos=(100,100),size=(600,400))
        # 创建画板
        panel = wx.Panel(self)
        # 创建标题,并设置字体
        title =wx.StaticText(panel,label = "Python之禅-Tim Peters",pos=(100,20))
        font =wx.Font(16,wx.DEFAULT,wx.FONTSTYLE_NORMAL,wx.NORMAL)
        title.SetFont(font)
        # 创建文本
        wx.StaticText(panel,label="优美胜于丑陋",pos=(50,50))
        wx.StaticText(panel,label="明了胜于晦涩",pos=(50,70))
        wx.StaticText(panel,label="简洁胜于复杂",pos=(50,90))
        wx.StaticText(panel,label="复杂胜于凌乱",pos=(50,110))
        wx.StaticText(panel,label="扁平胜于嵌套",pos=(50,130))
        wx.StaticText(panel,label="间隔胜于紧凑",pos=(50,150))
        wx.StaticText(panel,label="可读性很重要",pos=(50,170))
        wx.StaticText(panel,label="即便假借特例的实用性之名,也不可违背这些规则",pos=(50,190))
        wx.StaticText(panel,label="不要包容所有错误,除非你确定需要这样做",pos=(50,210))
        wx.StaticText(panel,label="当存在多种可能,不要尝试去猜测",pos=(50,230))
        wx.StaticText(panel,label="而是尽量找一种,最好是唯一一种明显的解决方案",pos=(50,250))
        wx.StaticText(panel,label="虽然这并不容易,因为你不是 Python 之父",pos=(50,270))
        wx.StaticText(panel,label="做也许好过不做,但不假思索就动手还不如不做",pos=(50,290))
        wx.StaticText(panel,label="如果你无法向人描述你的方案,那肯定不是一个好方案: 反之亦然",pos=(50,310))
        wx.StaticText(panel,label="命名空间是一种绝妙的理念,我们应当多加利用",pos=(50,330))

if __name__ == "__main__":
    app = wx.App()                        # 初始化应用
    frame = MyFrame(parent=None,id=-1)    # 实例MyFrame类,并传递参数
    frame.Show()                          # 显示窗口
    app.MainLoop()                        # 调用主循环方法

 

 

运行结果如下:

 

 

 

 

 

实例02:使用wx.TextCtrl实现登录界面

   使用wx.TextCtrl类和wx.StaticText类实现一个包含用户名和密码的登录界面。

 

代码如下:

#_*-coding:utf-8 _*_
import wx
class MyFrame(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id,title="创建TextCtrl",size=(400,300))
        # 创建面板
        panel=wx.Panel(self)
        # 创建文本和密码输入框
        self.title = wx.StaticText(panel,label="输入用户名和密码",pos=(140,20))
        self.label_user = wx.StaticText(panel,label="用户名:",pos=(50,50))
        self.text_user = wx.TextCtrl(panel,pos=(100,50),size=(235,25),style=wx.TE_LEFT)
        self.label_user = wx.StaticText(panel,pos=(50, 90),label="密   码:")
        self.text_password = wx.TextCtrl(panel,pos=(100, 90),size=(235, 25),style=wx.TE_PASSWORD)

if __name__ == "__main__":
    app = wx.App()                          # 初始化应用
    frame = MyFrame(parent=None,id=-1)      # 实例MyFrame类,并传递参数
    frame.Show()                            # 显示窗口
    app.MainLoop()                          # 调用主循环方法

 

 

运行结果如下:

 

 

 

 

实例03:为登录界面添加“确定”和“取消”按钮

  使用wx.Button,在实例2的基础上添加“确定”和“取消”按钮

 

代码如下:

#_*-coding:utf-8 _*_
import wx
class MyFrame(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id,title="创建TextCtrl类",size=(400,300))
        # 创建面板
        panel = wx.Panel(self)
        # 创建文本和密码输入框
        self.title = wx.StaticText(panel,label="输入用户名和密码",pos=(140,20))
        self.label_user = wx.StaticText(panel,label="用户名:",pos=(50,50))
        self.text_user = wx.TextCtrl(panel,pos=(100,50),size=(235,25),style=wx.TE_LEFT)
        self.label_user = wx.StaticText(panel,pos=(50, 90),label="密   码:")
        self.text_password = wx.TextCtrl(panel,pos=(100, 90),size=(235, 25),style=wx.TE_PASSWORD)
        # 创建“确定”和“取消”按钮
        self.bt_confirm = wx.Button(panel,label="确定",pos=(105,130))
        self.bt_cancel  = wx.Button(panel,label="取消",pos=(195,130))

if __name__ == "__main__":
    app = wx.App()                          # 初始化
    frame = MyFrame(parent=None,id=-1)      # 实例MyFrame类,并传递参数
    frame.Show()                            # 显示窗口
    app.MainLoop()                          # 调用主循环方法

 

 

 运行结果如下:

 

 

 

 

 

 

 

实例04:使用BoxSizer设置登录界面布局

  使用BoxSizer布局方式,实现实例3的界面布局效果。

 

代码如下:

# _*-coding;utf-8 _*.
import wx
class MyFrame(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id,"用户登录",size=(400,300))
        # 创建面板
        panel = wx.Panel(self)
        # 创建“确定”和“取消”按钮,并绑定事件
        self.bt_confirm = wx.Button(panel,label="确定")
        self.bt_cancel = wx.Button(panel,label="取消")
        # 创建文本,左对齐
        self.title = wx.StaticText(panel,label="请输入用户名和密码")
        self.label_user = wx.StaticText(panel,label="用户名:")
        self.text_user = wx.TextCtrl(panel,style=wx.TE_LEFT)
        self.label_pwd = wx.StaticText(panel,label="密   码:")
        self.text_password = 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_password,proportion=1,flag=wx.ALL,border=5)
        hsizer_button = wx.BoxSizer(wx.HORIZONTAL)
        hsizer_button.Add(self.bt_confirm,proportion=0,flag=wx.ALIGN_CENTER,border=5)
        hsizer_button.Add(self.bt_cancel,proportion=0,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_button,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)   # 实例化MyFrame类,并传递参数
    frame.Show()                        # 显示窗口
    app.MainLoop()                      # 调用主循环方法

 

 

运行结果如下:

 

 

 

 

 

实例05:使用事件判断用户登录

   在实例 04 的基础上,分别为“确定”和“取消”按钮添加单击事件。当用户输入用户名和密码后,单击“确定”按钮,如果输入的用户名为“mr”,并且密码为“mrsoft”,则弹出对话框提示“登录成功”否则提示“用户名和密码不匹配”。当用户单击“取消”按钮时,清空用户输入的用户名和密码。

 
代码如下:

# _*_coding:utf-8 _*_
import wx
class MyFrame(wx.Frame):
    def __init__ (self,parent,id):
        wx.Frame.__init__(self,parent,id,"用户登录",size=(400,300))
        # 创建面板
        panel = wx.Panel(self)

        # 创建“确定”和“取消”按钮,并绑定事件
        self.bt_confirm = wx.Button(panel,label="确定")
        self.bt_confirm.Bind(wx.EVT_BUTTON,self.OnclickSubmit)
        self.bt_cancel = wx.Button(panel,label="取消")
        self.bt_cancel.Bind(wx.EVT_BUTTON,self.OnclickCancel)
        # 创建文本,左对齐
        self.title = wx.StaticText(panel,label="请输入用户名和密码")
        self.label_user = wx.StaticText(panel,label="用户名:")
        self.text_user = wx.TextCtrl(panel,style=wx.TE_LEFT)
        self.label_pwd = wx.StaticText(panel,label="密   码:")
        self.text_password = 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_password,proportion=1,flag=wx.ALL,border=5)
        hsizer_button = wx.BoxSizer(wx.HORIZONTAL)
        hsizer_button.Add(self.bt_confirm,proportion=0,flag=wx.ALIGN_CENTER,border=5)
        hsizer_button.Add(self.bt_cancel,proportion=0,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_button,proportion=0,flag=wx.ALIGN_CENTER | wx.TOP,border=15)
        panel.SetSizer(vsizer_all)

    def OnclickSubmit(self,event):
        """单击确定按钮,执行方法"""
        message =""
        username = self.text_user.GetValue()            # 获取输入的用户名
        password = self.text_password.GetValue()        # 获取输入的密码
        if username =="" or password =="" :             # 判断用户名或密码是否为空
            message ="用户名或密码不能为空"
        elif username =="mr" and password =="mrsoft":   # 用户名和密码正确
            message ="登录成功"
        else:
            message ="用户名和密码不匹配"               # 用户名或密码错误
        wx.MessageBox(message)                          # 弹出提示框

    def OnclickCancel(self,event):
        """单击取消按钮,执行方法"""
        self.text_user.SetValue("")                     # 清空输入的用户名
        self.text_password.SetValue("")                 # 清空输入的密码

if __name__ == "__main__":
    app = wx.App()                                      # 初始化应用
    frame = MyFrame(parent=None,id=-1)                  # 实例MyFrame类,并传递参数
    frame.Show()                                        # 显示窗口
    app.MainLoop()                                      # 调用主循环方法

 

 

 运行结果如下:

 

 

 

 

 

标签:__,self,编程,StaticText,第十二章,label,wx,GUI,panel
From: https://www.cnblogs.com/diana77/p/17010924.html

相关文章

  • 【详细】MySQL数据库与JDBC编程
    内容较多,建议收藏后慢慢看!●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★●★MySQL数据库与JDBC编程 JDBC(JavaData......
  • 异地工程师如何借助PC端实现西门子PLC远程编程配置
    PLC的维护工作说简单很简单,说困难也很困难,区别在于进行PLC维护时需要付出的时间精力。传统的PLC维护需要派遣工程师出差到现场进行维护,需要安排好工作时间,自己还要掏腰包,加......
  • 编程入门
    概述计算机包括硬件(hardware)和软件(software)两部分。硬件包括计算机中可以看得见的物理部分。而软件提供看不见的指令。这些指令控制硬件并且使得硬件完成特定的任务......
  • 极客编程python入门-多重继承
    多重继承通过多重继承,一个子类就可以同时获得多个父类的所有功能。Python自带的很多库也使用了MixIn。举个例子,Python自带了​​TCPServer​​和​​UDPServer​​这两类网......
  • Python之多任务编程线程
    一、线程概述1.线程的介绍在Python中,想要实现多任务除了使用进程,还可以使用线程来完成,线程是实现多任务的另外一种方式。2.线程的概念线程是进程中执行代码的一个分支,每个......
  • Python之多任务编程进程和线程的对比
    1.进程和线程的对比的三个方向关系对比区别对比优缺点对比2.关系对比线程是依附在进程里面的,没有进程就没有线程。一个进程默认提供一条线程,进程可以创建多个线程。3.区......
  • Generator(生成器),入门初基,Coroutine(原生协程),登峰造极,Python3.10并发异步编程as
    普遍意义上讲,生成器是一种特殊的迭代器,它可以在执行过程中暂停并在恢复执行时保留它的状态。而协程,则可以让一个函数在执行过程中暂停并在恢复执行时保留它的状态,在Python3......
  • 实验6 文件应用编程
    1.实验任务1/*//将图书信息写入文本文件data1.txt#include<stdio.h>#defineN7#defineM80typedefstruct{charname[M];//书名charauthor[......
  • 【编程实践】手把手带你利用Python简单实现斐波那契数列
    前言什么是斐波那契数列?斐波那契数列的提出者,是意大利数学家列昂纳多·斐波那契(LeonardoFibonacci),生于公元1170年,卒于1250年,籍贯是比萨。他被人称作“比萨的列昂纳多”。当......
  • 编程语言那么多,为什么说C++无可替代?
    C++,一门名声在外的编程语言。作为一门多范式的通用编程语言,它适用的领域非常广泛,小到嵌入式,大到分布式服务器,到处可以见到C++的身影。  它的发展前景也非常广阔,作为未来......