亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

基于wxPython的GUI實現輸入對話框(2)

 更新時間:2019年02月27日 10:22:27   作者:網海水手  
這篇文章主要為大家詳細介紹了基于wxPython的GUI實現輸入對話框的第二篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下

接著上一篇基于wxPython的GUI輸入對話框1,繼續(xù)學習。

在程序輸入中,有時會要求同時改變多個參數值,而且類型也不盡相同,

這時TextEntryDialog就顯得不適用了.WxInput模塊則比較徹底的解決了這個問題.

比如我有三個值要用戶交互式設置,一個是int數,一個是str,一個是float,先看示例文件:

from WInput import InputBox
values={'int':1,'String':'This is String','float':3.5}
title='Setting values:'
rvalues=InputBox(title,values)
print(rvalues)

顯示GUI如下:

上面的代碼的關鍵是設置字典values的值.

WxInput會自動根據字典values的內容生成輸入界面,

而且返回值的類型確保和原始類型一樣.

再比如程序中有任意兩個參數Method和num要設置,那么如下就可了:

title='Setting values:'
values={'Method':'LogLog','Value':3.5}
rvalues=InputBox(title,values)

生成的界面如下:

WxInput模塊的代碼如下:

#-*- coding:utf-8 -*-
#~ #--------------------------------------------------------------------------------
#~ module:wlab
#~ FileName=WInput.py
#~ Funciton:wx的輸入對話框
#~ author:吳徐平
#~ Date:2013-04-28
#~ Email:539688300@qq.com
#~ #-------------------------------------------------
import wx
import wx.lib.sized_controls as wxsc
#~ #-------------------------------------------------
#~ #set value for widgets( StaticText and TextCtrl) height
wh=30
#~ #set value for max width times
mwt=8
#~ #set value for wh times
wht=3
#~ #-------------------------------------------------
class InputDialog(wxsc.SizedDialog):
 
 def __init__(self,title='Setting values:',values={'int':1,'String':'This is String','float':3.5}):
 '''
 #~ using it as follow:
 #~ dialog = InputDialog(title='Setting values:',values={'int':1,'String':'This is String','float':3.5})
 #~ just for test:
 #~ dialog = InputDialog()
 '''  
 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER
 wxsc.SizedDialog.__init__(self,parent=None, id=-1, title=title, style=style) 
 
 self.originvalues=values.copy()
 self.modifiedvalues=values.copy()
 self.pane = self.GetContentsPane()
 self.pane.SetSizerType("form")
  
 
 maxlen1=mwt*max([len(str(key)) for key in values])
 if maxlen1<wh*wht:
  maxlen1=wh*wht
  
 maxlen2=mwt*max([len(str(values[key])) for key in values])
 if maxlen2<wh*wht:
  maxlen2=wh*wht
  
 for key in self.modifiedvalues:
  keyStr=str(key)
  label=keyStr+' :'
  StaticText = wx.StaticText(parent=self.pane,id=-1,label=label,style=wx.ALIGN_RIGHT)
  StaticText.SetInitialSize((maxlen1,wh))
  value=str(self.modifiedvalues[key])
  TextCtrl = wx.TextCtrl(parent=self.pane, id=-1,value=value)
  TextCtrl.SetInitialSize((maxlen2,wh))
  TextCtrl.SetSizerProps(expand=True)
  #~set a name for TextCtrl,so later we can use wx.FindWindowByName()
  TextCtrl.Name='TC_'+str(keyStr)
  #StaticText.Name='ST_'+str(keyStr)  
  
  
 #~ # add dialog buttons
 self.SetButtonSizer(self.CreateStdDialogButtonSizer(wx.OK | wx.CANCEL))
 
 self.Fit()
 self.Center()
 
 def GetOriginValue(self):
 '''
 #~ if the user select wx.ID_CANCEL,then return originvalues
 '''
 return self.originvalues
 
 def GetValue(self):
 '''
 #~ if the user select wx.ID_OK,then return self.modifiedvalues
 ''' 
 for key in self.modifiedvalues:
  keyStr=str(key)
  TextCtrlName='TC_'+str(keyStr)
  TextCtrl=self.FindWindowByName(TextCtrlName)
  ovk=self.modifiedvalues[key]
  if(type(ovk)==int):
  self.modifiedvalues[key]=int(TextCtrl.GetValue().strip())
  elif(type(ovk)==float):
  self.modifiedvalues[key]=float(TextCtrl.GetValue().strip())
  else:
  self.modifiedvalues[key]=str(TextCtrl.GetValue()) 
  
 return self.modifiedvalues
 
#~ #-------------------------------------------------
def InputBox(title='Setting values',values={'int':1,'String':'This is String','float':3.5}):
 '''
 #~ >>>values={'int':1,'String':'This is String','float':3.5}
 #~ >>>title='Setting values:'
 #~ >>>rvalues=InputBox(title,values)
 #~ >>>print(rvalues):
 '''
 app = wx.PySimpleApp()
 dialog = InputDialog(title=title,values=values)
 if dialog.ShowModal() == wx.ID_OK:
 values= dialog.GetValue()
 else:
 values=dialog.GetOriginValue()
 
 dialog.Destroy()
 app.MainLoop()
 return values
 
##~ #測試InputBox
#if __name__ == '__main__': 
 #values={'int':1,'String':'This is String','float':3.5}
 #title='Setting values'
 #rvalues=InputBox(title,values=values)
 #print(rvalues)
 
##~ #-------------------------------------------------
class InputPanel(wx.Panel):
 def __init__(self,parent,label='Setting values:',values={'int':1,'String':'This is String','float':3.5}):
 '''
 #~ >>>ipl = InputPanel(parent,label='Setting values:',values={'int':1,'String':'This is String','float':3.5})
  #~>>> rvalues=ipl.GetValue(self)
 ''' 
 wx.Panel.__init__(self,parent=parent, id=-1)
 
 self.modifiedvalues=values.copy()
 
 box = wx.StaticBox(self, -1, label=label)
 sbsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
 gridsizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
 
 
 maxlen1=mwt*max([len(str(key)) for key in values])
 if maxlen1<wh*wht:
  maxlen1=wh*3
  
 maxlen2=mwt*max([len(str(values[key])) for key in values])
 if maxlen2<wh*wht:
  maxlen2=wh*wht
  
 for key in self.modifiedvalues:
  keyStr=str(key)
  label=keyStr+' :'
  StaticText = wx.StaticText(parent=self,id=-1,label=label,style=wx.ALIGN_RIGHT)
  StaticText.SetInitialSize((maxlen1,wh))
  gridsizer.Add(StaticText, 0, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 3)
  value=str(self.modifiedvalues[key])
  TextCtrl = wx.TextCtrl(parent=self, id=-1,value=value)
  TextCtrl.SetInitialSize((maxlen2,wh))
  gridsizer.Add(TextCtrl, 0, wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, 3)
  
  #~set a name for TextCtrl,so later we can use wx.FindWindowByName()
  TextCtrl.Name='TC_'+str(keyStr)
 
 sbsizer.Add(gridsizer, 1, wx.EXPAND)
 gridsizer.Layout()
 PanelSizer = wx.BoxSizer(wx.VERTICAL)
 PanelSizer.Add(sbsizer, 0, wx.ALL|wx.EXPAND, 5)
 self.SetSizer(PanelSizer)
 PanelSizer.Layout()
 PanelSizer.Fit(self)
 
 def GetValue(self):
 '''
 #~ return self.modifiedvalues
 ''' 
 for key in self.modifiedvalues:
  keyStr=str(key)
  TextCtrlName='TC_'+str(keyStr)
  TextCtrl=self.FindWindowByName(TextCtrlName)
  ovk=self.modifiedvalues[key]
  if(type(ovk)==int):
  self.modifiedvalues[key]=int(TextCtrl.GetValue().strip())
  elif(type(ovk)==float):
  self.modifiedvalues[key]=float(TextCtrl.GetValue().strip())
  else:
  self.modifiedvalues[key]=str(TextCtrl.GetValue()) 
  
 return self.modifiedvalues 
 
 
##~ #-------------------------------------------------
class InputFrame(wx.Frame):
 def __init__(self,title='InputFrame:',label='Setting values:',values={'int':1,'String':'This is String','float':3.5},size=(400,200)):
 '''
 #~ >>>IFrame = InputFrame(title='InputFrame:',label='Setting values:',values={'int':1,'String':'This is String','float':3.5},size=(400,200)):
  #~>>> rvalues=IFrame.GetValue()
 ''' 
 wx.Frame.__init__(self,parent=None,title = title,size=size) 
 self.modifiedvalues=values.copy()
 self.IPL = InputPanel(self,label=label,values=values)
 #~ #創(chuàng)建FlexGridSizer
 self.FlexGridSizer=wx.FlexGridSizer( rows=9, cols=1, vgap=5,hgap=5)
 self.FlexGridSizer.SetFlexibleDirection(wx.BOTH)
 
 self.RightPanel = wx.Panel(self,-1)
 
 #~ #測試按鈕1
 self.Button1 = wx.Button(self.RightPanel,-1,"TestButton",size=(100,40),pos=(10,10))
 self.Button1.Bind(wx.EVT_BUTTON,self.GetValue)
 #~ #加入Sizer中
 self.FlexGridSizer.Add(self.Button1,proportion =0, border = 5,flag = wx.ALL | wx.EXPAND)
 self.RightPanel.SetSizer(self.FlexGridSizer) 
 self.BoxSizer=wx.BoxSizer(wx.HORIZONTAL) 
 self.BoxSizer.Add(self.IPL,proportion =-10, border = 2,flag = wx.ALL | wx.EXPAND)
 self.BoxSizer.Add(self.RightPanel,proportion =0, border = 2,flag = wx.ALL | wx.EXPAND)
 self.SetSizer(self.BoxSizer) 
 self.Center(wx.BOTH)
 #~ #按鈕事件,用于測試
 def GetValue(self,event):
 self.modifiedvalues=self.IPL.GetValue()
 #~ print(self.modifiedvalues)
 return self.modifiedvalues
 
#~ #主程序測試
def TestInputFrame():
 app = wx.PySimpleApp()
 title='InputFrame:'
 label='Setting values:'
 values={'int':234,'String':'This is String','float':3.5} 
 frame =InputFrame(title,label,values)
 frame.Show()
 app.MainLoop()
 return
 
if __name__ == '__main__':
 app = wx.PySimpleApp()
 title='InputFrame:'
 label='Setting values:'
 values={'int':234,'String':'This is String','float':3.5} 
 frame =InputFrame(title,label,values)
 frame.Show()
 app.MainLoop()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python中random模塊常用方法的使用教程

    Python中random模塊常用方法的使用教程

    這篇文章主要給大家介紹了關于Python中random模塊常用方法的使用教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • pandas中concat函數實現橫向連接

    pandas中concat函數實現橫向連接

    在pandas中,concat函數可用于合并不同的Series和DataFrame對象,本文主要介紹了pandas中concat函數實現橫向連接,具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • python正則表達式實現自動化編程

    python正則表達式實現自動化編程

    這篇文章主要介紹了python正則表達式實現自動化編程,re模塊的compile()方法是構成正則表達式的方法,向compile()傳入一個字符串表示正則表達式,該方法返回一個Regex模式的對象,需要的朋友可以參考下
    2023-01-01
  • Python之re模塊詳解

    Python之re模塊詳解

    這篇文章主要介紹了Python編程之Re模塊下的函數介紹,還是比較不錯的,這里分享給大家,供需要的朋友參考,希望能夠給你帶來幫助
    2021-09-09
  • python使用Berkeley DB數據庫實例

    python使用Berkeley DB數據庫實例

    這篇文章主要介紹了python使用Berkeley DB數據庫的方法,以實例形式講述了完整的操作過程,并總結了具體的操作步驟,非常具有實用性,需要的朋友可以參考下
    2014-09-09
  • python3 將階乘改成函數形式進行調用的操作

    python3 將階乘改成函數形式進行調用的操作

    這篇文章主要介紹了python3 將階乘改成函數形式進行調用的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Python設計模式中的創(chuàng)建型工廠模式

    Python設計模式中的創(chuàng)建型工廠模式

    這篇文章主要介紹了Python設計模式中的創(chuàng)建型工廠模式,工廠模式即Factory?Pattern,是提供創(chuàng)建對象的最佳方式,下文小編介紹Python工廠模式的相關資料,需要的朋友可以參考一下
    2022-02-02
  • python實現發(fā)送帶附件的郵件代碼分享

    python實現發(fā)送帶附件的郵件代碼分享

    在本篇文章里小編給大家整理的是關于python實現發(fā)送帶附件的郵件代碼分享內容,需要的朋友們可以參考下。
    2020-09-09
  • Python 實現簡單的shell sed替換功能(實例講解)

    Python 實現簡單的shell sed替換功能(實例講解)

    下面小編就為大家?guī)硪黄狿ython 實現簡單的shell sed替換功能(實例講解)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Python利用PyAutoGUI輕松搞定圖片上傳

    Python利用PyAutoGUI輕松搞定圖片上傳

    PyAutoGUI作為一個GUI操作的神器,我們看到了它的操作都很簡單,非常通俗易懂,基本上看到函數就能知道它的功效。本文將用它實現圖片上傳功能,感興趣的可以了解一下
    2022-09-09

最新評論