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

第十二章 GUI界面编程

时间:2023-01-05 19:33:50浏览次数:44  
标签:__ self 编程 StaticText 第十二章 label wx GUI panel

一、实验目的和要求

1、学会应用常用控件;

2、学会使用BoxSizer布局;

3、学会事件处理。

二、实验环境

软件版本:Python 3.10 64_bit

三、实验过程

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

(1)使用StaticText类输出中文版的Python之禅。具体代码如下:

复制代码 复制代码
 1 #_*-coding:utf-8 _*_
 2 import wx 
 3 class MyFrame(wx.Frame):
 4     def __init__(self,parent,id):
 5         wx.Frame.__init__(self, parent, id,title="创建StaticText类",
 6                          pos=(100,100),size=(600,400))
 7         # 创建画板
 8         panel = wx.Panel(self) 
 9         # 创建标题,并设置字体
10         title =wx.StaticText(panel,label = "Python之禅-Tim Peters",pos=(100,20))
11         font =wx.Font(16,wx.DEFAULT,wx.FONTSTYLE_NORMAL,wx.NORMAL)
12         title.SetFont(font)
13         # 创建文本
14         wx.StaticText(panel,label="优美胜于丑陋",pos=(50,50))
15         wx.StaticText(panel,label="明了胜于晦涩",pos=(50,70))
16         wx.StaticText(panel,label="简洁胜于复杂",pos=(50,90))
17         wx.StaticText(panel,label="复杂胜于凌乱",pos=(50,110))
18         wx.StaticText(panel,label="扁平胜于嵌套",pos=(50,130))
19         wx.StaticText(panel,label="间隔胜于紧凑",pos=(50,150))
20         wx.StaticText(panel,label="可读性很重要",pos=(50,170))
21         wx.StaticText(panel,label="即便假借特例的实用性之名,也不可违背这些规则",pos=(50,190))
22         wx.StaticText(panel,label="不要包容所有错误,除非你确定需要这样做",pos=(50,210))
23         wx.StaticText(panel,label="当存在多种可能,不要尝试去猜测",pos=(50,230))
24         wx.StaticText(panel,label="而是尽量找一种,最好是唯一一种明显的解决方案",pos=(50,250))
25         wx.StaticText(panel,label="虽然这并不容易,因为你不是 Python 之父",pos=(50,270))
26         wx.StaticText(panel,label="做也许好过不做,但不假思索就动手还不如不做",pos=(50,290))
27         wx.StaticText(panel,label="如果你无法向人描述你的方案,那肯定不是一个好方案: 反之亦然",pos=(50,310))
28         wx.StaticText(panel,label="命名空间是一种绝妙的理念,我们应当多加利用",pos=(50,330)) 
29  
30 if __name__ == "__main__":
31     app = wx.App()                        # 初始化应用
32     frame = MyFrame(parent=None,id=-1)    # 实例MyFrame类,并传递参数
33     frame.Show()                          # 显示窗口
34     app.MainLoop()                        # 调用主循环方法
复制代码 复制代码

(2)运行结果如图所示:

 

 

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

(1)使用wx.TextCtrl类和wx.StaticText类实现一个包含用户名和密码的登录界面。具体代码如下:

复制代码 复制代码
 1 #_*-coding:utf-8 _*_
 2 import wx
 3 class MyFrame(wx.Frame):
 4     def __init__(self,parent,id):
 5         wx.Frame.__init__(self,parent,id,title="创建TextCtrl",size=(400,300))
 6         # 创建面板
 7         panel=wx.Panel(self)
 8         # 创建文本和密码输入框
 9         self.title = wx.StaticText(panel,label="输入用户名和密码",pos=(140,20))
10         self.label_user = wx.StaticText(panel,label="用户名:",pos=(50,50))
11         self.text_user = wx.TextCtrl(panel,pos=(100,50),size=(235,25),style=wx.TE_LEFT)
12         self.label_user = wx.StaticText(panel,pos=(50, 90),label="密   码:")
13         self.text_password = wx.TextCtrl(panel,pos=(100, 90),size=(235, 25),style=wx.TE_PASSWORD)
14 
15 if __name__ == "__main__":
16     app = wx.App()                          # 初始化应用
17     frame = MyFrame(parent=None,id=-1)      # 实例MyFrame类,并传递参数
18     frame.Show()                            # 显示窗口
19     app.MainLoop()                          # 调用主循环方法
复制代码 复制代码

(2)运行结果如图所示:

 

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

(1)使用wx.Button,在实例2的基础上添加“确定”和“取消”按钮具体代码如下:

复制代码 复制代码
 1 #_*-coding:utf-8 _*_
 2 import wx
 3 class MyFrame(wx.Frame):
 4     def __init__(self,parent,id):
 5         wx.Frame.__init__(self,parent,id,title="创建TextCtrl类",size=(400,300))
 6         # 创建面板
 7         panel = wx.Panel(self)
 8         # 创建文本和密码输入框
 9         self.title = wx.StaticText(panel,label="输入用户名和密码",pos=(140,20))
10         self.label_user = wx.StaticText(panel,label="用户名:",pos=(50,50))
11         self.text_user = wx.TextCtrl(panel,pos=(100,50),size=(235,25),style=wx.TE_LEFT)
12         self.label_user = wx.StaticText(panel,pos=(50, 90),label="密   码:")
13         self.text_password = wx.TextCtrl(panel,pos=(100, 90),size=(235, 25),style=wx.TE_PASSWORD)
14         # 创建“确定”和“取消”按钮
15         self.bt_confirm = wx.Button(panel,label="确定",pos=(105,130))
16         self.bt_cancel  = wx.Button(panel,label="取消",pos=(195,130))
17 
18 if __name__ == "__main__":
19     app = wx.App()                          # 初始化
20     frame = MyFrame(parent=None,id=-1)      # 实例MyFrame类,并传递参数
21     frame.Show()                            # 显示窗口
22     app.MainLoop()                          # 调用主循环方法
复制代码 复制代码

(2)运行结果如图所示:

 

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

(1)使用BoxSizer布局方式,实现实例3的界面布局效果。具体代码如下:

复制代码 复制代码
 1 # _*-coding;utf-8 _*.
 2 import wx
 3 class MyFrame(wx.Frame):
 4     def __init__(self,parent,id):
 5         wx.Frame.__init__(self,parent,id,"用户登录",size=(400,300))
 6         # 创建面板
 7         panel = wx.Panel(self)
 8         # 创建“确定”和“取消”按钮,并绑定事件
 9         self.bt_confirm = wx.Button(panel,label="确定")
10         self.bt_cancel = wx.Button(panel,label="取消")
11         # 创建文本,左对齐
12         self.title = wx.StaticText(panel,label="请输入用户名和密码")
13         self.label_user = wx.StaticText(panel,label="用户名:")
14         self.text_user = wx.TextCtrl(panel,style=wx.TE_LEFT)
15         self.label_pwd = wx.StaticText(panel,label="密   码:")
16         self.text_password = wx.TextCtrl(panel,style=wx.TE_PASSWORD)
17         # 添加容器,容器中控件横向排列
18         hsizer_user = wx.BoxSizer(wx.HORIZONTAL)
19         hsizer_user.Add(self.label_user,proportion=0,flag=wx.ALL,border=5)
20         hsizer_user.Add(self.text_user,proportion=1,flag=wx.ALL,border=5)
21         hsizer_pwd = wx.BoxSizer(wx.HORIZONTAL)
22         hsizer_pwd.Add(self.label_pwd,proportion=0,flag=wx.ALL,border=5)
23         hsizer_pwd.Add(self.text_password,proportion=1,flag=wx.ALL,border=5)
24         hsizer_button = wx.BoxSizer(wx.HORIZONTAL)
25         hsizer_button.Add(self.bt_confirm,proportion=0,flag=wx.ALIGN_CENTER,border=5)
26         hsizer_button.Add(self.bt_cancel,proportion=0,flag=wx.ALIGN_CENTER,border=5)
27         #添加容器,容器中的控件纵向排列
28         vsizer_all = wx.BoxSizer(wx.VERTICAL)
29         vsizer_all.Add(self.title,proportion=0,flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER,
30                        border=15)
31         vsizer_all.Add(hsizer_user,proportion=0,flag=wx.EXPAND | wx.LEFT | wx.RIGHT,border=45)
32         vsizer_all.Add(hsizer_pwd,proportion=0,flag=wx.EXPAND| wx.LEFT | wx.RIGHT,border=45)
33         vsizer_all.Add(hsizer_button,proportion=0,flag=wx.ALIGN_CENTER | wx.TOP,border=15)
34         panel.SetSizer(vsizer_all)
35         
36 if __name__ == "__main__":
37     app = wx.App()                      # 初始化
38     frame =MyFrame(parent=None,id=-1)   # 实例化MyFrame类,并传递参数
39     frame.Show()                        # 显示窗口
40     app.MainLoop()                      # 调用主循环方法
复制代码 复制代码

(2)运行结果如图所示: 

 

 

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

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

复制代码 复制代码
 1 # _*_coding:utf-8 _*_
 2 import wx
 3 class MyFrame(wx.Frame):
 4     def __init__ (self,parent,id):
 5         wx.Frame.__init__(self,parent,id,"用户登录",size=(400,300))
 6         # 创建面板
 7         panel = wx.Panel(self)
 8         
 9         # 创建“确定”和“取消”按钮,并绑定事件
10         self.bt_confirm = wx.Button(panel,label="确定")
11         self.bt_confirm.Bind(wx.EVT_BUTTON,self.OnclickSubmit)
12         self.bt_cancel = wx.Button(panel,label="取消")
13         self.bt_cancel.Bind(wx.EVT_BUTTON,self.OnclickCancel)
14         # 创建文本,左对齐
15         self.title = wx.StaticText(panel,label="请输入用户名和密码")
16         self.label_user = wx.StaticText(panel,label="用户名:")
17         self.text_user = wx.TextCtrl(panel,style=wx.TE_LEFT)
18         self.label_pwd = wx.StaticText(panel,label="密   码:")
19         self.text_password = wx.TextCtrl(panel,style=wx.TE_PASSWORD)
20         # 添加容器,容器中控件横向排列
21         hsizer_user = wx.BoxSizer(wx.HORIZONTAL)
22         hsizer_user.Add(self.label_user,proportion=0,flag=wx.ALL,border=5)
23         hsizer_user.Add(self.text_user,proportion=1,flag=wx.ALL,border=5)
24         hsizer_pwd = wx.BoxSizer(wx.HORIZONTAL)
25         hsizer_pwd.Add(self.label_pwd,proportion=0,flag=wx.ALL,border=5)
26         hsizer_pwd.Add(self.text_password,proportion=1,flag=wx.ALL,border=5)
27         hsizer_button = wx.BoxSizer(wx.HORIZONTAL)
28         hsizer_button.Add(self.bt_confirm,proportion=0,flag=wx.ALIGN_CENTER,border=5)
29         hsizer_button.Add(self.bt_cancel,proportion=0,flag=wx.ALIGN_CENTER,border=5)
30         #添加容器,容器中的控件纵向排列
31         vsizer_all = wx.BoxSizer(wx.VERTICAL)
32         vsizer_all.Add(self.title,proportion=0,flag=wx.BOTTOM | wx.TOP | wx.ALIGN_CENTER,
33                        border=15)
34         vsizer_all.Add(hsizer_user,proportion=0,flag=wx.EXPAND | wx.LEFT | wx.RIGHT,border=45)
35         vsizer_all.Add(hsizer_pwd,proportion=0,flag=wx.EXPAND| wx.LEFT | wx.RIGHT,border=45)
36         vsizer_all.Add(hsizer_button,proportion=0,flag=wx.ALIGN_CENTER | wx.TOP,border=15)
37         panel.SetSizer(vsizer_all)
38         
39     def OnclickSubmit(self,event):
40         """单击确定按钮,执行方法"""
41         message =""
42         username = self.text_user.GetValue()            # 获取输入的用户名
43         password = self.text_password.GetValue()        # 获取输入的密码
44         if username =="" or password =="" :             # 判断用户名或密码是否为空
45             message ="用户名或密码不能为空"
46         elif username =="mr" and password =="mrsoft":   # 用户名和密码正确
47             message ="登录成功"
48         else:
49             message ="用户名和密码不匹配"               # 用户名或密码错误
50         wx.MessageBox(message)                          # 弹出提示框
51         
52     def OnclickCancel(self,event):
53         """单击取消按钮,执行方法"""
54         self.text_user.SetValue("")                     # 清空输入的用户名
55         self.text_password.SetValue("")                 # 清空输入的密码
56         
57 if __name__ == "__main__":
58     app = wx.App()                                      # 初始化应用
59     frame = MyFrame(parent=None,id=-1)                  # 实例MyFrame类,并传递参数
60     frame.Show()                                        # 显示窗口
61     app.MainLoop()                                      # 调用主循环方法 
复制代码 复制代码

(2)运行结果如图所示:

 

 

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

相关文章

  • 网络编程例题
    网络编程例题内容:提供两个单元测试类,分别为客户端与服务端,要求客户端写出内容于服务端接收并显示输出到控制台上创建客户端(封装Socket)创建Socket对象,指明IP地址与端......
  • PySimpleGUI 相关
    importPySimpleGUIassgsg.theme('BrightColors')#设置主题layout=[#定义布局,确定行数[sg.Text('姓名'),sg.InputText('名字')],[sg.Radio('Radi......
  • 用Python实现Socket编程
    SocketServer端和SocketClient端传输解析服务端和客户端的关系如下所示:1.SocketServer绑定IP地址和端口,并开始监听端口Server=socket.socket()Server.bind(("127.......
  • 网络编程和并发编程
    `fromthreadingimportThreadimporttimen=100deftask():globalntmp=ntime.sleep(1)#进入IO,GIL锁会释放,则n为99,当没有IO则n为0n=tmp-1t_list=[]f......
  • UGUI之Mask切割图像shader应用
    在我之前的一篇文章写到使用Mask切割图像的方法。具体链接​​http://www.manew.com/thread-93954-1-1.html​​正如一些朋友所说上面这种方法把图放大之后确实存在有边缘出......
  • [unity3D插件]Unity界面插件NGUI核…
    本文转载于互联网,是一个比较经典帖子,特来分享:UICamera-可以添加到任何相机,包含事件系统.UICamera是每个UI的重要组成部分.它负责发送Camera中所有NGUI的活动.如果场景中......
  • UGUI动态生成列表功能实现(增删保存)
    在UGUI里不免会有一些列表需要生成和显示。例如最简单的增、删、改、查等都需要列表的变化。本文只讲增、删、保存、清空UGUI配合的变化方法。下面以实现场景里角色的实时......
  • UGUI血条渐渐减掉实现
    好久没写文章了。那天有人问我游戏人物血条如何慢慢减掉。今天写一下吧。首先上个动态图,看效果:更多内容请关注微信公众号:unity风雨路  在之前的文章中讲过如何实现技能冷......
  • UGUI之Scroll view
    Scrollview是一个方便制作滑动的组件。游戏里背包等经常用到的。效果如下:之前说过自己来制作滑动器的方法下面讲的是一个更为简单的方法:使用ScrollView组件。方法如下:1.首......
  • Unity3D中Resources动态加载NGUI图片
    在NGUI中有些图片我需要动态进行变更或者加载,怎么办?首先在项目中创建一个Resources目录,接着把需要的图片放在这里面,可以有子文件夹么?当然可以,文件结构很重要哦~NGUI加载图片......