国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - Python光學(xué)仿真wxpython透鏡演示系統(tǒng)初始化與參數(shù)調(diào)節(jié)

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

2022-02-11 23:10微小冷 Python

這篇文章主要為大家介紹了Python光學(xué)仿真wxpython透鏡演示系統(tǒng)的初始化與參數(shù)調(diào)節(jié),同樣在學(xué)習(xí)wxpython透鏡演示系統(tǒng)的入門同學(xué)可以借鑒參考下,希望能夠有所幫助

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

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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()   #計(jì)算
    self.DrawPath() #繪圖

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

分解來(lái)看,首先創(chuàng)建一個(gè)滾動(dòng)條字典

?
1
self.paraSliders = {}

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

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

然后對(duì)于每個(gè)滾動(dòng)條,通過(guò)lambda綁定事件函數(shù):

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

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

最后,將滾動(dòng)條壓入到Boxsizer中。

在其調(diào)用的OnSliderScroll中,首先定義參數(shù)字典,從而確定了不同滾動(dòng)條的滾動(dòng)范圍,通過(guò)mark值,使得參數(shù)和滾動(dòng)條能夠一一對(duì)應(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é)的資料請(qǐng)關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://blog.csdn.net/m0_37816922/article/details/100534642

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品精 | 国产精品久久久久久久午夜 | 国产精品夜间视频香蕉 | 51国产午夜精品免费视频 | 久久久久久久国产精品免费播放 | 欧美激情精品久久久久久 | 成人精品视频99在线观看免费 | 中文字幕一区二区三区乱码图片 | 久久久久国产精品免费免费搜索 | av免费在线观看网站 | 我要看日本黄色小视频 | 国产日韩久久 | 日韩成人av电影 | 高清久久久 | 国产婷婷| 四季久久免费一区二区三区四区 | 一级片黄色大片 | 国产成人精品免费视频 | 国产精品一二区 | 亚洲欧美国产精品专区久久 | av成人在线观看 | 日韩一区中文 | 大白屁股一区二区视频 | 亚洲精品国产精品国自产在线 | 国产成人精品一区二区三区 | 婷婷综合在线 | 毛片大全 | 色婷婷精品久久二区二区蜜臂av | 国产精品精品视频 | 日韩精品一区二区在线观看 | 91无吗| 日韩欧美视频免费观看 | 天堂视频在线 | 久久亚洲欧美日韩精品专区 | 国产精品久久久久久久久久 | 国产免费av在线 | 亚洲精品一 | 自由成熟xxxx色视频 | 久久久久久中文字幕 | 亚洲免费视频一区二区 | 国产成人精品一区二区 |