Python-GUI-wxPython-案例:增删改查

1 需求


2 接口


3 示例

Python-GUI-wxPython-案例:增删改查_第1张图片

Python-GUI-wxPython-案例:增删改查_第2张图片

import wx


class SettingsDialog(wx.Dialog):
    def __init__(self, parent, title):
        super(SettingsDialog, self).__init__(parent, title=title, size=(600, 450))

        # 创建主面板和垂直布局
        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        # 第一行:标题标签
        title_label = wx.StaticText(panel, label="增删改查", style=wx.ALIGN_CENTER)
        font = title_label.GetFont()
        font.SetPointSize(14)
        font.SetWeight(wx.FONTWEIGHT_BOLD)
        title_label.SetFont(font)
        vbox.Add(title_label, proportion=0, flag=wx.ALL | wx.ALIGN_CENTER, border=10)

        # 第二行:增删改查按钮
        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        btn_labels = ["增", "删", "改", "查"]
        self.buttons = {}

        for label in btn_labels:
            self.buttons[label] = wx.Button(panel, label=label)
            hbox1.Add(self.buttons[label], proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
            # 绑定按钮事件
            self.buttons[label].Bind(wx.EVT_BUTTON, self.on_button_click)

        vbox.Add(hbox1, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)

        # 第三行:大类选择
        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        hbox2.Add(wx.StaticText(panel, label="大类:"), proportion=0, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=5)

        self.category_combo = wx.ComboBox(panel, choices=["配置文件", "白名单"], style=wx.CB_READONLY)
        hbox2.Add(self.category_combo, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
        self.category_combo.Bind(wx.EVT_COMBOBOX, self.on_category_change)

        vbox.Add(hbox2, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)

        # 第四行:小类选择
        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        hbox3.Add(wx.StaticText(panel, label="小类:"), proportion=0, flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=5)

        self.subcategory_combo = wx.ComboBox(panel, style=wx.CB_READONLY)
        hbox3.Add(self.subcategory_combo, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)

        vbox.Add(hbox3, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)

        # 第五行:多行文本输入框
        self.text_ctrl = wx.TextCtrl(panel, style=wx.TE_MULTILINE)
        vbox.Add(self.text_ctrl, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)

        # 设置面板的布局
        panel.SetSizer(vbox)

        # 初始化小类选项
        self.update_subcategory_choices()

        # 居中显示对话框
        self.Centre()

    def on_button_click(self, event):
        button = event.GetEventObject()
        label = button.GetLabel()
        wx.MessageBox(f"您点击了{label}按钮", "提示", wx.OK | wx.ICON_INFORMATION)

    def on_category_change(self, event):
        self.update_subcategory_choices()

    def update_subcategory_choices(self):
        category = self.category_combo.GetValue()

        if category == "配置文件":
            subcategories = ["文件1", "文件2"]
        elif category == "白名单":
            subcategories = ["白名单1", "白名单2"]
        else:
            subcategories = []

        self.subcategory_combo.Clear()
        for subcat in subcategories:
            self.subcategory_combo.Append(subcat)

        if subcategories:
            self.subcategory_combo.SetSelection(0)


class MainFrame(wx.Frame):
    def __init__(self):
        super(MainFrame, self).__init__(None, title="设置应用", size=(300, 200))

        panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        show_dialog_btn = wx.Button(panel, label="显示设置对话框")
        vbox.Add(show_dialog_btn, proportion=0, flag=wx.ALL | wx.CENTER, border=20)

        panel.SetSizer(vbox)

        show_dialog_btn.Bind(wx.EVT_BUTTON, self.on_show_dialog)

        self.Centre()

    def on_show_dialog(self, event):
        dialog = SettingsDialog(self, "设置")
        dialog.ShowModal()
        dialog.Destroy()


if __name__ == "__main__":
    app = wx.App()
    frame = MainFrame()
    frame.Show()
    app.MainLoop()

4 参考资料

你可能感兴趣的:(Python-GUI-wxPython-案例:增删改查)