Python图形用户界面之控件入门。

本章介绍图形用户界面中主要所用到的控件:

  • 静态文本
  • 按钮
  • 复选框
  • 单选按钮
  • 下拉列表
  • 静态图片控件

静态文本和按钮

点击“Button”,实现文本显示改变信息。

# 静态文本和按钮
import wx


class myFrame(wx.Frame):
    
    def __init__(self):
        super().__init__(parent=None, title='静态文本和按钮')
        self.Center()
        panel = wx.Panel(parent=self)
        vBox = wx.BoxSizer(wx.VERTICAL)
        # 静态文本
        self.titleText = wx.StaticText(parent=panel, label='show text')
        # 普通按钮
        b1 = wx.Button(parent=panel, label='Button', id=1)
        self.Bind(wx.EVT_BUTTON, self.on_Click, b1)
        # 带有图标的按钮,wx.BITMAP_TYPE_PNG--设置图标格式类型
        bmp = wx.Bitmap(r'D:\WORK\Python\Python_Code\ Basics\image01.png', wx.BITMAP_TYPE_PNG)
        b2 = wx.BitmapButton(panel, -1, bmp)
        self.Bind(wx.EVT_BUTTON, self.on_Click, b2)
        # 两种状态的按钮
        b3 = wx.ToggleButton(panel, -1, 'ToggleButton')
        self.Bind(wx.EVT_BUTTON, self.on_Click, b3)

        vBox.AddMany([(100, 10, 1, wx.CENTER | wx.FIXED_MINSIZE), (self.titleText, 1, wx.CENTER | wx.FIXED_MINSIZE),
                      (b1, 1, wx.CENTER | wx.EXPAND), (b2, 1, wx.Center | wx.EXPAND), (b3, 1, wx.Center | wx.EXPAND)])

        panel.SetSizer(vBox)

    def on_Click(self, evt):
        self.titleText.SetLabelText('hello')


class myApp(wx.App):
    def OnInit(self):
        frame = myFrame()

        frame.Show()
        return True


if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

执行结果:

    

复选框和单选按钮

复选框功能实现选择编程语言,单选按钮实现选择性别,选择喜欢的水果。如下所示。

# 复选框和单选按钮
import wx


class myFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='复选框和单选按钮')
        self.Center()
        panel = wx.Panel(parent=self)

        hBox1 = wx.BoxSizer(wx.HORIZONTAL)

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

        hBox1.AddMany([(languageText, 1, wx.LEFT | wx.RIGHT | wx.FIXED_MINSIZE, 5), (cb1, 1, wx.ALL | wx.FIXED_MINSIZE),
                       (cb2, 1, wx.ALL | wx.FIXED_MINSIZE), (cb3, 1, wx.ALL | wx.FIXED_MINSIZE)])

        hBox2 = wx.BoxSizer(wx.HORIZONTAL)
        # 文本框和单选按钮
        sexText = wx.StaticText(panel, label='选择你的性别:')
        radio1 = wx.RadioButton(panel, 4, '男', style=wx.RB_GROUP)
        radio2 = wx.RadioButton(panel, 5, '女')
        self.Bind(wx.EVT_RADIOBUTTON, self.on_readio_click, id=4, id2=5)

        hBox2.AddMany([(sexText, 1, wx.LEFT | wx.RIGHT | wx.FIXED_MINSIZE, 5), (radio1, 1, wx.ALL | wx.FIXED_MINSIZE),
                       (radio2, 1, wx.ALL | wx.FIXED_MINSIZE)])

        hBox3 = wx.BoxSizer(wx.HORIZONTAL)
        # 文本框和单选按钮
        fruitsText = wx.StaticText(panel, label='选择你喜欢的水果:')
        radio3 = wx.RadioButton(panel, 6, '苹果', style=wx.RB_GROUP)
        radio4 = wx.RadioButton(panel, 7, '香蕉')
        radio5 = wx.RadioButton(panel, 7, '栗子')
        self.Bind(wx.EVT_RADIOBUTTON, self.on_readio1_click, id=6, id2=8)
        hBox3.AddMany(
            [(fruitsText, 1, wx.LEFT | wx.RIGHT | wx.FIXED_MINSIZE, 5), (radio3, 1, wx.ALL | wx.FIXED_MINSIZE),
             (radio4, 1, wx.ALL | wx.FIXED_MINSIZE), (radio5, 1, wx.ALL | wx.FIXED_MINSIZE)])

        vBox = wx.BoxSizer(wx.VERTICAL)
        vBox.AddMany(
            [(hBox1, 1, wx.ALL | wx.EXPAND, 5), (hBox2, 1, wx.ALL | wx.EXPAND, 5), (hBox3, 1, wx.ALL | wx.EXPAND, 5)])

        panel.SetSizer(vBox)

    def on_checkbox_click(self, evt):
        '复选框方法'
        cb = evt.GetEventObject()
        print('编程语言选择:%s,此状态:%s' % (cb.GetLabel(), evt.IsChecked()))

    def on_readio_click(self, evt):
        '单选按钮方法'
        rb = evt.GetEventObject()
        print('性别选择:%s' % (rb.GetLabel()))

    def on_readio1_click(self, evt):
        '单选按钮方法'
        rb = evt.GetEventObject()
        print('水果选择:%s' % (rb.GetLabel()))


class myApp(wx.App):
    def OnInit(self):
        frame = myFrame()
        frame.Show()
        return True


if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

执行结果:

         

下拉列表

通过编程语言和性别下拉列表进行选择。

# 下拉列表
import wx


class myFrame(wx.Frame):
    def __init__(self):
        super().__init__(parent=None, title='下拉列表')
        self.Center()
        panel = wx.Panel(parent=self)

        hBox1 = wx.BoxSizer(wx.HORIZONTAL)

        # 下拉列表:COMBOBOX
        languageText = wx.StaticText(panel, label='选择你喜欢的编程语言:')
        listLanguage = ['java', 'python', 'C++']
        CB1 = wx.ComboBox(panel, -1, value='python', choices=listLanguage, style=wx.CB_SORT)
        self.Bind(wx.EVT_COMBOBOX, self.on_combobox_click, CB1)

        hBox1.Add(languageText, 1, flag=wx.LEFT | wx.Right | wx.FIXED_MINSIZE, border=5)
        hBox1.Add(CB1, 1, flag=wx.ALL | wx.FIXED_MINSIZE)

        # 下拉列表:Choice
        hBox2 = wx.BoxSizer(wx.HORIZONTAL)
        exText = wx.StaticText(panel, label='选择你的性别:')
        listSex = ['男', '女']
        ch1 = wx.Choice(panel, -1, choices=listSex)
        self.Bind(wx.EVT_CHOICE, self.on_choice_click, ch1)
        hBox2.Add(exText, 1, flag=wx.ALL | wx.EXPAND, border=5)
        hBox2.Add(ch1, 1, flag=wx.ALL | wx.FIXED_MINSIZE)

        vBox = wx.BoxSizer(wx.VERTICAL)
        vBox.Add(hBox1, 1, flag=wx.ALL | wx.EXPAND, border=5)
        vBox.Add(hBox2, 1, flag=wx.ALL | wx.EXPAND, border=5)

        panel.SetSizer(vBox)

    def on_combobox_click(self, evt):
        '下拉列表方法'
        print('编程选择:%s' % (evt.GetString()))

    def on_choice_click(self, evt):
        print('性别选择:%s' % (evt.GetString()))


class myApp(wx.App):
    def OnInit(self):
        frame = myFrame()
        frame.Show()
        return True


if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

执行结果:

    

静态图片控件

点击“Button-1”、“Button-2”实现切换图片。

# 静态图片控件
import wx


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

        # 图像列表对象
        self.bmps = [wx.Bitmap(r'D:\WORK\Python\Python_Code\ Basics\01.jpg', wx.BITMAP_TYPE_JPEG),
                     wx.Bitmap(r'D:\WORK\Python\Python_Code\ Basics\02.jpg', wx.BITMAP_TYPE_JPEG),
                     wx.Bitmap(r'D:\WORK\Python\Python_Code\ Basics\03.jpg', wx.BITMAP_TYPE_JPEG)]
        self.Center()
        # 类成员的是实例变量
        self.panel = wx.Panel(parent=self)

        vBox1 = wx.BoxSizer(wx.VERTICAL)

        b1 = wx.Button(parent=self.panel, id=1, label='Button-1')
        b2 = wx.Button(parent=self.panel, id=2, label='Button-2')
        self.Bind(wx.EVT_BUTTON, self.on_button_click, id=1, id2=2)
        self.image = wx.StaticBitmap(self.panel, -1, self.bmps[0])

        vBox1.Add(b1, proportion=1, flag=wx.CENTER | wx.EXPAND)
        vBox1.Add(b2, proportion=1, flag=wx.CENTER | wx.EXPAND)
        vBox1.Add(self.image, proportion=3, flag=wx.CENTER)

        self.panel.SetSizer(vBox1)

    def on_button_click(self, evt):
        '按钮方法'
        evtID = evt.GetId()
        if evtID == 1:
            self.image.SetBitmap(self.bmps[1])
        elif evtID == 2:
            self.image.SetBitmap(self.bmps[2])
        else:
            print('Button Id Error')


class myApp(wx.App):
    def OnInit(self):
        frame = myFrame()
        frame.Show()
        return True


if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

执行结果:

   

发布了19 篇原创文章 · 获赞 19 · 访问量 2135

猜你喜欢

转载自blog.csdn.net/qq_39979646/article/details/104083070