最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2021年10月19日 14:50:26   作者:微小冷  
這篇文章主要為大家介紹了Python光學(xué)仿真wxpython透鏡演示系統(tǒng)的初始化與參數(shù)調(diào)節(jié),同樣在學(xué)習(xí)wxpython透鏡演示系統(tǒng)的入門同學(xué)可以借鑒參考下,希望能夠有所幫助

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

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

在這里插入圖片描述

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

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

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

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表達(dá)式,使得事件函數(shù)可以傳入兩個參數(shù),也就完成了一次性創(chuàng)建多個控件的目的。

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

 self.paraSliders = {}

其鍵為變量名稱,值則對應(yīng)一個滾動條控件。實(shí)現(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é)的詳細(xì)內(nèi)容,更多關(guān)于wxpython透鏡演示系統(tǒng)初始化與參數(shù)調(diào)節(jié)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 標(biāo)準(zhǔn)庫原理與用法詳解之os.path篇

    python 標(biāo)準(zhǔn)庫原理與用法詳解之os.path篇

    os.path模塊主要用于文件的屬性獲取,在編程中經(jīng)常用到,本文將帶你熟悉這個模塊并掌握它的用法,感興趣的朋友跟小編來看看吧
    2021-10-10
  • TensorFlow保存TensorBoard圖像操作

    TensorFlow保存TensorBoard圖像操作

    這篇文章主要介紹了TensorFlow保存TensorBoard圖像操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python郵件中附加文字、html、圖片、附件實(shí)現(xiàn)方法

    python郵件中附加文字、html、圖片、附件實(shí)現(xiàn)方法

    在本篇文章里小編給大家整理了一篇關(guān)于python郵件中附加文字、html、圖片、附件實(shí)現(xiàn)方法,有興趣的朋友們跟著學(xué)習(xí)下。
    2021-01-01
  • 使用Python開發(fā)一個圖像標(biāo)注與OCR識別工具

    使用Python開發(fā)一個圖像標(biāo)注與OCR識別工具

    這篇文章主要介紹了一個使用Python開發(fā)的工具,允許用戶在圖像上進(jìn)行矩形標(biāo)注,使用 OCR 對標(biāo)注區(qū)域進(jìn)行文本識別,并將結(jié)果保存為 Excel 文件,感興趣的可以了解下
    2025-03-03
  • Python操作mongodb數(shù)據(jù)庫的方法詳解

    Python操作mongodb數(shù)據(jù)庫的方法詳解

    這篇文章主要介紹了Python操作mongodb數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python下載、安裝pymongo及操作MongoDB數(shù)據(jù)庫相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-12-12
  • Python中經(jīng)常使用的代碼片段

    Python中經(jīng)常使用的代碼片段

    大家好,本篇文章主要講的是Python中經(jīng)常使用的代碼片段,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 使用Pandas的ExcelWriter操作excel的方法

    使用Pandas的ExcelWriter操作excel的方法

    這篇文章主要介紹了使用Pandas的ExcelWriter操作excel的方法,ExcelWriter這個插件有個坑,就是已經(jīng)設(shè)置好的格式是無法更改的,因此,由pandas轉(zhuǎn)成excel的時候,必須將格式清除,尤其是表頭的格式需要大家多多注意,本文結(jié)合示例代碼講解的非常詳細(xì),需要的朋友參考下吧
    2023-11-11
  • python檢測服務(wù)器端口代碼實(shí)例

    python檢測服務(wù)器端口代碼實(shí)例

    這篇文章主要介紹了python檢測服務(wù)器端口代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Python計算質(zhì)數(shù)的方法總結(jié)

    Python計算質(zhì)數(shù)的方法總結(jié)

    質(zhì)數(shù)(Prime?Number)是指大于1且只能被1和自身整除的正整數(shù),計算質(zhì)數(shù)是數(shù)論中的一個經(jīng)典問題,本文將介紹python中多種計算質(zhì)數(shù)的方法,希望對大家有所幫助
    2023-11-11
  • 用Python的Django框架來制作一個RSS閱讀器

    用Python的Django框架來制作一個RSS閱讀器

    這篇文章主要介紹了用Python的Django框架來制作一個RSS閱讀器,通過url feeds來制作訂閱類應(yīng)用同樣是Django之所長,需要的朋友可以參考下
    2015-07-07

最新評論

安塞县| 吉木乃县| 大石桥市| 成安县| 盘山县| 丰镇市| 衡阳市| 二连浩特市| 瓦房店市| 九江市| 黄平县| 台东县| 阿克| 安多县| 新绛县| 克山县| 衡南县| 海伦市| 张家川| 攀枝花市| 凤山市| 昭通市| 马尔康县| 汝阳县| 商都县| 普兰县| 屏东市| 鹤峰县| 布尔津县| 东方市| 灵宝市| 巴林左旗| 衡东县| 府谷县| 阳西县| 调兵山市| 广州市| 宁安市| 延川县| 滦平县| 黑龙江省|