victory的博客

长安一片月,万户捣衣声

0%

wxPython | wxPython控件

wxPython控件

1.实现三个文本输入空间和三个静态文本
1.1界面效果

1.2示例代码

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="文本输入控件", size=(300, 260))
        panel = wx.Panel(parent=self)
        tc1 = wx.TextCtrl(panel)
        tc2 = wx.TextCtrl(panel, style=wx.TE_PASSWORD)
        tc3 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)

        userid = wx.StaticText(panel, label="用户ID:")
        pwd = wx.StaticText(panel, label="密码:")
        content = wx.StaticText(panel, label="多行文本:")

        # 创建垂直方向的盒子布局管理器对象
        vbox = wx.BoxSizer(wx.VERTICAL)

        # 添加控件到vbox布局管理器
        vbox.Add(userid, flag=wx.EXPAND | wx.LEFT, border=10)
        vbox.Add(tc1, flag=wx.EXPAND | wx.ALL, border=10)
        vbox.Add(pwd, flag=wx.EXPAND | wx.LEFT, border=10)
        vbox.Add(tc2, flag=wx.EXPAND | wx.ALL, border=10)
        vbox.Add(content, flag=wx.EXPAND | wx.LEFT, border=10)
        vbox.Add(tc3, flag=wx.EXPAND | wx.ALL, border=10)

        # 设置面板采用vbox布局管理器
        panel.SetSizer(vbox)

        # 设置tc1初始值
        tc1.SetValue('tony')
        # 获取tc1值
        print('读取用户ID:{0}'.format(tc1.GetValue()))

        tc2.SetValue('123')

        tc3.SetValue('这是一个多行文本!这是一个多行文本!这是一个多行文本!这是一个多行文本!这是一个多行文本!这是一个多行文本!')


app = wx.App()
frm = MyFrame()
frm.Show()
app.MainLoop()

2.实现一组复选框和一组单选按钮
2.1界面效果

2.2示例代码

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="复选框和单选按钮", size=(330, 120))
        panel = wx.Panel(parent=self)

        st1 = wx.StaticText(panel, label="选择你喜欢的编程语言:")
        cb1 = wx.CheckBox(panel, id=1, label='Python')
        cb2 = wx.CheckBox(panel, id=2, label='Java')
        cb2.SetValue(True)
        cb3 = wx.CheckBox(panel, id=3, label='C++')
        self.Bind(wx.EVT_CHECKBOX, self.on_checkbox_click, id=1, id2=3)

        st2 = wx.StaticText(panel, label="选择性别:")
        radio1 = wx.RadioButton(panel, id=4, label='男', style=wx.RB_GROUP)
        radio2 = wx.RadioButton(panel, id=5, label='女')
        self.Bind(wx.EVT_RADIOBUTTON, self.on_radio1_click, id=4, id2=5)

        st3 = wx.StaticText(panel, label="是否婚配:")
        radio3 = wx.RadioButton(panel, id=6, label='Yes', style=wx.RB_GROUP)
        radio4 = wx.RadioButton(panel, id=7, label='No')
        self.Bind(wx.EVT_RADIOBUTTON, self.on_radio2_click, id=6, id2=7)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        hbox1.Add(st1, flag=wx.LEFT | wx.RIGHT, border=5)
        hbox1.Add(cb1)
        hbox1.Add(cb2)
        hbox1.Add(cb3)

        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        hbox2.Add(st2, flag=wx.LEFT | wx.RIGHT, border=5)
        hbox2.Add(radio1)
        hbox2.Add(radio2)

        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        hbox3.Add(st3, flag=wx.LEFT | wx.RIGHT, border=5)
        hbox3.Add(radio3)
        hbox3.Add(radio4)

        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox.Add(hbox1, flag=wx.ALL, border=10)
        vbox.Add(hbox2, flag=wx.ALL, border=10)
        vbox.Add(hbox3, flag=wx.ALL, border=10)

        panel.SetSizer(vbox)

    def on_checkbox_click(self, event):
        cb = event.GetEventObject()
        print('选择{0},状态{1}'.format(cb.GetLabel(), event.IsChecked()))

    def on_radio1_click(self, event):
        rb = event.GetEventObject()
        print('第一组{0}被选中'.format(rb.GetLabel()))

    def on_radio2_click(self, event):
        rb = event.GetEventObject()
        print('第二组{0}被选中'.format(rb.GetLabel()))


app = wx.App()
frm = MyFrame()
frm.Show()
app.MainLoop()  

3.单选列表和多选列表
3.1界面效果

3.2示例代码

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title="列表", size=(350, 175))
        panel = wx.Panel(parent=self)

        st1 = wx.StaticText(parent=panel, label="选择你喜欢的编程语言:")
        list1 = ['Python', 'C++', 'Java']
        # 创建列表控件,参数choices用于设置列表选项;参数style用于设置列表风格样式,wx.LB_SINGLE指单选列表控件
        lb1 = wx.ListBox(parent=panel, choices=list1, style=wx.LB_SINGLE)
        self.Bind(wx.EVT_LISTBOX, self.on_listbox1, lb1)

        st2 = wx.StaticText(parent=panel, label="选择你喜欢吃的水果:")
        list2 = ['苹果', '橘子', '香蕉']
        lb2 = wx.ListBox(parent=panel, choices=list2, style=wx.LB_EXTENDED)  # style=wx.LB_EXTENDED表示创建多选列表控件
        self.Bind(wx.EVT_LISTBOX, self.on_listbox2, lb2)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        hbox1.Add(st1, proportion=1, flag=wx.LEFT | wx.RIGHT, border=5)
        hbox1.Add(lb1, proportion=1)

        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        hbox2.Add(st2, proportion=1, flag=wx.LEFT | wx.RIGHT, border=5)
        hbox2.Add(lb2, proportion=1)

        vbox = wx.BoxSizer(wx.VERTICAL)
        vbox.Add(hbox1, flag=wx.ALL | wx.EXPAND, border=5)
        vbox.Add(hbox2, flag=wx.ALL | wx.EXPAND, border=5)

        panel.SetSizer(vbox)

    def on_listbox1(self, event):
        listbox = event.GetEventObject()
        print('选择 {0}'.format(listbox.GetSelection()))

    def on_listbox2(self, event):
        listbox = event.GetEventObject()
        print('选择 {0}'.format(listbox.GetSelections()))


app = wx.App()
frm = MyFrame()
frm.Show()
app.MainLoop()

4.静态图片控件
4.1界面效果

4.2示例代码

class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, title='静态图片控件', size=(300, 300))
        self.panel = wx.Panel(parent=self)

        # 创建wx.Bitmap图片对象的列表
        self.bmps = [wx.Bitmap('images/1.jpg', wx.BITMAP_TYPE_JPEG),
                     wx.Bitmap('images/2.jpg', wx.BITMAP_TYPE_JPEG),
                     wx.Bitmap('images/3.jpg', wx.BITMAP_TYPE_JPEG)]

        b1 = wx.Button(self.panel, id=1, label='Button1')
        b2 = wx.Button(self.panel, id=2, label='Button2')
        self.Bind(wx.EVT_BUTTON, self.on_click, id=1, id2=2)

        self.image = wx.StaticBitmap(self.panel, bitmap=self.bmps[0])

        # 创建垂直方向的布局管理器对象vbox
        vbox = wx.BoxSizer(wx.VERTICAL)
        # 添加控件到布局管理器对象vbox
        vbox.Add(b1, proportion=1, flag=wx.EXPAND)
        vbox.Add(b2, proportion=1, flag=wx.EXPAND)
        vbox.Add(self.image, proportion=3, flag=wx.EXPAND)

        self.panel.SetSizer(vbox)

    def on_click(self, event):
        event_id = event.GetId()
        if event_id == 1:
            self.image.SetBitmap(self.bmps[1])
        else:
            self.image.SetBitmap(self.bmps[2])

        self.panel.Layout()  # 重新设置panel面板布局


app = wx.App()
frm = MyFrame()
frm.Show()
app.MainLoop()