Python GUI编程:wxPython模块之文本控件
wxPython中的控件全部继承与wx.Control,包含了静态文本、文本输入控件、按钮、列表、滑块、滚动条、复选框等,本节我们来学习一下静态文本和文本输入控件。
1. 静态文本
静态文本就是在上屏幕显示的静态文字,我们使用的是wx.StaticText类来完成,它的语法格式为:
1 | wx.StaticText(parent,
id
,label
=
’’,pos
=
wx.DefaultPositon,size
=
wx.DefaultSize,style
=
’’,name
=
’’) |
label为显示在控件中的文本信息,其余的我们在前面都学习过就不再作解释。
其中样式style的取值有:
wx.ALIGN_CENTER:静态文本位于静态文本控件的中心。
wx.ALIGN_LEFT:文本在窗口部件中左对齐。这是默认的样式。
wx.ALIGN_RIGHT:文本在窗口部件中右对齐。
wx.ST_NO_AUTORESIZE:如果使用了这个样式,那么在使用了SetLabel()改变文本之后,静态文本控件不将自我调整尺寸。
我们来使用这种方式来输出一首诗,代码如下:
123456789101112131415 | import wx
class Frame(wx.Frame):
def __init__(
self
):
wx.Frame.__init__(
self
,
None
, wx.ID_ANY,
"静态文本"
, size
=
(
200
,
170
))
panel
= wx.Panel(
self
,
-
1
)
wx.StaticText(panel, wx.ID_ANY,
"春夜喜雨 ——杜甫。"
, (
,
10
),(
145
,
-
1
),wx.ALIGN_RIGHT)
text
= wx.StaticText(panel, wx.ID_ANY,
"好雨知时节,当春乃发生。"
, (
,
30
),(
160
,
-
1
),wx.ALIGN_RIGHT)
text
= wx.StaticText(panel, wx.ID_ANY,
"随风潜入夜,润物细无声。"
, (
,
50
), (
160
,
-
1
),wx.ALIGN_RIGHT)
text
=
wx.StaticText(panel, wx.ID_ANY,
"野径云俱黑,江船火独明。"
, (
,
70
),(
160
,
-
1
),wx.ALIGN_RIGHT)
text
=
wx.StaticText(panel, wx.ID_ANY,
"晓看红湿处,花重锦官城。"
, (
,
90
),(
160
,
-
1
),wx.ALIGN_RIGHT)
if __name__
=
= '__main__'
:
app
= wx.App()
frame
= Frame()
frame.Show(
True
)
app.MainLoop() |
输出结果为:
注意我们在使用的时候首先要用wx.Panel方式来创建一个容器,类似于Tkinter中的Frame容器,然后我们在这个容器里放置一些组件。
我们还可以对文字信息进行修饰,使用wx.Font方法,它的语法结构如下:
1 | wx.Font(pointSize,fimily,style,weight,underline
=
True
,faceName
=
’’,encoding
=
wx.FONTENCODING_DEFAULT) |
pointSize为字体的尺寸,family为字体的名字,style来判定倾斜,weight为宽度,underline为下划线,True有,False为无,faceName为此方法的字体名,encoding为编码方式。
2. 文本输入控件
我们在与程序交互的时候,静态文字是无法获取我们输入的信息,因此我们引入wx.TextCtrl类来获取用户输入的文本内容,它的语法结构为:
12 | wx.TextCtrl(parent,
id
,value
=
’’,pos
=
wx.DefaultPositon,size
=
wx.DefaultSize,style,validator
=
wx.DefaultVali
dator,name
=
’’) |
除了validator为过滤数据外其余的我们在前面都提到过,style在这里功能有所增添,我们介绍再介绍一下。
wx.TE_CENTER:控件中的文本居中。
wx.TE_LEFT:控件中的文本左对齐。
wx.TE_NOHIDESEL:文本始终高亮显示,只适用于Windows。
wx.TE_PASSWORD:不显示所键入的文本,代替以星号显示。
wx.TE_PROCESS_ENTER:如果使用了这个样式,那么当用户在控件内按下回车
键时,一个文本输入事件被触发。否则,按键事件内在的由该文本控件或该对话框管理。
wx.TE_PROCESS_TAB:如果指定了这个样式,那么通常的字符事件在Tab键按下
时创建。否则,Tab由对话框来管理,通常是控件键的切换。
wx.TE_READONLY:文本控件为只读,用户不能修改其中的文本。
wx.TE_RIGHT:控件中的文本右对齐。
我们使用wx.TextCtrl来实现一个登陆界面。
代码如下:
123456789101112131415 | import wx
class Frame(wx.Frame):
def __init__(
self
):
wx.Frame.__init__(
self
,
None
, wx.ID_ANY,
"登陆"
, size
=
(
300
,
300
))
panel
= wx.Panel(
self
,
-
1
)
wx.StaticText(panel, wx.ID_ANY,
"登录界面"
, (
,
10
),(
150
,
-
1
),wx.ALIGN_RIGHT)
text
= wx.StaticText(panel, wx.ID_ANY,
"账户"
, (
,
50
),(
80
,
-
1
),wx.ALIGN_RIGHT)
text
= wx.StaticText(panel, wx.ID_ANY,
"密码"
, (
,
90
),(
80
,
-
1
),wx.ALIGN_RIGHT)
text
= wx.TextCtrl(panel, wx.ID_ANY, "", (
100
,
50
),(
100
,
20
),wx.ALIGN_LEFT)
text
= wx.TextCtrl(panel, wx.ID_ANY, "", (
100
,
90
),(
100
,
20
),wx.ALIGN_LEFT)
if __name__
=
= '__main__'
:
app
= wx.App()
frame
= Frame()
frame.Show(
True
)
app.MainLoop() |
运行结果如图: