1 需求
2 接口
3 示例


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 参考资料