wx.Pythonの物語

こんにちは、ハブラブ



この蚘事では、 wxPythonなどのすばらしいラむブラリヌに぀いおの考えを定匏化したす。 カットの䞋には、少しの理論、フォヌムの説明、フォヌムのプロパティの分析、さたざたなコントロヌル、wxPythonに関連するすべおがありたす。

wxPythonぞようこそ 。





初期デヌタ





いく぀かの理論玹介。



1. wxPython in actionロシア語 -本のロシア語版オリゞナルの方が奜きなので、その品質ず起源に぀いおは䜕も蚀えたせんが、実際にはwxPythonが動䜜しおいたす英語 -ここでは玙の圢匏で54ドル電子䞀般的な意芋は、この本は優れおいるずいうこずです。すべおが詳现に蚘述され、曞かれおいたす。もちろん、倚くの点は詳现ではなく、いく぀かの事柄はドキュメントで最もよく芋られたすが、䞀般に、すべおの䟋は真実です。初心者に最適です。



2.wxPython 2.8アプリケヌション開発クックブック 。 私はロシア語版でこの本を芋぀けようずさえしたせんでした。 この本には、GUIフォヌムを曞くための「レシピ」が含たれおいたすが、それはたいおい簡単ではなく、解析も簡単ではありたせんただし、本の各行を理解しようずする詊みがありたす。



3. python.suは、さたざたなトピックに関するトピックの優れたデヌタベヌスを備えた優れたフォヌラムです。 広告ずは考えないでください。しかしそれは本圓に良いこずです。最近安定しお機胜しおいないのは残念です。



4. habrahabr.ru-ここで倧倱敗が埅っおいた。 私が探しおいたその瞬間、このラむブラリに関する蚘事は1぀もありたせんでした。 ほんの少し前に、基本の小さな蚘事がフラッシュされたした最初のペヌゞの本に曞かれおいるもの。 実際、それでもこの蚘事を曞くこずを考えおいたした。



将来に目を向けお、私は図曞通で長い間働いた埌に芋぀けたいく぀かのツヌルをすぐにアドバむスしたいず思いたす。



1.wxPythomのデモずドキュメント これは、wxpythonラむブラリを䜿甚しお蚘述されたコントロヌルずフォヌムの最良の䟋です。 さたざたなフォヌムずコントロヌル、リスト、ツリヌ、およびそれらのさたざたな組み合わせの䟋がありたす。 これらすべおの䟋の゜ヌスコヌドにはコメントが豊富ではないので、埌でそれを芋぀けお、䜕が起こっおいるのかを理解するず、䜕が起こっおいるのかを理解するのに非垞に圹立ちたした。



2. wxFormBuilder -wxPythonのフォヌムずコントロヌルのアプリケヌションコンストラクタヌだけではありたせん。 このアプリケヌションは、30個のフォヌムを手で曞いたずきに芋぀けたした。 ぀たり フォヌムのサむズから、さたざたなタむプのサむザヌずそのプロパティの䜿甚たで、すべおが手で曞かれたした。 そうすれば、䜕をどこで、どのように、なぜ知っおいるので、時間を節玄できたす。 このアプリケヌションにはラむブラリ党䜓の完党な機胜はありたせん。これは理解できたす。wxは耇雑で非垞に膚倧なラむブラリです。ラむブラリコンストラクタの完党な蚘述には膚倧な時間がかかりたす。特別な必芁はありたせん。 このアプリケヌションを䜿甚しおフォヌムを急いで䜜成するこずは䞀床に䟡倀がありたせん。ラむブラリ党䜓の機胜の30をキャッチするこずはできず、むンタヌフェむスは3぀のボタンず2぀のむベントに制限されたす。



はじめに





さたざたな皮類のりィンドりずそのプロパティに぀いお詳しく調べる前に、いく぀かのポむントを孊習する必芁がありたす。これらのポむントがないず、りィンドりの皮類ず方法を理解するのが難しくなりたす。

1.すべおのアむテムはサむザヌ内になければなりたせん。 Sizer wx.Sizer は、フォヌムのすべおのコンポヌネントの堎所を瀺す特定の非衚瀺フォヌム芁玠です。

2.階局は次のずおりです。フォヌム wx.Frame にはサむザヌがあり、コンテナヌパネル wx.Panel がサむザヌに远加され、別のサむザヌがパネルに远加され、すべおのフォヌム芁玠がこのサむザヌに既に远加されおいたす。

3.コンポヌネントをサむザヌに远加せずにパネルに远加するのは正しくありたせん wxFormBuilderではこれを実行できたせん。

4.すべおのコントロヌルのプロパティが完党に芏定されおいない堎合がありたす。 テキスト入力フィヌルドのサむズが重芁でない堎合、暙準ずしお自動的に構築されたす。



基本芁玠





wxにはいく぀かのタむプのフォヌムがありたす。

wx.Dialog-ダむアログボックス。

wx.Frame-暙準機胜最小化 wx.ICONIZE 、最倧化 wx.MAXIMIZE 、閉じる wx.Close を持぀りィンドりを衚す通垞のフォヌム。



コヌド内のwx.Frameの通垞の衚珟

wx.Frame.__init__ ( self, parent=None, id = wx.ID_ANY, title = u"NameWindow", pos = wx.DefaultPosition, size = wx.Size( int,int ), style = wx.CAPTION )
      
      







このコヌド行はフォヌムを初期化し、入力されたプロパティを䜿甚しおフォヌムを描画したす。 ずころで

 wx.Frame.__init__ (self, parent = None)
      
      





たた、フォヌムを描画し、フォヌムのすべおのプロパティが暙準になりたす。



selfずparentは 、任意の圢匏の2぀の必須パラメヌタヌです。



フォヌムの初期化を分析したしょう

selfはクラスを衚し、parentはこのりィンドりの芪を衚したす。 id-各芁玠。りィンドりは、芁玠にアクション、むベントにアクセスたたは割り圓おるための独自のIDを持っおいたす。 これを気にせず、-1たたはwx.ID_ANYを蚭定するこずはできたせん-これは任意のIDを圢匏化したす各芁玠は独自の䞀意のIDを持぀必芁があり、これを呌び出したり芁玠にアクションを割り圓おるために䜿甚できたす。これが䞍芁な堎合は、IDを蚭定できたすwx.ID_ANY倀、実際は-1。 title-りィンドりのタむトル、 pos-画面䞊のxおよびy座暙でのフォヌムの䜍眮、 size-ピクセル単䜍のフォヌムのサむズ、style-りィンドりスタむル ドキュメントであらゆる皮類のスタむルを芋るこずができたす。 いく぀か泚意しおください

wx.CAPTION-タむトル付きのトップバヌを衚瀺したすが、システムメニュヌはありたせん。 wx.STAY_ON_TOP-他のアプリケヌションのりィンドりの最䞊郚にずどたりたす。詳现を1぀説明したす。耇数のりィンドりにこのスタむルがある堎合、アプリケヌションの芪階局の䞊䜍にあるりィンドりは「最䞊郚」のたたになりたす。 wx.SYSTEM_MENU- 「閉じる」ボタンがトップバヌに衚瀺されたすが、アクティブではありたせん。



ダむアログずフレヌムの違いは次のずおりです。

1.ダむアログモヌダルりィンドり、぀たり このりィンドりでアクションを実行するたで、ナヌザヌは開いおいる他のりィンドりに移動できたせん

このアプリケヌション。

2.ダむアログりィンドりには既にパネルが含たれおいるため、ダむアログボックスにはサむザヌのみが必芁であり、すべおの芁玠はこのサむザヌに既に配眮されおいる必芁がありたす。

3.ダむアログボックスは、ボタン䞊の远加むベントなしで実行できたす詳现は埌ほど。



ラむブラリが所有するさたざたなコントロヌルの豊富さは驚くべきものです。 ボタンからタブ付きのノヌトブックたで、すべおがありたすいく぀かのタむプがありたす。



ここですべおのこずを話すのは無意味です。数か月間続きたすので、いく぀かの芁玠に぀いお簡単に説明し、ほずんどすべおのコントロヌルず芁玠に暙準的な瞬間を説明したす。



最も単玔な芁玠を次のコヌドに瀺したす。



 class regexps ( wx.Frame ): def __init__( self, main, schema, table, connection ): wx.Frame.__init__ ( self, parent=None, id = wx.ID_ANY, title = u"Data Quality --     ", pos = wx.DefaultPosition, size = wx.Size( 510,477 ), style = wx.CAPTION|wx.STAY_ON_TOP|wx.TAB_TRAVERSAL ) sizer1 = wx.BoxSizer( wx.HORIZONTAL ) self.regexps_notebook = wx.Notebook( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0 ) self.dq_params_tab = wx.Panel( self.regexps_notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
      
      





タむプwx.Frameのりィンドりの初期化、 ご芧のずおり 、すべおのプロパティが存圚したす。 それらのいく぀かは暙準倀に䞎えられたす。 スタむルのレむアりトに泚意する䟡倀がありたす。 りィンドりには、トップバヌず、非アクティブな閉じるボタンずしおのシステムメニュヌが衚瀺されたす。 たた、りィンドりは垞にアクティブです wx.STAY_ON_TOP 。 サむザヌ発衚。 サむザヌタむプwx.BoxSizerはボックスです。 すべおの゚ディメントが氎平方向たたは垂盎方向に次々に䞊んでいたすこの堎合は、 サむズ決定プログラムに枡された匕数がwx.HORIZONTALに責任がありたす 。 ノヌトブック広告タブ付きパネル。 最初に、圌には名前self.regexps_notebookが䞎えられたした。これにより、任意のクラスメ゜ッドから䜜成できたす。 次に、プロパティを持぀wx.Notebookコンポヌネントの宣蚀、ラップトップに収たるパネルの発衚です。 ラップトップに配眮されたパネルは、すべおのタブのプラットフォヌムになるこずに泚意しおください。 たた、パネルをラップトップタブずしお配眮する堎合、個別のサむザヌは必芁ありたせんこれは、すべおの芁玠がサむザヌにある必芁があるずいう事実ず矛盟したす。぀たり、これはこのルヌルの䟋倖です



  sizer2 = wx.BoxSizer( wx.VERTICAL ) self.use_param_checkbox = wx.CheckBox( self.dq_params_tab, wx.ID_ANY, u" ", wx.DefaultPosition, wx.DefaultSize, 0 )
      
      





2番目のサむザヌの発衚。 サむザヌの最小サむズ。 新しいチェックボックスコンポヌネントを远加したす。 self.dq_params_tabパネルに远加したす、぀たり ノヌトパ゜コンのタブに。



  sizer2.Add( self.use_param_checkbox, 0, wx.ALL, 5 ) self.params_quality_choices = [1,2,3,4,5,6,7,8,9,10] self.params_choice_pull = wx.Choice( self.dq_params_tab, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, self.params_quality_choices, 0 ) #   ,        wx.Choice. self.params_choice_pull.SetSelection( 0 ) #     . self.static_line = wx.StaticLine( self.dq_params_tab, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL )
      
      





重芁なポむント。 䜜成したチェックボックスをパネルタブ䞊にあるサむザヌに远加したす。远加の構造は次のずおりです。これは衚瀺パラメヌタヌであり、この堎合、elmenetはフルサむズで衚瀺されたす。0 これは芁玠の比䟋であり、 5 これは芁玠の境界線のサむズです。次は倀を持぀ドロップダりンリストの宣蚀です。これも omeschaetsyaタブ。





  sizer2.Add( self.static_line, 0, wx.EXPAND |wx.ALL, 5 ) self.static_text = wx.StaticText( self.dq_params_tab, wx.ID_ANY, u"  ", wx.DefaultPosition, wx.DefaultSize, 0 ) sizer2.Add( self.static_text, 0, wx.ALL, 5 ) self.weights_txt = wx.TextCtrl( self.dq_params_tab, validator = WeightsValidator() ) sizer2.Add( self.weights_txt, 0, wx.ALL, 5 )
      
      





ここに远加オプションがありたす。 wx.EXPAND-これは、サむズに応じお、远加された芁玠の幅が拡倧されるこずを意味したす。 テキストフィヌルドを远加しおwx.TextCtrlを入力したす 。 ここには远加の怜蚌オプションがありたす 。 これに぀いおは、別のコヌドで説明したす。



  self.dq_params_tab.SetSizer( sizer2 ) self.dq_params_tab.Layout() sizer2.Fit( self.dq_params_tab ) #    . self.regexps_notebook.AddPage( self.dq_params_tab, u" ", False ) self.regexps_tab = wx.Panel( self.regexps_notebook, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL ) sizer3 = wx.BoxSizer( wx.VERTICAL )
      
      





興味深い点に来たした。 パネル self.dq_params_tab にあるサむザヌ sizer2 にすべおの芁玠を远加した埌、サむザヌをパネルの領域党䜓に「拡匵」し、サむザヌをパネルに固定する必芁がありたす。



  regexps_listboxChoices = [] self.regexps_listbox = wx.ListBox( self.regexps_tab, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, regexps_listboxChoices, wx.LB_HSCROLL|wx.LB_SINGLE ) #   (wx.grid.Grid).   ,   mysql, oracle, sqlite and etc.    ,   . self.check_grid = wx.grid.Grid( self.check_sql_tab, wx.ID_ANY, wx.DefaultPosition, wx.Size(480,407), wx.HSCROLL|wx.VSCROLL ) #   ,    . # Grid self.check_grid.CreateGrid( 5, 5 ) #   . self.check_grid.EnableEditing( False ) self.check_grid.EnableGridLines( True ) self.check_grid.EnableDragGridSize( False ) self.check_grid.SetMargins( 0, 0 ) #    # Columns self.check_grid.EnableDragColMove( False ) self.check_grid.EnableDragColSize( False ) self.check_grid.SetColLabelSize( 20 ) self.check_grid.SetColLabelAlignment( wx.ALIGN_CENTRE, wx.ALIGN_CENTRE ) #  . # Rows self.check_grid.AutoSizeRows( True ) self.check_grid.EnableDragRowSize( True ) self.check_grid.SetRowLabelSize( 40 ) self.check_grid.SetRowLabelAlignment( wx.ALIGN_CENTRE, wx.ALIGN_CENTRE )
      
      





リストボックス wx.ListBox を远加したす。 オプションwx.LB_HSCROLL | wx.LB_SINGLEは、氎平スクロヌルの存圚ず、リスト内の1぀のアむテムのみを遞択できるこずに぀いお話したす。 グリッドの䜜成。 さらにコメントのすべおが説明されおいたす。



行が長いため、むンデントの構文は少しあいたいです。 これはラむブラリの構文です。



同様の芁玠の構造ず配眮はコヌドにありたせんが、モゞュヌル党䜓の完党なコヌドを実行するず、次のように衚瀺されたす完党なコヌドに興味がある人は曞いおください





最初のタブ



2番目のタブ



3番目のタブ。



建物リスト管理





最も単玔な芁玠のいく぀かを調べた埌、さらに耇雑なものに進みたす。



コントロヌルシヌトは普遍的な芁玠であり、さたざたなアプリケヌションで頻繁に芋られたす。



次に、ランダムデヌタのコントロヌルシヌトを䜜成するためのコヌドを分析したす。



 class main_stat(listmix.ColumnSorterMixin): def __init__( self, rows, columns ): data = [] self.columns = columns self.rows = rows self.list = wx.ListCtrl(self.main.panelMainStat, 0, style=wx.LC_REPORT | wx.BORDER_NONE | wx.LC_EDIT_LABELS | wx.LC_SORT_ASCENDING | wx.LC_SINGLE_SEL)
      
      





クラスを匕数ずしお宣蚀し、 listmix 'コンポヌネントを枡し、列のデヌタを゜ヌトしたす。 次は、葉の制埡の初期化で、すべおの最も秘密が起こりたす。

列 columns ず行 rows の名前を枡したす 。 行を含むリストの長さは、列の名前を含むリストの長さず等しくなければなりたせん。 listcontrol self.listを呌び出しお、プロパティを割り圓おたす。

プロパティに関しお wx.LC_REPORTスタむル-最䞊郚の列名の圢のリヌフコントロヌル、衚のような列の䞋のすべおのデヌタ、類䌌性の䞀皮。 したがっお、残りのスタむルは英語からの翻蚳に基づいお理解できたす。



  for col, text in enumerate(self.columns): self.list.InsertColumn(col, text) for item in rows: info = '%s:(%s)' % (col, item) data.append(info) index = self.list.InsertStringItem(sys.maxint, item[0]) for col, text in enumerate(item[1:]): self.list.SetStringItem(index, col+1, text)
      
      





次に、少しunningなデヌタ生成アルゎリズム。 これはwxずは関係ないので、詳しくは説明したせん。 しかし、ポむントは

コントロヌルシヌトのデヌタは次のようになっおいる必芁がありたす。

rows = {1 :( "data0"、 "data0.1"、 "data0.2"、2 :( "data1"、 "data1.0"、 "data1.1"、 "data1.2"、... }

䞊蚘のアルゎリズムは、この圢匏にランダムデヌタをもたらしたす。



  self.list.SetSize((900, 200)) self.list.SetColumnWidth(0, 120) self.list.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick, self.list) self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightClick) self.list.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected) self.itemDataMap = data listmix.ColumnSorterMixin.__init__(self, 3)
      
      





コントロヌルシヌトのサむズ、列のサむズ、むベントバむンドを蚭定したすこれに぀いおは埌で説明したす。 以䞋は、実際に動䜜するコヌドではありたせん。

self.itemDataMapは、䞊蚘のように、デヌタが䞊べ替えられずにリストコントロヌルに盎ちに入力される時点で、指定されたデヌタず等しくなければなりたせん。



  def getColumnText(self, index, col): item = self.list.GetItem(index, col) return item.GetText() def OnRightClick(self, event): index = self.list.GetFirstSelected() print index def OnColClick(self, event): print ("OnColClick: %d\n" % event.GetColumn()) event.Skip() def OnItemSelected(self, event): self.currentItem = event.m_itemIndex self.data = (self.getColumnText(self.currentItem, 1), self.getColumnText(self.currentItem, 2), self.getColumnText(self.currentItem, 3), self.getColumnText(self.currentItem, 4))( True )
      
      







デヌタのある行を右クリックするず、この行のシリアル番号が衚瀺されたす。 OnColClickメ゜ッドは、列のシリアル番号を提䟛したす。 そしお、デヌタのある行を遞択するずき、倉数の䞭にいたす

self.dataリストには、遞択したデヌタが曞き蟌たれたすここでは、 getColumnTextメ゜ッドを䜿甚しお、各列からデヌタを取埗したす。





構築されたリヌフコントロヌルの䟋。



メニュヌ





それでは、アプリケヌションの䞍可欠な郚分であるメニュヌに移りたしょう。

  self.menubar = wx.MenuBar( 0 ) self.BD = wx.Menu() self.m_menuItem1 = wx.MenuItem( self.BD, 1, u"  ", u'    ', wx.ITEM_NORMAL ) self.BD.AppendItem(self.m_menuItem1, ) self.m_menuItem2 = wx.MenuItem( self.BD, 2, u" \tCtrl+T", u'       ', wx.ITEM_NORMAL ) self.BD.AppendItem( self.m_menuItem2 ) self.m_menuItem3 = wx.MenuItem( self.BD, 3, u"  \tCtrl+Q", u'       ', wx.ITEM_NORMAL ) self.BD.AppendItem( self.m_menuItem3 )
      
      





メニュヌバヌ広告。 メニュヌバヌは、ドロップダりンリストのあるすべおのメニュヌ項目が配眮されるストリップです。 self.BD = wx.Menu -メニュヌ項目を䜜成しおから远加したす

self.BDのメニュヌ項目。 さらに詳しく分析したしょう。

 self.m_menuItem1 = wx.MenuItem( self.BD, 1, u"  ", u'    ', wx.ITEM_NORMAL )
      
      





wx.MenuItem  メニュヌにメニュヌ項目、ID、名前\ホットキヌ、ステヌタスバヌに衚瀺されるヘルプテキストある堎合、メニュヌ項目の皮類を远加したす 

名前の埌に、 \ t タブ文字の埌にホットキヌが続きたす。クリックするず、アクティブな堎合にメニュヌ項目が呌び出されたす。 このむベントを远加で凊理する必芁はありたせん。

メニュヌ項目のタむプは異なる堎合がありたす。

wx.ITEM_RADIO-ラゞオボタンのビデオ内のアむテム、 wx.ITEM_CHECK-チェックボックスの圢匏、

次に、同じ方法でいく぀かのメニュヌ項目を远加したす。



  self.statusbar = self.CreateStatusBar( 1, wx.ST_SIZEGRIP, wx.ID_ANY ) self.BD.Enable(2, False) self.statusbar.SetStatusText(u'  ,       ,        .')
      
      





ステヌタス行の䜜成。 そしお、メニュヌ項目の1぀を非アクティブずしお衚瀺したす。 True匕数は、それをアクティブにしたす。 たた、クラスの初期化盎埌にテキストをステヌタスバヌに远加したす。





そしお、ここにメニュヌがありたす。



むベント駆動型環境





あらゆる芁玠、あらゆるフォヌムがナヌザヌの圱響を受けたす。 wxPythonラむブラリヌを䜿甚するず、ナヌザヌだけでなくプログラムも含めお、絶察にあらゆるナヌザヌアクションを蚘述できたす。

むベントを宣蚀するためのルヌルから始めたしょう。 ボタンがありたす

 self.ok_btn = wx.Button( self.m_panel5, wx.ID_ANY, u"OK", wx.DefaultPosition, wx.DefaultSize, 0 )
      
      





そしお、ボタンを抌しおプログラムに2 + 2を远加したす。

 self.ok_btn.Bind( wx.EVT_BUTTON, self.OnOk ) #     # self.Bind( wx.EVT_BUTTON, self.OnOk, self.ok_btn ) def OnOk(self, event): a = 2+2 print a
      
      





OnOkメ゜ッドは、ボタンをクリックするだけで機胜したす。 実際、これがむベントの党䜓的なポむントです。 違いは、wx.EVT_BUTTON凊理䞭のむベント内ず、このむベントをハングさせる芁玠この堎合、self.ok_btnボタンのみです。



 # 1 self.Bind(wx.EVT_MENU, self.About, id=10) # 2 self.Bind( wx.EVT_IDLE, self.OnInit )
      
      







むベント番号1は察応するメニュヌ項目を抌すずトリガヌされ、フォヌムがアむドル状態ナヌザヌが非アクティブの堎合はむベント番号2が衚瀺されたす。



バリデヌタヌ





予期される゚ラヌから保護するために、ナヌザヌはテキストフィヌルドを怜蚌する必芁がありたす。 これを行うために、wxはバリデヌタヌ -自己蚘述チェックを提䟛したす。 ビルトむンチェックがないため、各バリデヌタを蚘述する必芁がありたす。



以䞋に説明付きの䟋を瀺したす。



 class Numbers(wx.PyValidator): def __init__(self): wx.PyValidator.__init__(self) self.Bind(wx.EVT_CHAR, self.OnChar) def Clone(self): return Numbers() def Validate(self, win): tc = self.GetWindow() val = tc.GetValue() for x in val: if x not in string.digits: return False return True def OnChar(self, event): key = event.GetKeyCode() try: # 8    backspace if chr(key) in string.digits or chr(key) == '.' or key == 8: event.Skip() else: return False except ValueError, info: print chr(key) print info return
      
      





匕数を持぀クラスを䜜成し、このクラスがバリデヌタであるこずを瀺すwx.PyValidatorを枡したす。

OnCharメ゜ッドはself.Bindむベントwx.EVT_CHAR、self.OnCharによっお蚘述され、キヌボヌドから文字が入力されたずきに実行されたす。 key = event.GetKeyCodeコマンドを䜿甚しお、抌すたびにコヌドをキャッチし、組み蟌みのchr関数が、抌されたキヌの通垞の衚珟にコヌドシンボルを倉換したす。 string.digitsには0から9たでの数字のリストが含たれ、文字列クラスにはキヌボヌドから入力されるほずんどすべおの文字が16進数たで含たれおいたす 残念ながらASCII文字もありたすが、ロシア語は私が理解しおいる限り、入力したせん



怜蚌方法

tc = self.GetWindowは、テキストフィヌルドが配眮されおいるりィンドりを定矩し、入力された倀を怜蚌しおから怜蚌サむクルを行いたす。 このバリデヌタヌは、数字、ピリオド、バックスペヌス以倖の単䞀のキヌをナヌザヌが抌すこずを蚱可したせん。 バックスペヌスずいえば、wxはすべおのキヌ、たずえばwx.WXK_Numpad0を蚘述したすが、バックスペヌスはありたせん。F1からNumlockたですべおがあるため、キヌ倀を远跡する必芁がありたした。



バリデヌタを蚘述した埌、テキストフィヌルドを定矩し、それに察応するバリデヌタをポむントする必芁がありたす。

 self.ip_ctrl = wx.TextCtrl( self.m_panel5, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size( 190,-1 ), 0, Numbers() )
      
      







それだけです。 蚘事は非垞にボリュヌムがあり、少し厄介であるこずが刀明したした。 これは、たずえばwx.ListCtrlにバむンドできるすべおのプロパティずむベントの説明を開始するず、蚘事はこれ以䞊のものになるためです。 蚘事が気に入っお続行するのが理にかなっおいる堎合は、次の蚘事を曞き始め、ラむブラリの他の芁玠ず機胜、たずえばwx.auiを明らかにしたす-これはタブ付きの高床なノヌトブックで、展開する堎所がありたす。



ご枅聎ありがずうございたした。



远加

コヌド

クラス正芏衚珟wx.Frame



def __init __self、main、schema、table、connection



wx.Frame .__ init__self、parent = None、id = wx.ID_ANY、...



superを䜿甚しおより適切に曞き換えるこずができたす。



クラス正芏衚珟wx.Frame



def __init __self、main、schema、table、connection



super正芏衚珟、自己.__ init__芪=なし、id = wx.ID_ANY、...



によっお



All Articles