五月综合激情婷婷六月,日韩欧美国产一区不卡,他扒开我内裤强吻我下面视频 ,无套内射无矿码免费看黄,天天躁,日日躁,狠狠躁

新聞動態(tài)

Python光學(xué)仿真wxpython透鏡演示系統(tǒng)初始化與參數(shù)調(diào)節(jié)

發(fā)布日期:2021-12-23 08:47 | 文章來源:腳本之家

初始化與參數(shù)調(diào)節(jié)面板

這一節(jié)將繪制出如下圖所示的參數(shù)調(diào)節(jié)面板

對于上圖來說,BoxSizer布局十分傻瓜,所以這里主要有兩個方面需要注意,其一是optisource這兩個選項卡的實現(xiàn),其二則是如何同時創(chuàng)建多個滾動條。

對于前者比較容易,無非是多用一個控件而已,即wx.NoteBook,使用方法乏善可陳,看代碼即可學(xué)會。

對于后者當(dāng)然也可以很容易,只要無腦羅列即可,只不過對于五個不同的參數(shù)就意味著要新建五組滾動條,要就要新建五個控制函數(shù),而這五個控制函數(shù)的功能幾乎是完全一樣的。顯然,這很愚蠢,所以我們采用了如下的辦法對代碼進行精簡。

def InitPanel(self):
 self.drawPanel = wx.Panel(self) #繪圖面板
 #########初始化paraBook
 paraBook = wx.Notebook(self,size=(300,-1))
 optiPanel = wx.Panel(paraBook)
 sourcePanel = wx.Panel(paraBook)
 paraBook.AddPage(optiPanel,'opti')
 paraBook.AddPage(sourcePanel,'source')
 ###需要初始化edge
 self.setEdge()
 ####################optiBox###################
 self.paraSliders = {}
 optiBox = wx.BoxSizer(wx.VERTICAL)
 for key in self.optiDict:
  self.paraSliders[key]=wx.Slider(
optiPanel,minValue=1,maxValue=1000,size=(200,-1))
  self.paraSliders[key].Bind(wx.EVT_SCROLL,
lambda evt,mark=key: self.OnSliderScroll(evt,mark))
  optiBox.Add(self.paraSliders[key],proportion=1,
flag=wx.LEFT|wx.CENTER)
  optiBox.Add(wx.StaticText(optiPanel,size=(120,30),label=key,
style=wx.ALIGN_RIGHT),proportion=1,
flag=wx.ALIGN_CENTER, border=10)
 self.testFlag = wx.TextCtrl(
  optiPanel,size=(250,400),value='hellos',style=wx.TE_MULTILINE)
 optiBox.Add(self.testFlag,proportion=1,
  flag=wx.ALIGN_CENTER|wx.ALL|wx.ALIGN_RIGHT,border=0)
 optiPanel.SetSizer(optiBox)
 ####################sourceBox###################
 sourceBox = wx.BoxSizer(wx.VERTICAL)
 for key in self.sourceDict:
  self.paraSliders[key]=wx.Slider(
sourcePanel,minValue=1,maxValue=1000,size=(200,-1))
  self.paraSliders[key].Bind(wx.EVT_SCROLL,
lambda evt,mark=key: self.OnSliderScroll(evt,mark))
  sourceBox.Add(self.paraSliders[key],proportion=1,
flag=wx.LEFT|wx.CENTER)
  sourceBox.Add(wx.StaticText(sourcePanel,size=(120,30),label=key,
style=wx.ALIGN_RIGHT),proportion=1,
flag=wx.ALIGN_CENTER, border=10)
 sourcePanel.SetSizer(sourceBox)
 mainBox = wx.BoxSizer()
 mainBox.Add(self.drawPanel,proportion=1,flag=wx.ALL|wx.EXPAND,border=10)
 mainBox.Add(paraBook,proportion=0,flag=wx.ALL|wx.EXPAND,border=10)
 self.SetSizer(mainBox)
def OnSliderScroll(self,evt,mark):
 paraArea = {'ySource':[-300,300],'xSource':[0,1000],
 'xPos':[0,1200],'Diameter':[0,500],
 'lFocal':[-1000,1000],'rFocal':[-1000,1000],
 'theta':[0,np.pi*2],'nOpti':[0.1,10]}
 pValue = self.paraSliders[mark].GetValue()
 pMin,pMax=paraArea[mark]
 if mark in self.optiDict:
  self.optiDict[mark] = pMin+(pMax-pMin)/1000*pValue
 elif mark in self.sourceDict:
  self.sourceDict[mark]=pMin+(pMax-pMin)/1000*pValue
 pStr = ''
 for key in self.optiDict:
  pStr += key+':'+str(self.optiDict[key])+'\n'
 self.setEdge()  #設(shè)置光學(xué)元件
 self.getRay()#計算
 self.DrawPath() #繪圖

在上面的代碼中,關(guān)鍵之處在于使用了一個lambda表達式,使得事件函數(shù)可以傳入兩個參數(shù),也就完成了一次性創(chuàng)建多個控件的目的。

分解來看,首先創(chuàng)建一個滾動條字典

 self.paraSliders = {}

其鍵為變量名稱,值則對應(yīng)一個滾動條控件。實現(xiàn)方式為

self.paraSliders[key]=wx.Slider(optiPanel,minValue=1,maxValue=1000,size=(200,-1))

然后對于每個滾動條,通過lambda綁定事件函數(shù):

self.paraSliders[key].Bind(wx.EVT_SCROLL,lambda evt,mark=key: self.OnSliderScroll(evt,mark))

其中,wx.EVT_SCROLL為滾動事件,lambda方法將evt和mark分別傳入到事件函數(shù)self.OnSliderScroll(evt,mark)中,其中mark的值即為當(dāng)前的鍵值。

最后,將滾動條壓入到Boxsizer中。

在其調(diào)用的OnSliderScroll中,首先定義參數(shù)字典,從而確定了不同滾動條的滾動范圍,通過mark值,使得參數(shù)和滾動條能夠一一對應(yīng)。然后然后設(shè)置成員變量self.optiDict以及self.sourceDict。

以上就是Python光學(xué)仿真wxpython透鏡演示系統(tǒng)初始化與參數(shù)調(diào)節(jié)的詳細內(nèi)容,更多關(guān)于wxpython透鏡演示系統(tǒng)初始化與參數(shù)調(diào)節(jié)的資料請關(guān)注本站其它相關(guān)文章!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部