chapter 14
#coding=gbk
'''
Created on 2018年11月21日
@author: Administrator
'''
import wx
import os
# WxPython 中的菜单, 窗口和对话框控件
#窗口, MDI 窗口,多文档窗口,由多个窗口或其他组件组成
def test_mdiframe():
class MDIframe(wx.MDIParentFrame):
def __init__(self):
wx.MDIParentFrame.__init__(self, None, -1, u'MDI', size=(300, 300))
menubar = wx.MenuBar() # 添加菜单栏
self.SetMenuBar(menubar)
menu = wx.Menu()
menu.Append(100, u'新建')
menu.Append(101, u'退出')
menubar.Append(menu, u'文件')
self.Bind(wx.EVT_MENU, self.OnNewWindow, id=100) #绑定菜单栏的事件
self.Bind(wx.EVT_MENU, self.OnExit, id=101)
def OnExit(self, event):
self.Close(True)
def OnNewWindow(self, event):
win = wx.MDIChildFrame(self, -1, u'子窗口') #创建子窗口
win.Show(True)
app = wx.App()
frame = MDIframe()
frame.Show()
app.MainLoop()
# test_mdiframe()
#1,对话框:分为模态对话框,提示对话框,文本对话框,打开文件对话框,对话框都是继承与 wx.Dialog 类
#对话框与Frame 类似,不同的是对话框表示一次信息交换的过程,需要最后关闭
# 使用Show() 方法显示的对话框为非模态对话框,使用ShowModal() 方法的是模态对话框,用户必须关闭对话框之后,才能对主程序窗口进行操作
#提示对话框
def test_dialog():
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, u'自定义对话框', size=(300, 150)) # 这里自定义 parent 为 None
MenuHelp = wx.Menu() #创建菜单
MenuShow = wx.Menu()
aboutMenu = MenuHelp.Append(-1, u'关于')
MenuShow.Append(100, u'文件') # 在 帮助 栏,增加子栏
MenuShow.Append(101, u'退出')
menuBar = wx.MenuBar() #添加菜单栏
menuBar.Append(MenuHelp, u'帮助') # 把菜单添加到 菜单栏中
menuBar.Append(MenuShow, u'显示')
self.Bind(wx.EVT_TOOL, self.ShowAboutDlg, aboutMenu)
self.Bind(wx.EVT_MENU, self.OnHello, id=100) #id 为菜单编号
self.Bind(wx.EVT_MENU, self.OnExit, id=101)
button = wx.Button(self, wx.ID_OK, u'离开', pos=(5, 5), size=(5, 5)) #设置一个按钮
button.SetDefault()
self.Bind(wx.EVT_BUTTON, self.Click, button)
self.SetMenuBar(menuBar)
def ShowAboutDlg(self, event):
pos = self.GetPosition()
dialog = MyDialog(self, -1, u'&m关于')
dialog.SetPosition((pos[0] + 100, pos[1] + 60))
def OnHello(self, event):
wx.MessageBox(u'你好', u'提示')
def OnExit(self, event):
self.Close(True)
def Click(self, event):
dlg = wx.MessageDialog(None, u'是否退出',u'退出 ', wx.YES_NO | wx.ICON_QUESTION) #创建对话框
if dlg.ShowModal() == wx.ID_YES: #判断用户的选择
frame.Close()
dlg.Destroy()
class MyDialog(wx.Dialog):
def __init__(self, parent, id, title):
wx.Dialog.__init__(self, parent, id, title, size=(100, 100))
self.panel = wx.Panel(self)
self.OKBtn = wx.Button(self, 10, u'确定', pos=(10, 20), size=(80, 30))
self.Bind(wx.EVT_BUTTON, self.CloseDlg, self.OKBtn)
self.Show()
def CloseDlg(self, event):
self.Close()
app = wx.App()
frame = MyFrame()
frame.Show()
app.MainLoop()
# test_dialog()
#文本输入对话框
def test_text_dialog():
class MyFrame(wx.Frame):
def __init__(self):
wx.MDIParentFrame.__init__(self, None, -1, u'text', size=(300, 300))
panel = wx.Panel(self, -1)
self.textCtrl = wx.TextCtrl(panel, -1, '', pos=(10, 10),size=(60, 30), style=wx.TE_PROCESS_ENTER)
self.textCtrl.Bind(wx.EVT_TEXT_ENTER, self.OnClick, self.textCtrl) #按 enter 键
def OnClick(self, event):
self.dialog = wx.TextEntryDialog(None, u'输入文本', u'文本对话框', '', style=wx.OK | wx.CANCEL)
if self.dialog.ShowModal() == wx.ID_OK:
self.textCtrl.SetLabel(self.dialog.GetValue()) #在 文本框中打印出 输入的字符串
app = wx.App()
frame = MyFrame()
frame.Show()
app.MainLoop()
# test_text_dialog()
def ShowFileDialog():
filterFile = 'Python source(*.py) | *.py | all files (*.*) |*.*' #过滤的文件,选择.py 格式的数据
dialog = wx.FileDialog(None, u'选择文件', os.getcwd(), '', filterFile, wx.FLP_OPEN) #获取当前文件的路径
dialog.ShowModal()
dialog.Destroy()
app = wx.App()
# ShowFileDialog()
#窗口与对话框交互, 通过2 个方法: TransferToWindow(), TransferFromWindow
# 计算 输入的 2 个值 的和
def test_add_dialog():
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, u'text', size=(300, 300))
panel = wx.Panel(self, -1)
sizer = wx.BoxSizer(wx.HORIZONTAL)
self.addTextCtrl1 = wx.TextCtrl(panel, -1, '', pos=(10, 10)) #定义文本与按钮
add = wx.StaticText(panel, -1, '+')
self.addTextCtrl2 = wx.TextCtrl(panel, -1, '')
self.result = wx.TextCtrl(panel, -1, '', pos=(40, 50))
btn = wx.Button(panel, -1, u'计算')
btn.Bind(wx.EVT_BUTTON, self.OnClick, btn)
sizer.Add(self.addTextCtrl1)
sizer.Add(add)
sizer.Add(self.addTextCtrl2)
sizer.Add(btn)
panel.SetSizer(sizer)
panel.Fit()
def OnClick(self, event):
data = {0: self.addTextCtrl1.GetValue(), 1: self.addTextCtrl2.GetValue()} #将数据存放到字典中
#方法 1
# result = float(data[0]) + float(data[1]) #需要先转换成 float 型
# result = str(result) # 还需要将其 转换成字符串输出
# self.result.SetLabel(result)
dlg = MyDialog(data)
dlg.ShowModal()
dlg.Destroy()
class MyDialog(wx.Dialog):
def __init__(self, data):
wx.Dialog.__init__(self, None, id=-1, title=u'验证器', size=(100, 100))
addStaticText = wx.StaticText(self, -1, u'数字1')
addStaticText2 = wx.StaticText(self, -1, u'数字2')
self.addTextCtrl = wx.TextCtrl(self, validator = DataValidator(data, 0))
self.addTextCtrl2 = wx.TextCtrl(self, validator = DataValidator(data, 1))
btn = wx.Button(self, wx.ID_OK, u'确定')
self.Bind(wx.EVT_BUTTON, self.OnClick, btn)
btn.SetDefault()
sizer = wx.BoxSizer(wx.VERTICAL)
gridsizer = wx.FlexGridSizer(2, 2, 5, 5)
gridsizer.Add(addStaticText, 0, wx.ALIGN_LEFT)
gridsizer.Add(self.addTextCtrl, 0, wx.EXPAND)
gridsizer.Add(addStaticText2, 0, wx.ALIGN_LEFT)
gridsizer.Add(self.addTextCtrl2, 0, wx.EXPAND)
sizer.Add(gridsizer, 0, wx.EXPAND | wx.ALL, 5)
sizer.Add(btn, 0, 5)
self.SetSizer(sizer)
sizer.Fit(self)
def OnClick(self, event):
result = float(self.addTextCtrl.GetValue()) + float(self.addTextCtrl2.GetValue())
dlg = wx.MessageBox(str(result), u'结果')
self.Close()
class DataValidator(wx.PyValidator):
def __init__(self, data, key):
wx.PyValidator.__init__(self)
self.data = data
self.key = key
def Clone(self):
return DataValidator(self.data, self.key)
def Validate(self, w):
return True
def TransferToWindow(self):
textCtrl = self.GetWindow()
textCtrl.SetValue(self.data.get(self.key, ''))
return True
def TransferFromWindow(self):
return True
app = wx.App()
frame = MyFrame()
frame.Show()
app.MainLoop()
# test_add_dialog()
项目推荐:
Java微服务实战296集大型视频-谷粒商城【附代码和课件】