1 需求


2 接口


 3.* 控件:wx.StaticText

import wx


class MainFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(MainFrame, self).__init__(*args, **kwargs)

        self.init_ui()
        self.Center()
        self.Maximize()

    def init_ui(self):
        static_text = wx.StaticText(parent=self,
                                    id=-1,
                                    label="Hello World",
                                    pos=wx.DefaultPosition,
                                    size=wx.DefaultSize,
                                    style=0,
                                    name="textCtrl")


if __name__ == "__main__":
    app = wx.App()
    frame = MainFrame(None, title="wxPython Demo")
    frame.Show()
    app.MainLoop()

3.* 控件:wx.TextCtrl

import wx


class MainFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super(MainFrame, self).__init__(*args, **kwargs)

        self.init_ui()
        self.Center()
        self.Maximize()

    def init_ui(self):
        text_control = wx.TextCtrl(parent=self,
                                   id=-1,
                                   value="",
                                   pos=wx.DefaultPosition,
                                   size=wx.DefaultSize,
                                   style=0,
                                   validator=wx.DefaultValidator,
                                   name="textCtrl")


if __name__ == "__main__":
    app = wx.App()
    frame = MainFrame(None, title="wxPython Demo")
    frame.Show()
    app.MainLoop()

3.* 控件:wx.Button

import wx


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.text_ctrl = None

        self.init_ui()

        self.Center()

        self.Maximize()

    def init_ui(self):
        panel = wx.Panel(self)

        sizer = wx.BoxSizer(wx.HORIZONTAL)

        btn = wx.Button(panel, label="测试")
        self.text_ctrl = wx.TextCtrl(panel)

        sizer.Add(btn)
        sizer.Add(self.text_ctrl)

        btn.Bind(wx.EVT_BUTTON, self.on_btn)

        panel.SetSizer(sizer)

    def on_btn(self, event):
        self.text_ctrl.SetValue("hello world")


if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame(None, title="wxPython Demo")
    frame.Show()
    app.MainLoop()

3.* 控件:wx.RadioButton

import wx


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.init_ui()

        self.Center()

        self.Maximize()

    def init_ui(self):
        panel = wx.Panel(self)

        sizer = wx.BoxSizer(wx.HORIZONTAL)

        static_text = wx.StaticText(panel, label="Gender: ")

        male_radio_btn = wx.RadioButton(panel, label="Male", style=wx.RB_GROUP)
        female_radio_btn = wx.RadioButton(panel, label="Female")

        sizer.Add(static_text, flag=wx.ALL | wx.ALIGN_TOP, border=10)
        sizer.Add(male_radio_btn, flag=wx.ALL | wx.ALIGN_TOP, border=10)
        sizer.Add(female_radio_btn, flag=wx.ALL | wx.ALIGN_TOP, border=10)

        self.text_ctrl = wx.TextCtrl(panel)
        sizer.Add(self.text_ctrl, flag=wx.ALL | wx.ALIGN_TOP, border=10)

        male_radio_btn.Bind(wx.EVT_RADIOBUTTON, self.on_radio)
        female_radio_btn.Bind(wx.EVT_RADIOBUTTON, self.on_radio)

        panel.SetSizer(sizer)

    def on_radio(self, event):
        selected_label = event.GetEventObject().GetLabel()
        self.text_ctrl.SetValue(selected_label)


if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame(None, title="wxPython Demo")
    frame.Show()
    app.MainLoop()

3.* 示例:wx.CheckBox

"""
实现如下需求:
需求1:获取所有checkbox是否勾选状态;
需求2:全选和去全选;
需求3:任意一个选项去勾选,则全选框去勾选;
需求4:获取当前所有勾选选项的值
"""
import wx


# 需求1
def on_button(event):
    text_ctrl.Clear()
    for cb in checkbox:
        text_ctrl.AppendText(f"{cb.GetLabel()}状态:{cb.IsChecked()}\n")


# 需求2
def on_check_all(event):
    is_checked = checkbox0.IsChecked()
    for cb in checkbox:
        cb.SetValue(is_checked)


# 需求3
def on_checkbox(event):
    all_check = all(cb.IsChecked() for cb in checkbox)
    checkbox0.SetValue(all_check)

    # 需求4
    text_ctrl.Clear()
    for cb in checkbox:
        if cb.IsChecked():
            text_ctrl.AppendText(cb.GetLabel())


app = wx.App()

frame = wx.Frame(None, title="wxPython Demo")

panel = wx.Panel(frame)

sizer = wx.BoxSizer(wx.HORIZONTAL)

checkbox = []

checkbox0 = wx.CheckBox(panel, label="全选")
checkbox1 = wx.CheckBox(panel, label="选项1")
checkbox2 = wx.CheckBox(panel, label="选项2")
checkbox3 = wx.CheckBox(panel, label="选项3")
checkbox.append(checkbox1)
checkbox.append(checkbox2)
checkbox.append(checkbox3)
button = wx.Button(panel, label="点击")
text_ctrl = wx.TextCtrl(panel, size=(100, 100), style=wx.TE_MULTILINE | wx.TE_READONLY)

sizer.Add(checkbox0, 0, wx.ALL, 10)
sizer.Add(checkbox1, 0, wx.ALL, 10)
sizer.Add(checkbox2, 0, wx.ALL, 10)
sizer.Add(checkbox3, 0, wx.ALL, 10)
sizer.Add(button, 0, wx.ALL, 10)
sizer.Add(text_ctrl, 1, wx.ALL, 10)

panel.SetSizer(sizer)

checkbox0.Bind(wx.EVT_CHECKBOX, on_check_all, checkbox0)
checkbox1.Bind(wx.EVT_CHECKBOX, on_checkbox, checkbox1)
checkbox2.Bind(wx.EVT_CHECKBOX, on_checkbox, checkbox2)
checkbox3.Bind(wx.EVT_CHECKBOX, on_checkbox, checkbox3)

button.Bind(wx.EVT_BUTTON, on_button)

frame.Show()

frame.Maximize()

app.MainLoop()

import wx


class CheckBoxExample(wx.Frame):
    def __init__(self, parent, title):
        super(CheckBoxExample, self).__init__(parent, title=title, size=(350, 250))

        self.panel = wx.Panel(self)

        # 创建垂直方向的 BoxSizer 用于布局
        vbox = wx.BoxSizer(wx.VERTICAL)

        # 创建静态文本用于显示选择结果
        self.st = wx.StaticText(self.panel, label='你选择了: 无')
        vbox.Add(self.st, 0, wx.ALL, 10)

        # 创建一个分隔线
        line = wx.StaticLine(self.panel)
        vbox.Add(line, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 10)

        # 创建水平方向的 BoxSizer 用于放置 CheckBox
        hbox = wx.BoxSizer(wx.HORIZONTAL)

        # 创建 CheckBox 列表
        self.checks = []
        options = ['苹果', '香蕉', '橙子', '葡萄']

        for option in options:
            cb = wx.CheckBox(self.panel, label=option)
            hbox.Add(cb, 0, wx.ALL, 10)
            self.checks.append(cb)
            # 绑定事件处理函数
            self.Bind(wx.EVT_CHECKBOX, self.on_checkbox, cb)

        vbox.Add(hbox, 0, wx.ALL, 10)

        # 创建一个全选 CheckBox
        self.select_all = wx.CheckBox(self.panel, label='全选')
        vbox.Add(self.select_all, 0, wx.ALL, 10)
        self.Bind(wx.EVT_CHECKBOX, self.on_select_all, self.select_all)

        self.panel.SetSizer(vbox)

        self.Centre()
        self.Show()

    def on_checkbox(self, event):
        # 更新选择结果显示
        selected = []
        for cb in self.checks:
            if cb.IsChecked():
                selected.append(cb.GetLabel())

        if not selected:
            self.st.SetLabel('你选择了: 无')
        else:
            self.st.SetLabel(f'你选择了: {", ".join(selected)}')

        # 如果有任意一个未选中,则全选框不选中
        all_checked = all(cb.IsChecked() for cb in self.checks)
        self.select_all.SetValue(all_checked)

    def on_select_all(self, event):
        # 全选/取消全选
        is_checked = self.select_all.IsChecked()
        for cb in self.checks:
            cb.SetValue(is_checked)

        # 更新选择结果显示
        if is_checked:
            labels = [cb.GetLabel() for cb in self.checks]
            self.st.SetLabel(f'你选择了: {", ".join(labels)}')
        else:
            self.st.SetLabel('你选择了: 无')


if __name__ == '__main__':
    app = wx.App()
    CheckBoxExample(None, 'CheckBox 示例')
    app.MainLoop()

3.* 示例:wx.Choice

import wx


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.choice = None
        self.text_ctrl = None

        self.init_ui()

        self.Center()

    def init_ui(self):
        panel = wx.Panel(self)

        sizer = wx.BoxSizer(wx.HORIZONTAL)

        label = wx.StaticText(panel, label="选项")
        self.choice = wx.Choice(panel, choices=["选项1", "选项2", "选项3"])
        self.choice.SetSelection(0)
        self.text_ctrl = wx.TextCtrl(panel)

        sizer.Add(label, 0, wx.ALL, 5)
        sizer.Add(self.choice, 0, wx.ALL, 5)
        sizer.Add(self.text_ctrl, 0, wx.ALL, 5)

        panel.SetSizer(sizer)

        self.choice.Bind(wx.EVT_CHOICE, self.on_choice_selected, self.choice)

    def on_choice_selected(self, event):
        self.text_ctrl.SetValue(event.GetString())


if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame(None, title="wxPython Demo")
    frame.Show()
    app.MainLoop()

3.* 示例:wx.ComboBox

……


3.* 示例:wx.ListBox

……


4 示例

……

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐