python图形化

解释:

用Python开发图形界面有两种方式

  • 一种是用Django或Flash等框架开发网页
  • 另一种是开发桌面应用程序,比如下面这个国际象棋游戏
  • image-20220305105708276

下面是主要介绍python的图形化界面库GUI

6个常见的python图形库

1.PyQt5

2.Tkinter

3.wxPython/Wax

4.Kivy

5.Libavg

6.PySimpleGUI

我们下面要使用到的就是python的wx库、主要由于使用更加的容易、其他常用的PyQt5更加复杂 不易使用、新手不是很友好。

Wxpython 介绍

学习地址:

1
2
https://jusene.github.io/2017/12/26/wxpython/
https://iowiki.com/wxpython/wxpython_quick_guide.html

安装

1
pip3 install wxPython

实例

1
2
3
4
5
import wx
app = wx.App()
frame = wx.Frame(None,title='like4h_窗口')
frame.Show(True)
app.MainLoop()

Tips

记一次报错

就是刚刚在执行上面的代码的时候、如果出现在MAC OS下代码无法执行、出现下面的报错的话

image-20220305112001411

没有安装tkinter模块

1
pip3 install tkinter

安装完然后又会出现报错

image-20220305112135030

需要安装

1
brew install python-tk

然后再次执行即可

image-20220305112315083

图形化通用模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#python图形化学习
#静态布局

import wx # 加载模块

# 继承窗体类
class MyFrame(wx.Frame):
def __init__(self):
# 初始化父类
super().__init__(parent=None,title="第一个窗体程序!",size=(500,200))
self.Center() # 设置窗口居中
# 这里可以添加自己的设计代码
# ·······
# 这里可以添加自己的设计代码

# wx.App 对象代表当前应用程序
class App(wx.App):
def OnInit(self):
myFrame=MyFrame() # 创建窗体实例
myFrame.Show() # 显示窗口
return True

def OnExit(self):
print('应用程序退出') #在终端打印
return True


if __name__ =="__main__":
app=App() # 创建应用程序对象
app.MainLoop() # 进入主事件循环

使用BoxSize布局

布局学习看这个

1
https://blog.csdn.net/qq_45021180/article/details/105693707?spm=1001.2014.3001.5502
1
2
sizer1 = wx.BoxSizer()   #使用水平布局
sizer2 = wx.BoxSizer(wx.VERTICAL) #使用垂直布局

添加组件

1
2
3
4
5
sizer.Add(control,proportion,flag,border)

sizer.Add(参数1,参数2,参数3,参数4)第一个参数 我们要放入布局的东西(按钮、文本框)

sizer1.Add(text,0,wx.ALL,50)

第一个参数 我们想要放入的控件(文本、按钮)

第二个参数 我们所放入的控件、占整个布局的比例

第三个参数 我们放入的控件、在四个方向的留白

1
flag参数可设置的参数
  • 对齐标志

    wx.ALIGN_TOP
    wx.ALIGN_BOTTOM
    wx.ALIGN_LEFT
    wx.ALIGN_RIGHT
    wx.ALIGN_CENTER_VERTICAL
    wx.ALIGN_CENTER_HORIZONTAL

  • 边界标志

    wx.TOP
    wx.BOTTOM
    wx.LEFT
    wx.RIGHT
    wx.ALL

  • 行为标志

    wx.EXPAND 项目将扩大,以填补提供给它的空间
    wx.SHAPED 与EXPAND相似,但保持了项目的高宽比
    wx.FIXED_MINSIZE 不允许该项目变得比其最初的最小尺寸更小
    wx.RESERVER_SPACE_EVEN_IF_HIDDEN 不允许sizer回收项目空间,当它被隐藏时

第三个参数 我们放入控件在规定方向的留白大小

将布局添加到界面

1
self.SetSizer(sizer)

各种控件

文本信息

1
2
3
4
5
6
7
wx.StaticText(parent,id,label,position,size,style)
parent(wx.Window) #父窗口、不应该None、也就是,在什么地方显示
id(wx.WindowID) #控件标识符、值-1表示默认
label(字符串) #文本标签也就是显示的内容
pos(wx.Point) #窗口位置
size(wx.Size) #窗口大小
style(long1) #窗口样式
style样式
1
2
3
4
5
6
7
wx.ALIGN_LEFT             #左对齐
wx.ALIGN_RIGHT #右对齐
wx.ALIGN_CENTER #居中
wx.ST_NO_AUTORESIZE #防止标签的自动调整大小
wx.ST_ELLIPSIZE_START #如果文本大小大于标签尺寸,省略号显示在开头
wx.ST_ELLIPSIZE_MIDDLE #如果文本大小大于标签尺寸,省略号显示在中间
wx.ST_ELLIPSIZE_END #如果文本大小大于标签尺寸,省略号显示在结尾
字体样式

为了设置标签的字体,首先创建一个字体对象

1
2
3
4
5
6
wx.Font(pointsize,fontfamily,fontstyle,fontweight)

pointsize #字体的大小
fontfamily #选择哪一种字体
fontstyle #字体是不是倾斜
fontweight #字体是不是加粗
fontfamiy:
1
2
3
4
5
6
wx.SWISS_FONT     #选择sans-series字体
wx.DefaultCoord #默认字体
wx.FONTFAMILY_DECORATIVE #选择装饰字体
wx.FONTFAMILY_ROMAN #选择正式的衬线字体
wx.FONTFAMILY_SCRIPT #选择手写体
wx.FONTFAMILY_MODERN #选择固定间距字体
fontstyle:
1
2
3
wx.NORMAL       #字体绘制不使用倾斜
wx.ITALIC #字体是斜体
wx.SLANT #字体是倾斜的,但以罗马风格形式
fontweight:
1
2
3
wx.NORMAL  #普通字体
wx.LIGHT #高亮字体
wx.BOLD #粗体
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import wx # 加载模块

# 继承窗体类
class MyFrame(wx.Frame):
def __init__(self):
# 初始化父类
super().__init__(parent=None,title="第一个窗体程序!",size=(500,200))
self.Center() # 设置窗口居中
# 这里可以添加自己的设计代码
sizer1 = wx.BoxSizer() #使用水平布局
sizer2 = wx.BoxSizer(wx.VERTICAL) #使用垂直布局
#文本布局
# #wx.StaticText(parent,id,label,position,size,style)
# parent(wx.Window) #父窗口、不应该None、也就是,在什么地方显示
# id(wx.WindowID) #控件标识符、值-1表示默认
# label(字符串) #文本标签也就是显示的内容
# pos(wx.Point) #窗口位置
# size(wx.Size) #窗口大小
# style(long1) #窗口样式
text = wx.StaticText(self,-1,u'这是一个文本信息',size=(200,100),style=wx.ALIGN_CENTER) #代码解析(在self的父窗口中有一段文字,占窗口的200,100的位置,窗口的样式是居中显示)
font = wx.Font(15,wx.FONTFAMILY_MODERN,wx.NORMAL,wx.NORMAL)
text.SetFont(font) #应用字体

sizer1.Add(text,0,wx.ALL,50) #代码解析,添加控件(text的文本控件、整个控件的比例0代表由控件决定、)
self.SetSizer(sizer1)

# 这里可以添加自己的设计代码

# wx.App 对象代表当前应用程序
class App(wx.App):
def OnInit(self):
myFrame=MyFrame() # 创建窗体实例
myFrame.Show() # 显示窗口
return True

def OnExit(self):
print('应用程序退出')
return True


if __name__ =="__main__":
app=App() # 创建应用程序对象
app.MainLoop() # 进入主事件循环

文本框:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
kuang = wx.TextCtrl(parent_process,id,Value="",pos=wx.DefaultPosition,size=wx.DefaultSize,style=0,validator=wx.DefaultValidator,name=wx.TextCtrlNameStr)


parent #指定父窗口
id #标识符、使用-1可以自动创建一个唯一标识符
Value #显示的内容
pos #一个wx.point或一个python元组、是窗口部件的位置
size #一个wx.size或一个python元组、窗口部件的大小
style #样式标记
validator #赋予文本框的内容校验器
name #对象的名字、用于查找的需要


样式(style)参数接受一个或多个常量,如下列表

参数 描述

1.wx.TE_MULTILINE 文本控件允许多行。如果未指定该样式(style),换行字符不应该在控件值中使用。

2.wx.TE_PASSWORD 文本将回显为星号

3.wx.TE_READONLY 文本将不可编辑

4.wxTE_LEFT 在控件中的文本将左对齐(默认)

5.wxTE_CENTRE 在控件中的文本将居中对齐

6.wxTE_RIGHT 在控件中的文本将居右对齐



事件绑定器负责处理事件相关的TextCtrl框中输入文字

事件 描述

1.EVT_TEXT 响应变化的文本框的内容,或者通过手动键入,或以编程方式

2.EVT_TEXT_ENTER 调用相关的处理程序当Enter键在文本框中按下

3.EVT_TEXT_MAXLEN 只要文本长度进入触发相关处理程序达到SetMaxLength()函数的值
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import wx # 加载模块

# 继承窗体类
class MyFrame(wx.Frame):
def __init__(self):
# 初始化父类
super().__init__(parent=None,title="第一个窗体程序!",size=(500,200))
self.Center() # 设置窗口居中
# 这里可以添加自己的设计代码
sizer1 = wx.BoxSizer() #使用水平布局
sizer2 = wx.BoxSizer(wx.VERTICAL) #使用垂直布局
#文本布局
# #wx.StaticText(parent,id,label,position,size,style)
# parent(wx.Window) #父窗口、不应该None、也就是,在什么地方显示
# id(wx.WindowID) #控件标识符、值-1表示默认
# label(字符串) #文本标签也就是显示的内容
# pos(wx.Point) #窗口位置
# size(wx.Size) #窗口大小
# style(long1) #窗口样式
text = wx.StaticText(self,-1,u'这是一个文本信息',size=(200,100),style=wx.ALIGN_CENTER) #代码解析(在self的父窗口中有一段文字,占窗口的200,100的位置,窗口的样式是居中显示)
font = wx.Font(15,wx.FONTFAMILY_MODERN,wx.NORMAL,wx.NORMAL)
text.SetFont(font) #应用字体

sizer1.Add(text,0,wx.ALL,50) #代码解析,添加控件(text的文本控件、整个控件的比例0代表由控件决定、)
self.SetSizer(sizer1)

#文本框
imput_kuang = wx.TextCtrl(self,-1,value="请输入文本内容",size=(200,100),style=wx.TE_MULTILINE)
sizer1.Add(imput_kuang,0,wx.ALL,50)
self.SetSizer(sizer1)


# 这里可以添加自己的设计代码

# wx.App 对象代表当前应用程序
class App(wx.App):
def OnInit(self):
myFrame=MyFrame() # 创建窗体实例
myFrame.Show() # 显示窗口
return True

def OnExit(self):
print('应用程序退出')
return True


if __name__ =="__main__":
app=App() # 创建应用程序对象
app.MainLoop() # 进入主事件循环

按钮:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
button = wx.Button(parent,id,label="",pos,size=(),style=0,name="")

label为按钮显示的内容


wx.Button类的一些重要方法

方法 说明

1.SetLabel() 编程设置按钮的标题

2.GetLabel() 返回按钮的标题

3.SetDefault() 按钮设置为默认顶层窗口。模拟click事件按下回车键

举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import wx # 加载模块

# 继承窗体类
class MyFrame(wx.Frame):
def __init__(self):
# 初始化父类
super().__init__(parent=None,title="第一个窗体程序!",size=(1000,600))
self.Center() # 设置窗口居中
# 这里可以添加自己的设计代码
sizer1 = wx.BoxSizer() #使用水平布局
sizer2 = wx.BoxSizer(wx.VERTICAL) #使用垂直布局
sizer3 = wx.BoxSizer()
#文本布局
# #wx.StaticText(parent,id,label,position,size,style)
# parent(wx.Window) #父窗口、不应该None、也就是,在什么地方显示
# id(wx.WindowID) #控件标识符、值-1表示默认
# label(字符串) #文本标签也就是显示的内容
# pos(wx.Point) #窗口位置
# size(wx.Size) #窗口大小
# style(long1) #窗口样式
text = wx.StaticText(self,-1,u'这是一个文本信息',size=(200,100),style=wx.ALIGN_CENTER) #代码解析(在self的父窗口中有一段文字,占窗口的200,100的位置,窗口的样式是居中显示)
font = wx.Font(15,wx.FONTFAMILY_MODERN,wx.NORMAL,wx.NORMAL)
text.SetFont(font) #应用字体

sizer1.Add(text,0,wx.ALL,50) #代码解析,添加控件(text的文本控件、整个控件的比例0代表由控件决定、)
#self.SetSizer(sizer1)

#输入文本框
imput_kuang = wx.TextCtrl(self,-1,value="请输入文本内容",size=(200,100),style=wx.TE_MULTILINE)
sizer1.Add(imput_kuang,0,wx.ALL,50)
#self.SetSizer(sizer1)
#显示文本框
show_kuang = wx.TextCtrl(self,-1,value="显示的内容",size=(300,200),style=wx.TE_MULTILINE)
sizer1.Add(show_kuang,0,wx.ALL,50)

#按钮
button = wx.Button(self,-1,label="点我",size=(100,50))
sizer2.Add(button,0)

#添加器
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(sizer1)
sizer.Add(sizer2)
sizer.Add(sizer3)
self.SetSizer(sizer)


# 这里可以添加自己的设计代码

# wx.App 对象代表当前应用程序
class App(wx.App):
def OnInit(self):
myFrame=MyFrame() # 创建窗体实例
myFrame.Show() # 显示窗口
return True

def OnExit(self):
print('应用程序退出')
return True


if __name__ =="__main__":
app=App() # 创建应用程序对象
app.MainLoop() # 进入主事件循环

下拉框:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
xaila_kuang = wx.ComboBox(parent,id,value="",pos,size=(),choices=[],style=wx.CB_READONL,name="")

choices=[]
列表里面的内容是我们下拉列表中的内容


style可选参数
参数 说明
1.wx.CB_SIMPLE 组合框与永久显示的列表

2.wx.CB_DROPDOWN 组合框与下拉列表

3.wx.CB_READONLY 选择的项目是不可编辑

4.wx.CB_SORT 列表显示按字母顺序


wx.ComboBox类的常用方法
方法 说明

1.GetCurrentSelection () 返回被选中的项目

2.SetSelection() 将给定索引处的项设置为选中状态

3.GetString() 返回给定索引处的项目关联的字符串

4.SetString() 给定索引处更改项目的文本

5.SetValue() 设置一个字符串作为组合框文本显示在编辑字段中

6.GetValue() 返回组合框的文本字段的内容

7.FindString() 搜索列表中的给定的字符串

8.GetStringSelection() 获取当前所选项目的文本



事件绑定器生成此类的事件如下:

事件 说明

1.wx. COMBOBOX 当列表项目被选择

2.wx. EVT_TEXT 当组合框的文本发生变化

3.wx. EVT_COMBOBOX_DROPDOWN 当下拉列表

4.wx. EVT_COMBOBOX_CLOSEUP 当列表折叠起来
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import wx # 加载模块

# 继承窗体类
class MyFrame(wx.Frame):
def __init__(self):
# 初始化父类
super().__init__(parent=None,title="第一个窗体程序!",size=(1000,600))
self.Center() # 设置窗口居中
# 这里可以添加自己的设计代码
sizer1 = wx.BoxSizer() #使用水平布局
sizer2 = wx.BoxSizer(wx.VERTICAL) #使用垂直布局
sizer3 = wx.BoxSizer()
#文本布局
# #wx.StaticText(parent,id,label,position,size,style)
# parent(wx.Window) #父窗口、不应该None、也就是,在什么地方显示
# id(wx.WindowID) #控件标识符、值-1表示默认
# label(字符串) #文本标签也就是显示的内容
# pos(wx.Point) #窗口位置
# size(wx.Size) #窗口大小
# style(long1) #窗口样式
text = wx.StaticText(self,-1,u'这是一个文本信息',size=(200,100),style=wx.ALIGN_CENTER) #代码解析(在self的父窗口中有一段文字,占窗口的200,100的位置,窗口的样式是居中显示)
font = wx.Font(15,wx.FONTFAMILY_MODERN,wx.NORMAL,wx.NORMAL)
text.SetFont(font) #应用字体

sizer1.Add(text,0,wx.ALL,50) #代码解析,添加控件(text的文本控件、整个控件的比例0代表由控件决定、)
#self.SetSizer(sizer1)

#输入文本框
imput_kuang = wx.TextCtrl(self,-1,value="请输入文本内容",size=(200,100),style=wx.TE_MULTILINE)
sizer1.Add(imput_kuang,0,wx.ALL,50)
#self.SetSizer(sizer1)
#显示文本框
show_kuang = wx.TextCtrl(self,-1,value="显示的内容",size=(300,200),style=wx.TE_MULTILINE)
sizer1.Add(show_kuang,0,wx.ALL,50)

#按钮
button = wx.Button(self,-1,label="点我",size=(100,50))
sizer2.Add(button,0)

#下拉框
xaila_kuang = wx.ComboBox(self,-1,value="下拉框",size=(200,50),choices=['1','2','3'],style=wx.CB_READONLY)
sizer2.Add(xaila_kuang,0,wx.Top|wx.LEFT,10)

#添加器
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(sizer1)
sizer.Add(sizer2)
sizer.Add(sizer3)
self.SetSizer(sizer)


# 这里可以添加自己的设计代码

# wx.App 对象代表当前应用程序
class App(wx.App):
def OnInit(self):
myFrame=MyFrame() # 创建窗体实例
myFrame.Show() # 显示窗口
return True

def OnExit(self):
print('应用程序退出')
return True


if __name__ =="__main__":
app=App() # 创建应用程序对象
app.MainLoop() # 进入主事件循环

单选框:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
danxuan_kuang = wx.RadioBox(parent,id,label="",pos,size=(),choices=['1','2','3'],)


wx.RadioBox类的重要方法

方法 描述

1.GetSelection() 返回所选项目的索引

2.SetSelection() 选择编程项目

3.GetString() 返回选定项的标签

4.SetString() 分配标签到所选择的项目

5.Show() 显示或隐藏指定索引的项目
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import wx # 加载模块

# 继承窗体类
class MyFrame(wx.Frame):
def __init__(self):
# 初始化父类
super().__init__(parent=None,title="第一个窗体程序!",size=(1000,600))
self.Center() # 设置窗口居中
# 这里可以添加自己的设计代码
sizer1 = wx.BoxSizer() #使用水平布局
sizer2 = wx.BoxSizer(wx.VERTICAL) #使用垂直布局
sizer3 = wx.BoxSizer()
#文本布局
# #wx.StaticText(parent,id,label,position,size,style)
# parent(wx.Window) #父窗口、不应该None、也就是,在什么地方显示
# id(wx.WindowID) #控件标识符、值-1表示默认
# label(字符串) #文本标签也就是显示的内容
# pos(wx.Point) #窗口位置
# size(wx.Size) #窗口大小
# style(long1) #窗口样式
text = wx.StaticText(self,-1,u'这是一个文本信息',size=(200,100),style=wx.ALIGN_CENTER) #代码解析(在self的父窗口中有一段文字,占窗口的200,100的位置,窗口的样式是居中显示)
font = wx.Font(15,wx.FONTFAMILY_MODERN,wx.NORMAL,wx.NORMAL)
text.SetFont(font) #应用字体

sizer1.Add(text,0,wx.ALL,50) #代码解析,添加控件(text的文本控件、整个控件的比例0代表由控件决定、)
#self.SetSizer(sizer1)

#输入文本框
imput_kuang = wx.TextCtrl(self,-1,value="请输入文本内容",size=(200,100),style=wx.TE_MULTILINE)
sizer1.Add(imput_kuang,0,wx.ALL,50)
#self.SetSizer(sizer1)
#显示文本框
show_kuang = wx.TextCtrl(self,-1,value="显示的内容",size=(300,200),style=wx.TE_MULTILINE)
sizer1.Add(show_kuang,0,wx.ALL,50)

#按钮
button = wx.Button(self,-1,label="点我",size=(100,50))
sizer2.Add(button,0)

#下拉框
xaila_kuang = wx.ComboBox(self,-1,value="下拉框",size=(200,50),choices=['1','2','3'],style=wx.CB_READONLY)
sizer2.Add(xaila_kuang,0,wx.Top|wx.LEFT,10)

#单选框
danxuan_kuang = wx.RadioBox(self,-1,label="单选框",size=(50,100),choices=['1','2','3'])
sizer2.Add(danxuan_kuang,0,wx.ALL,50)

#添加器
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(sizer1)
sizer.Add(sizer2)
sizer.Add(sizer3)
self.SetSizer(sizer)


# 这里可以添加自己的设计代码

# wx.App 对象代表当前应用程序
class App(wx.App):
def OnInit(self):
myFrame=MyFrame() # 创建窗体实例
myFrame.Show() # 显示窗口
return True

def OnExit(self):
print('应用程序退出')
return True


if __name__ =="__main__":
app=App() # 创建应用程序对象
app.MainLoop() # 进入主事件循环

复选框:

1
2
3
4
5
6
7
8
9
10
11
12
Wx.CheckBox(parent, id, label, pos, size, style)

wx.CheckBox类的构造函数的参数如下 -
以下样式参数值可以使用 -

参数 说明

1.wx.CHK_2STATE 创建两个状态复选框。这是默认值

2.wx.CHK_3STATE 创建三态复选框

3.wx.ALIGN_RIGHT 把一个盒子标签放在复选框的左侧
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import wx # 加载模块

# 继承窗体类
class MyFrame(wx.Frame):
def __init__(self):
# 初始化父类
super().__init__(parent=None,title="第一个窗体程序!",size=(1000,600))
self.Center() # 设置窗口居中
# 这里可以添加自己的设计代码
sizer1 = wx.BoxSizer() #使用水平布局
sizer2 = wx.BoxSizer(wx.VERTICAL) #使用垂直布局
sizer3 = wx.BoxSizer()
#文本布局
# #wx.StaticText(parent,id,label,position,size,style)
# parent(wx.Window) #父窗口、不应该None、也就是,在什么地方显示
# id(wx.WindowID) #控件标识符、值-1表示默认
# label(字符串) #文本标签也就是显示的内容
# pos(wx.Point) #窗口位置
# size(wx.Size) #窗口大小
# style(long1) #窗口样式
text = wx.StaticText(self,-1,u'这是一个文本信息',size=(200,100),style=wx.ALIGN_CENTER) #代码解析(在self的父窗口中有一段文字,占窗口的200,100的位置,窗口的样式是居中显示)
font = wx.Font(15,wx.FONTFAMILY_MODERN,wx.NORMAL,wx.NORMAL)
text.SetFont(font) #应用字体

sizer1.Add(text,0,wx.ALL,50) #代码解析,添加控件(text的文本控件、整个控件的比例0代表由控件决定、)
#self.SetSizer(sizer1)

#输入文本框
imput_kuang = wx.TextCtrl(self,-1,value="请输入文本内容",size=(200,100),style=wx.TE_MULTILINE)
sizer1.Add(imput_kuang,0,wx.ALL,50)
#self.SetSizer(sizer1)
#显示文本框
show_kuang = wx.TextCtrl(self,-1,value="显示的内容",size=(300,200),style=wx.TE_MULTILINE)
sizer1.Add(show_kuang,0,wx.ALL,50)

#按钮
button = wx.Button(self,-1,label="点我",size=(100,50))
sizer2.Add(button,0)

#下拉框
xaila_kuang = wx.ComboBox(self,-1,value="下拉框",size=(200,50),choices=['1','2','3'],style=wx.CB_READONLY)
sizer2.Add(xaila_kuang,0,wx.Top|wx.LEFT,10)

#单选框
danxuan_kuang = wx.RadioBox(self,-1,label="单选框",size=(50,100),choices=['1','2','3'])
sizer2.Add(danxuan_kuang,0,wx.ALL,50)

#复选框
fuxuan1_kuang = wx.CheckBox(self,-1,label="复选框1",size=(30,100))
fuxuan2_kuang = wx.CheckBox(self,-1,label="复选框2",size=(30,100))
fuxuan3_kuang = wx.CheckBox(self,-1,label="复选框3",size=(30,100))
sizer2.Add(fuxuan1_kuang,0,wx.RIGHT,10)
sizer2.Add(fuxuan2_kuang,0,wx.RIGHT,10)
sizer2.Add(fuxuan3_kuang,0,wx.RIGHT,10)

#添加器
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(sizer1)
sizer.Add(sizer2)
sizer.Add(sizer3)
self.SetSizer(sizer)


# 这里可以添加自己的设计代码

# wx.App 对象代表当前应用程序
class App(wx.App):
def OnInit(self):
myFrame=MyFrame() # 创建窗体实例
myFrame.Show() # 显示窗口
return True

def OnExit(self):
print('应用程序退出')
return True


if __name__ =="__main__":
app=App() # 创建应用程序对象
app.MainLoop() # 进入主事件循环

菜单栏:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
wx.MenuBar(n, menus, titles, style) 

menuber_box = wx.MenuBar() #生成菜单栏
filemenuber = wx.Menu() #生成一个菜单
ewitem = wx.MenuItem(parentMenu,id,text,kind) #创建一个菜单项
filemenuber.Append(ewitem) #将菜单项添加到菜单里面
menuber_box.Append(menu, title) #将菜单添加到菜单栏
self.SetMenuBar(menuber_box) #将菜单栏添加到程序里



参数「n」表示的菜单的数目。Menu是菜单和标题的数组和字符串数组。如果style参数设置为wx.MB_DOCKABLE,菜单栏可以停靠。

以下是wx.MenuBar类的方法列表 -

方法 说明

1.Append() 添加菜单对象到工具栏

2.Check() 选中或取消选中菜单

3.Enable() 启用或禁用菜单

4.Remove() 去除工具栏中的菜单


wx.Menu类对象是一个或多个菜单项,其中一个可被用户选择的下拉列表。

下表显示了wx.Menu类经常需要的方法-

方法 说明

1.Append() 在菜单增加了一个菜单项

2.AppendMenu() 追加一个子菜单

3.AppendRadioItem() 追加可选当选项

4.AppendCheckItem() 追加一个可检查的菜单项

5.AppendSeparator() 添加一个分隔线

6.Insert() 在给定的位置插入一个新的菜单

7.InsertRadioItem() 在给定位置插入单选项

8.InsertCheckItem() 在给定位置插入新的检查项

9.InsertSeparator() 插入分隔行

10.Remove() 从菜单中删除一个项

11.GetMenuItems() 返回菜单项列表
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import wx # 加载模块

# 继承窗体类
class MyFrame(wx.Frame):
def __init__(self):
# 初始化父类
super().__init__(parent=None,title="第一个窗体程序!",size=(1000,600))
self.Center() # 设置窗口居中
# 这里可以添加自己的设计代码
sizer1 = wx.BoxSizer() #使用水平布局
sizer2 = wx.BoxSizer(wx.VERTICAL) #使用垂直布局
sizer3 = wx.BoxSizer()
#文本布局
# #wx.StaticText(parent,id,label,position,size,style)
# parent(wx.Window) #父窗口、不应该None、也就是,在什么地方显示
# id(wx.WindowID) #控件标识符、值-1表示默认
# label(字符串) #文本标签也就是显示的内容
# pos(wx.Point) #窗口位置
# size(wx.Size) #窗口大小
# style(long1) #窗口样式
text = wx.StaticText(self,-1,u'这是一个文本信息',size=(200,100),style=wx.ALIGN_CENTER) #代码解析(在self的父窗口中有一段文字,占窗口的200,100的位置,窗口的样式是居中显示)
font = wx.Font(15,wx.FONTFAMILY_MODERN,wx.NORMAL,wx.NORMAL)
text.SetFont(font) #应用字体

sizer1.Add(text,0,wx.ALL,50) #代码解析,添加控件(text的文本控件、整个控件的比例0代表由控件决定、)
#self.SetSizer(sizer1)

#输入文本框
imput_kuang = wx.TextCtrl(self,-1,value="请输入文本内容",size=(200,100),style=wx.TE_MULTILINE)
sizer1.Add(imput_kuang,0,wx.ALL,50)
#self.SetSizer(sizer1)
#显示文本框
show_kuang = wx.TextCtrl(self,-1,value="显示的内容",size=(300,200),style=wx.TE_MULTILINE)
sizer1.Add(show_kuang,0,wx.ALL,50)

#按钮
button = wx.Button(self,-1,label="点我",size=(100,50))
sizer2.Add(button,0)

#下拉框
xaila_kuang = wx.ComboBox(self,-1,value="下拉框",size=(200,50),choices=['1','2','3'],style=wx.CB_READONLY)
sizer2.Add(xaila_kuang,0,wx.Top|wx.LEFT,10)

#单选框
danxuan_kuang = wx.RadioBox(self,-1,label="单选框",size=(50,100),choices=['1','2','3'])
sizer2.Add(danxuan_kuang,0,wx.ALL,50)

#复选框
fuxuan1_kuang = wx.CheckBox(self,-1,label="复选框1",size=(30,100))
fuxuan2_kuang = wx.CheckBox(self,-1,label="复选框2",size=(30,100))
fuxuan3_kuang = wx.CheckBox(self,-1,label="复选框3",size=(30,100))
sizer2.Add(fuxuan1_kuang,0,wx.RIGHT,10)
sizer2.Add(fuxuan2_kuang,0,wx.RIGHT,10)
sizer2.Add(fuxuan3_kuang,0,wx.RIGHT,10)

#添加器
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(sizer1)
sizer.Add(sizer2)
sizer.Add(sizer3)
self.SetSizer(sizer)

#菜单栏测试
menuber_box = wx.MenuBar() #生成菜单栏
filemenuber = wx.Menu() #生成一个菜单
ewitem1 = wx.MenuItem(filemenuber,-1,'菜单选项-1') #创建一个菜单项
ewitem2 = wx.MenuItem(filemenuber,-1,'菜单选项-2') #创建一个菜单项
filemenuber.Append(ewitem1) #将菜单项添加到菜单里面
filemenuber.Append(ewitem2) #将菜单项添加到菜单里面
menuber_box.Append(filemenuber,'菜单') #将菜单添加到菜单栏
self.SetMenuBar(menuber_box) #j将菜单栏添加到程序里

# 这里可以添加自己的设计代码

# wx.App 对象代表当前应用程序
class App(wx.App):
def OnInit(self):
myFrame=MyFrame() # 创建窗体实例
myFrame.Show() # 显示窗口
return True

def OnExit(self):
print('应用程序退出')
return True


if __name__ =="__main__":
app=App() # 创建应用程序对象
app.MainLoop() # 进入主事件循环

状态栏:

1
2
3
4
5
StatusBar = wx.StatusBar(self,-1)      #实例化一个菜单栏、也就是创建一个菜单栏
StatusBar.SetFieldsCount(3) #将状态栏分为3个区域
StatusBar.SetStatusWidths([-1,-1,-1]) #区域宽度比例、用负数、1:1:1
StatusBar.SetStatusText(text) #给状态栏设置文字
self.SetStatusBar(statusBar) #将状态栏添加到框架上
举例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import wx # 加载模块

# 继承窗体类
class MyFrame(wx.Frame):
def __init__(self):
# 初始化父类
super().__init__(parent=None,title="第一个窗体程序!",size=(1000,600))
self.Center() # 设置窗口居中
# 这里可以添加自己的设计代码
sizer1 = wx.BoxSizer() #使用水平布局
sizer2 = wx.BoxSizer(wx.VERTICAL) #使用垂直布局
sizer3 = wx.BoxSizer()
#文本布局
# #wx.StaticText(parent,id,label,position,size,style)
# parent(wx.Window) #父窗口、不应该None、也就是,在什么地方显示
# id(wx.WindowID) #控件标识符、值-1表示默认
# label(字符串) #文本标签也就是显示的内容
# pos(wx.Point) #窗口位置
# size(wx.Size) #窗口大小
# style(long1) #窗口样式
text = wx.StaticText(self,-1,u'这是一个文本信息',size=(200,100),style=wx.ALIGN_CENTER) #代码解析(在self的父窗口中有一段文字,占窗口的200,100的位置,窗口的样式是居中显示)
font = wx.Font(15,wx.FONTFAMILY_MODERN,wx.NORMAL,wx.NORMAL)
text.SetFont(font) #应用字体

sizer1.Add(text,0,wx.ALL,50) #代码解析,添加控件(text的文本控件、整个控件的比例0代表由控件决定、)
#self.SetSizer(sizer1)

#输入文本框
imput_kuang = wx.TextCtrl(self,-1,value="请输入文本内容",size=(200,100),style=wx.TE_MULTILINE)
sizer1.Add(imput_kuang,0,wx.ALL,50)
#self.SetSizer(sizer1)
#显示文本框
show_kuang = wx.TextCtrl(self,-1,value="显示的内容",size=(300,200),style=wx.TE_MULTILINE)
sizer1.Add(show_kuang,0,wx.ALL,50)

#按钮
button = wx.Button(self,-1,label="点我",size=(100,50))
sizer2.Add(button,0)

#下拉框
xaila_kuang = wx.ComboBox(self,-1,value="下拉框",size=(200,50),choices=['1','2','3'],style=wx.CB_READONLY)
sizer2.Add(xaila_kuang,0,wx.Top|wx.LEFT,10)

#单选框
danxuan_kuang = wx.RadioBox(self,-1,label="单选框",size=(50,100),choices=['1','2','3'])
sizer2.Add(danxuan_kuang,0,wx.ALL,50)

#复选框
fuxuan1_kuang = wx.CheckBox(self,-1,label="复选框1",size=(30,100))
fuxuan2_kuang = wx.CheckBox(self,-1,label="复选框2",size=(30,100))
fuxuan3_kuang = wx.CheckBox(self,-1,label="复选框3",size=(30,100))
sizer2.Add(fuxuan1_kuang,0,wx.RIGHT,10)
sizer2.Add(fuxuan2_kuang,0,wx.RIGHT,10)
sizer2.Add(fuxuan3_kuang,0,wx.RIGHT,10)

#添加器
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(sizer1)
sizer.Add(sizer2)
sizer.Add(sizer3)
self.SetSizer(sizer)

#状态栏测试
StatusBar = wx.StatusBar(self,-1) #实例化一个菜单栏、也就是创建一个菜单栏
StatusBar.SetFieldsCount(3) #将状态栏分为3个区域
StatusBar.SetStatusWidths([-1,-1,-1]) #区域宽度比例、用复数
StatusBar.SetStatusText('About',0) #给状态栏设置文字
StatusBar.SetStatusText('状态栏',2) #给状态栏设置文字
self.SetStatusBar(StatusBar) #将状态栏添加到框架上

#菜单栏测试
menuber_box = wx.MenuBar() #生成菜单栏
filemenuber = wx.Menu() #生成一个菜单
ewitem1 = wx.MenuItem(filemenuber,-1,'菜单选项-1') #创建一个菜单项
ewitem2 = wx.MenuItem(filemenuber,-1,'菜单选项-2') #创建一个菜单项
filemenuber.Append(ewitem1) #将菜单项添加到菜单里面
filemenuber.Append(ewitem2) #将菜单项添加到菜单里面
menuber_box.Append(filemenuber,'菜单') #将菜单添加到菜单栏
self.SetMenuBar(menuber_box) #j将菜单栏添加到程序里

# 这里可以添加自己的设计代码

# wx.App 对象代表当前应用程序
class App(wx.App):
def OnInit(self):
myFrame=MyFrame() # 创建窗体实例
myFrame.Show() # 显示窗口
return True

def OnExit(self):
print('应用程序退出')
return True


if __name__ =="__main__":
app=App() # 创建应用程序对象
app.MainLoop() # 进入主事件循环

总:

image-20220306203044043

绑定事件

1
2
控件.Bind(事件,方法)
self.Bind(事件,方法,控件)