如何用wxpython做交互界面_wxpython笔记:wxpython实现HTTP请求交互式工具

importwximportnumpyfrom matplotlib.backends.backend_wxagg importFigureCanvasWxAgg as FigureCanvasfrom matplotlib.figure importFigureimporthttp_resquestimportjsonimportloginclassExample(wx.Frame):def __init__(self, parent, title):

super(Example, self).__init__(parent, title=title)

self.Init_Panel()

self.Init_Box()

self.Init_Left()

self.Init_Center()#将三个垂直盒子添加到垂直盒子

self.Boxh1.Add(self.LeftPanel,proportion = 1, border = 2,flag = wx.ALL |wx.EXPAND)

self.Boxh1.Add(self.CenterPanel, proportion=4, border=2, flag=wx.ALL |wx.EXPAND)#将垂直盒子和主框架关联

self.SetSizer(self.Boxh1)#显示主框架

self.Show()

self.Http=http_resquest.Http_R()#创建三个面板

defInit_Panel(self):

self.LeftPanel=wx.Panel(self)

self.CenterPanel=wx.Panel(self)#创建四个盒子

#两个垂直盒子、两个水平盒子

defInit_Box(self):#两个垂直盒子

self.Boxv1 =wx.BoxSizer(wx.VERTICAL)

self.Boxv2=wx.BoxSizer(wx.VERTICAL)#两个水平盒子

self.Boxh1 =wx.BoxSizer(wx.HORIZONTAL)

self.Boxh2=wx.BoxSizer(wx.HORIZONTAL)

self.Boxh3=wx.BoxSizer(wx.HORIZONTAL)defInit_Left(self):#创建一个wx.StaticBox对象。

#声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数。

nm = wx.StaticBox(self.LeftPanel, -1, 'URL')

nmSizer=wx.StaticBoxSizer(nm, wx.VERTICAL)

self.input= wx.TextCtrl(self.LeftPanel, -1, size=(200, 20), style=wx.ALIGN_LEFT)

nmSizer.Add(self.input,1, wx.EXPAND | wx.ALL, 10)

self.Boxh3.Add(nmSizer,5, wx.EXPAND | wx.ALL, 10)

self.button= wx.Button(self.LeftPanel, -1, "请求")

self.Bind(wx.EVT_BUTTON, self.OnClick, self.button)#self.button.SetDefault() # 将按钮设置为默认按钮,不然会是选中状态,边框不同

self.Boxh3.Add( self.button, 0,wx.EXPAND | wx.ALL, 10)

self.Boxv1.Add(self.Boxh3, 0,wx.EXPAND| wx.ALL, 10)#创建一个wx.StaticBox对象。

#声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数。

nm1 = wx.StaticBox(self.LeftPanel, -1, '请求方法')

nmSizer1=wx.StaticBoxSizer(nm1, wx.VERTICAL)#创建下拉框

self.languages = ['GET', 'POST', 'HEAD','PUT','ELETE']

self.combo1= wx.ComboBox(self.LeftPanel, choices=self.languages, value=self.languages[0])#在StaticBoxSizer盒子添加下拉框

nmSizer1.Add(self.combo1, 1, wx.EXPAND | wx.ALL, 1)

self.Boxv1.Add(nmSizer1,0, wx.EXPAND| wx.ALL,10)#创建一个wx.StaticBox对象

#声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数

nm2 = wx.StaticBox(self.LeftPanel, -1, '请求参数')

nmSizer2=wx.StaticBoxSizer(nm2, wx.VERTICAL)#创建文本域

self.multiText1 = wx.TextCtrl(self.LeftPanel, -1, style=wx.TE_MULTILINE) #创建一个文本控件

self.multiText1.SetInsertionPoint(0) #设置插入点

nmSizer2.Add(self.multiText1, 1, wx.EXPAND | wx.ALL, 10)#在垂直盒子里添加StaticBoxSizer盒子

self.Boxv1.Add(nmSizer2, 1, wx.EXPAND | wx.ALL, 10)#创建一个wx.StaticBox对象

#声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数

nm3 = wx.StaticBox(self.LeftPanel, -1, '请求头')

nmSizer3=wx.StaticBoxSizer(nm3, wx.VERTICAL)#创建文本域

self.multiText2 = wx.TextCtrl(self.LeftPanel, -1, style=wx.TE_MULTILINE) #创建一个文本控件

self.multiText2.SetInsertionPoint(0) #设置插入点

nmSizer3.Add(self.multiText2, 1, wx.EXPAND | wx.ALL, 10)#在垂直盒子里添加StaticBoxSizer盒子

self.Boxv1.Add(nmSizer3, 1, wx.EXPAND | wx.ALL, 10)#把垂直盒子与LeftPanel关联起来

self.LeftPanel.SetSizer(self.Boxv1)defOnClick(self,event):

url=self.input.GetValue()if url != "":

self.multiText3.Clear()

self.multiText4.Clear()

data=self.multiText1.GetValue()

headers=self.multiText2.GetValue()if self.combo1.GetValue() == "GET":

self.get_data(headers, data, url, self.Http.Get)elif self.combo1.GetValue() == "POST":

self.get_data(headers, data, url, self.Http.Post)else:print("功能占位")defget_data(self,headers,data,url,Callback):if data == "" and headers == "":

headers_data, json_data=Callback(url)elif data != "" and headers == "":

data= data.split("\n")

data_list= [i.split(":") for i indata]

headers_data, json_data= Callback(url, data=dict(data_list))elif data == "" and headers != "":

headers= headers.split("\n")

headers_list= [i.split(":") for i inheaders]

headers_data, json_data= Callback(url, header=dict(headers_list))else:

data= data.split("\n")

data_list= [i.split(":") for i indata]

headers= headers.split("\n")

headers_list= [i.split(":") for i inheaders]

headers_data, json_data=Callback(url, dict(data_list), dict(headers_list))for key, value inheaders_data.items():

self.multiText3.write(str(key)+ ":" + str(value) + "\n")for key, value injson_data.items():

self.multiText4.write(str(key)+ ":" + str(value) + "\n")defInit_Center(self):#创建一个wx.StaticBox对象

#声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数

nm1 = wx.StaticBox(self.CenterPanel, -1, '返回头')

nmSizer1=wx.StaticBoxSizer(nm1, wx.VERTICAL)#创建文本域

self.multiText3 = wx.TextCtrl(self.CenterPanel, -1, style=wx.TE_MULTILINE) #创建一个文本控件

self.multiText3.SetInsertionPoint(0) #设置插入点

nmSizer1.Add(self.multiText3, 1, wx.EXPAND | wx.ALL, 10)#在水平盒子里添加StaticBoxSizer盒子

self.Boxh2.Add(nmSizer1, 1, wx.EXPAND | wx.ALL, 10)#创建一个wx.StaticBox对象

#声明一个wx.StaticBoxSizer与创建的wx.StaticBox对象作为其参数

nm2 = wx.StaticBox(self.CenterPanel, -1, '返回内容')

nmSizer2=wx.StaticBoxSizer(nm2, wx.VERTICAL)#创建文本域

self.multiText4 = wx.TextCtrl(self.CenterPanel, -1, style=wx.TE_MULTILINE) #创建一个文本控件

self.multiText4.SetInsertionPoint(0) #设置插入点

nmSizer2.Add(self.multiText4, 1, wx.EXPAND | wx.ALL, 10)#在水平盒子里添加StaticBoxSizer盒子

self.Boxh2.Add(nmSizer2, 1, wx.EXPAND | wx.ALL, 10)#在垂直盒子里添加水平盒子

self.Boxv2.Add(self.Boxh2, 1, wx.EXPAND | wx.ALL, 10)#创建notebook

nb = wx.Notebook(self.CenterPanel, style=wx.NB_FIXEDWIDTH)

page1=PageOne(nb)

page2=PageTwo(nb)

page3=PageThree(nb)#在notebook中添加面板,第一个参数是面板,第二个参数是标签

nb.AddPage(page1, "页面内容")

nb.AddPage(page2,"内容查找")

nb.AddPage(page3,"日志")

self.Boxv2.Add(nb,1, wx.EXPAND | wx.ALL, 10)

self.CenterPanel.SetSizer(self.Boxv2)#本质:创建了三个面板###########################使用说明1######################################

classPageOne(wx.Panel):def __init__(self, parent):

wx.Panel.__init__(self, parent)

colour= [(160, 255, 204), (153, 204, 255), (151, 253, 225), ]

self.SetBackgroundColour(colour[0])

self.tx1= wx.StaticText(self, -1, "页面内容", (355, 45),

(100, -1), wx.ALIGN_CENTER)

font= wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)

self.tx1.SetFont(font)###########################使用说明2######################################

classPageTwo(wx.Panel):def __init__(self, parent):

wx.Panel.__init__(self, parent)

colour= [(160, 255, 204), (153, 204, 255), (151, 253, 225), ]

self.SetBackgroundColour(colour[1])

self.tx2= wx.StaticText(self, -1, "选择检索", (355, 45),

(100, -1), wx.ALIGN_CENTER)

font= wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)

self.tx2.SetFont(font)###########################使用说明3######################################

classPageThree(wx.Panel):def __init__(self, parent):

wx.Panel.__init__(self, parent)

colour= [(160, 255, 204), (153, 204, 255), (151, 253, 225), ]

self.SetBackgroundColour(colour[2])

self.tx3= wx.StaticText(self, -1, "日志", (355, 45),

(100, -1), wx.ALIGN_CENTER)

font= wx.Font(14, wx.SWISS, wx.NORMAL, wx.BOLD)

self.tx3.SetFont(font)

app=wx.App()

Example(None, title='HTTP Tool')

app.MainLoop()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的用 wxPython 实现登录界面界面跳转的示例代码: ```python import wx class LoginPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) self.username_label = wx.StaticText(self, label='Username:', pos=(50, 50)) self.username_text = wx.TextCtrl(self, pos=(150, 50)) self.password_label = wx.StaticText(self, label='Password:', pos=(50, 100)) self.password_text = wx.TextCtrl(self, style=wx.TE_PASSWORD, pos=(150, 100)) self.login_button = wx.Button(self, label='Login', pos=(100, 150)) self.login_button.Bind(wx.EVT_BUTTON, self.on_login) def on_login(self, event): username = self.username_text.GetValue() password = self.password_text.GetValue() if username == 'admin' and password == 'admin': frame.switch_panel(LoginPanel, WelcomePanel) else: wx.MessageBox('Invalid username or password', 'Error', wx.OK | wx.ICON_ERROR) class WelcomePanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) welcome_label = wx.StaticText(self, label='Welcome!', pos=(50, 50)) class MainFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title='Login System', size=(300, 250)) self.Center() self.panel_dict = {} self.login_panel = LoginPanel(self) self.switch_panel(None, LoginPanel) def switch_panel(self, old_panel, new_panel_class): if old_panel: old_panel.Destroy() if new_panel_class in self.panel_dict: new_panel = self.panel_dict[new_panel_class] else: new_panel = new_panel_class(self) self.panel_dict[new_panel_class] = new_panel new_panel.Show() if __name__ == '__main__': app = wx.App() frame = MainFrame() frame.Show() app.MainLoop() ``` 在这个示例中,我们定义了两个面板:登录界面 `LoginPanel` 和欢迎界面 `WelcomePanel`。在登录界面中,我们添加了一个用户名输入框、一个密码输入框和一个登录按钮。当用户点击登录按钮时,我们获取输入的用户名和密码,如果用户名和密码都为 `admin`,则切换到欢迎界面;否则,弹出一个错误提示框。 我们还定义了一个 `MainFrame` 类,它继承自 `wx.Frame`,用于管理面板的切换。在 `MainFrame` 中,我们使用一个字典来保存已经创建的面板实例,这样可以避免重复创建。我们还定义了一个 `switch_panel` 方法,用于切换面板。当需要切换到一个新的面板时,我们先销毁旧面板,然后创建或从字典中获取新面板实例,最后显示新面板。 在 `MainFrame` 的 `__init__` 方法中,我们创建了 `LoginPanel` 面板并显示。在 `LoginPanel` 的 `on_login` 方法中,如果用户名和密码都为 `admin`,则调用 `frame.switch_panel` 方法将当前面板切换到 `WelcomePanel`。 通过这个示例,你可以了解到如何使用 wxPython 实现界面跳转。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值