Panel是面板窗口,用于放置按钮,文本框等控件,虽然这些控件也可以放置在Frame上,但成熟的做法是放在Panel上,实际上,Panel和Frame拥有共同的祖先类---Window。使用Panel部署控件的一个充分的理由是,它可以灵活的控制布局,关于这一方面知识,后面的教程会逐步渗透。
Panel需要附着在Frame上面,这一点通过设置Panel初始化函数中的parent参数来实现
修改第一讲代码中的FirstFrame类,创建panel时,parent指定为frame对象,如此,panel就附着在frame上,创建StaticText对象时,指定parent为panel,那么StaticText就附着在panel上。StaticText用于呈现一行或多行文本,label参数可以设置可显示的文字,pos 设置在panel中的显示位置,SetForegroundColour方法可设置文字的颜色。

将窗体理解为一个坐标系,pos 的两个数值分别是x, y ,窗体的原点是左上角,x 是水平方向,y是垂直方向。
接下来,实现一个非常小的功能,在窗体界面上实时显示当前时间。
import wx
import datetime
class FirstFrame(wx.Frame):
def __init__(self, *args, **kwargs):
super(FirstFrame, self).__init__(*args, **kwargs)
panel = wx.Panel(parent=self)
self.text = wx.StaticText(parent=panel,
label=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
pos=(50, 30))
# 设置字体
font = wx.Font(15, wx.MODERN, wx.NORMAL, wx.NORMAL, False, 'Consolas')
self.text.SetFont(font)
self.text.SetForegroundColour((0, 255, 0)) # 绿色文字
self.text.SetBackgroundColour((0, 0, 0)) # 黑色背景
self.timer = wx.Timer(owner=self)
self.Bind(wx.EVT_TIMER, self.on_timer, self.timer) # 绑定事件
self.timer.Start(1000) # 每隔1秒触发一次事件
def on_timer(self, evt):
time_now = datetime.datetime.now()
time_str = time_now.strftime("%Y-%m-%d %H:%M:%S")
self.text.SetLabel(time_str)
最终的效果如下

这段代码里,我新增了一个Timer控件,并为它绑定一个事件处理方法on_timer, 每隔一秒钟,就会触发一次,这样就可以重新设置文字的内容,最终实现了时间的实时显示。
文章转载自coolpython,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




