Python-GUI-wxPython-控件
·
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 示例
……
更多推荐
所有评论(0)