暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

wxpython入门第2讲---Panel

coolpython 2020-08-06
1332

Panel是面板窗口,用于放置按钮,文本框等控件,虽然这些控件也可以放置在Frame上,但成熟的做法是放在Panel上,实际上,Panel和Frame拥有共同的祖先类---Window。使用Panel部署控件的一个充分的理由是,它可以灵活的控制布局,关于这一方面知识,后面的教程会逐步渗透。


Panel需要附着在Frame上面,这一点通过设置Panel初始化函数中的parent参数来实现


class FirstFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(FirstFrame, self).__init__(*args, **kwargs)
        panel = wx.Panel(parent=self)
        text = wx.StaticText(parent=panel, label='coolpython.net', pos=(100, 30))
        text.SetForegroundColour((255, 0, 0))

修改第一讲代码中的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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论