Pythonの例の説明-wxpythonの基本的なコントロール(ボタン)



Python Example Explanation Wxpython Basic Controls



ボタンの操作

inwxPythonには、さまざまな種類のボタンがあります。このセクションでは、テキストボタン、ビットマップボタン、スイッチボタン(トグルボタン)および汎用(汎用)ボタンについて説明します。

ボタンを生成する方法は?

最初のパート(パートIn 1)では、ボタンの例をいくつか示したので、ここではいくつかの基本事項について簡単に説明します。図7.4は、単純なボタンを示しています。



図7.4

w7.4.gif



ボタンの使い方はとても簡単です。例7.4は、この単純なボタンのコードを示しています。

import wx class ButtonFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Button Example', size=(300, 100)) panel = wx.Panel(self, -1) self.button = wx.Button(panel, -1, 'Hello', pos=(50, 20)) self.Bind(wx.EVT_BUTTON, self.OnClick, self.button) self.button.SetDefault() def OnClick(self, event): self.button.SetLabel('Clicked') if __name__ == '__main__': app = wx.PySimpleApp() frame = ButtonFrame() frame.Show() app.MainLoop()

wx.Buttonのコンストラクターは、次のように、これまで見てきたものと似ています。

wx.Button(parent、id、label、pos、size = wxDefaultSize、style = 0、validator、name = 'button')



parameterlabelは、ボタンに表示されるテキストです。プログラムの実行中にSetLabel()を使用して変更し、GetLabel()を使用して取得できます。他の2つの便利なメソッドはGetDefaultSize()とSetDefault()です。GetDefaultSize()はシステムのデフォルトボタンのサイズを返します(フレーム間の一貫性に役立ちます)SetDefault()ボタンをダイアログまたはフレームのデフォルトボタンに設定します。デフォルトのボタンは、他のボタンとは異なる方法で描画されます。これらのボタンは、通常、ダイアログボックスにフォーカスが移動したときに、通常はEnterキーを押してアクティブになります。

wx.Buttonクラスには、クロスプラットフォームスタイルのタグ:wx.BU_EXACTFITがあります。このフラグが定義されている場合、ボタンはシステムのデフォルトサイズを最小サイズとしてではなく、ラベルを埋めることができるサイズを最小サイズとして使用します。ローカルウィジェットがit.wx.BU_LEFT、wx.BU_RIGHT、wx.BU_TOP、およびwx.BU_BOTTOMをサポートしている場合は、タグを使用してボタンのラベルの配置を変更できます。各マークは、タグの名前に基づいてわかるエッジにラベルを揃えます。最初の部分で説明したように、wx.Buttonはタップされるとコマンドイベントをトリガーします。イベントタイプはEVT_BUTTONです。

ビットマップボタンを生成する方法は?

図7.5に示すように、テキストラベルの代わりに画像をボタンに表示したい場合があります。

w7.5.gif

inwxPythonでは、classwx.BitmapButtonを使用してビットマップボタンを作成します。 onewx.BitmapButtonの処理のコードは汎用ボタンのコードと非常によく似ており、例7.5は7.5を生成するコードを示しています。

例7.5 ビットマップボタンを作成する

import wx class BitmapButtonFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Bitmap Button Example', size=(200, 150)) panel = wx.Panel(self, -1) bmp = wx.Image('bitmap.bmp', wx.BITMAP_TYPE_BMP).ConvertToBitmap() self.button = wx.BitmapButton(panel, -1, bmp, pos=(10, 20)) self.Bind(wx.EVT_BUTTON, self.OnClick, self.button) self.button.SetDefault() self.button2 = wx.BitmapButton(panel, -1, bmp, pos=(100, 20), style=0) self.Bind(wx.EVT_BUTTON, self.OnClick, self.button2) def OnClick(self, event): self.Destroy() if __name__ == '__main__': app = wx.PySimpleApp() frame = BitmapButtonFrame() frame.Show() app.MainLoop()

通常のボタンとの主な違いは、ラベルの代わりにビットマップを提供する必要があることです。それ以外の点では、コンストラクターとほとんどのコードはテキストボタンの例と同じです。ビットマップボタンは、tappedEVT_BUTTONイベントのときにも生成されます。

ビットマップボタンにはいくつかの興味深い機能があります。まず、デフォルトのスタイルtagwx.BU_AUTODRAWです。マーカーがオンの場合、ビットマップには3D境界線があり、テキストボタン(図7.5の左側のボタン)のように見え、ボタンは元のマップよりも数ピクセル大きくなります。フラグがオフの場合、ビットマップは境界線のないボタンとして単純に描画されます。 style = 0を設定すると、図7.5の右側のボタンでデフォルト設定がオフになり、3D効果はありません。

デフォルトでは、givewxPythonは単一のビットマップをメインディスプレイのビットマップとして渡します。ボタンが押されたとき、フォーカスを取得したとき、または無効な場合、wxPythonは、自律ディスプレイから派生したビットマップの標準ビットマップを、表示されるビットマップとして自動的に作成します。このときボタンに。自動的に作成されたビットマップが必要なものでない場合は、次のメソッドを使用できます:SetBitmapDisabled()、SetBitmapFocus()、SetBitmapLabel()、およびSetBitmap -Selected()は、使用するビットマップを明示的にwxPythonに指示します。これらのメソッドはすべて、パラメーターとしてonewx.Bitmapオブジェクトを必要とし、対応するget *()メソッドがあります。

standardwxWidgets C ++ライブラリを使用してビットマップとテキストをマージすることはできません。テキストを含むビットマップを作成できます。ただし、一般的なボタンの問題の説明でわかるように、wxPythonこのマージ動作を実装する方法は他にもあります。

===スイッチボタン(トグルボタン)の作り方?===

wx.ToggleButtonを使用すると、切り替えボタン(toggle button)が作成されます。 Switch buttontoggle button)は、テキストボタンによく似ていますが、チェックボックスのように動作し、選択状態または非選択状態が視覚的に表示されます。つまり、スイッチボタン(トグルボタンWhen)を押すと、もう一度押すまで押されたままになります。

inwx.ToggleButtonと親classwx.Buttonの違いは2つだけです。

1.タップされると、wx.ToggleButtonはoneEVT_TOGGLEBUTTONイベントを送信します。

2、wx.ToggleButton GetValue()およびSetValue()ボタンのバイナリ状態を処理するメソッド。

switch buttontoggle button)は便利です。これは、特にツールバーのチェックボックスに関連するもう1つの良い選択です。 wxWidgetsを使用して、スイッチボタン(トグルボタン)をビットマップボタンとマージするオブジェクトを提供することはできませんが、wxPythonには、この動作を提供する汎用ボタンクラスがあります。これについては、次のセクションで説明します。

一般的なボタンとは何ですか、なぜそれを使用する必要がありますか?

ユニバーサルボタンは完全なusePythonですローカルシステムウィジェットの使用を回避する再実装されたボタンウィジェット。その親クラスiswx.lib.buttons。 GenButton。ユニバーサルボタンには、ユニバーサルビットマップとトグルボタンがあります。

汎用ボタンを使用する理由は次のとおりです。

1.ユニバーサルボタンは、ローカルボタンよりもクロスプラットフォームの外観が優れています。一方、汎用ボタンは、特定のシステムのローカルボタンとは少し異なって見える場合があります。

2、ユニバーサルボタンを使用すると、外観をより細かく制御でき、3Dベベルの幅や色などのプロパティを変更できます。これはローカルコントロールでは許可されていない場合があります。

3、ユニバーサルボタンクラスは機能のマージを可能にし、wxWidgetボタンは機能しません。 GenBitmapTextButtonなどは、テキストラベルとビットマップの組み合わせを許可し、GenBitmapToggleButtonはビットマップトグルボタンを実装します。

4.ボタンクラスを作成する場合は、汎用ボタンを使用する方が簡単です。そのコードとパラメーターが使用されるため、Pythonが記述されているため、新しいサブクラスを作成するときに、チェックと上書きに使用しやすくなります。

図7.6に、実際のユニバーサルボタンと通常のボタンの比較を示します。

図7.6

w7.6.gif

例7.6は、図7.6を生成したコードを示しています。 2番目のインポートステートメント:import wx.lib.buttons as buttonが必要です。これにより、汎用ボタンクラスが使用可能になります。

例7.6 のwxPythonユニバーサルボタンを作成して使用する

import wx import wx.lib.buttons as buttons class GenericButtonFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Generic Button Example', size=(500, 350)) panel = wx.Panel(self, -1) sizer = wx.FlexGridSizer(1, 3, 20, 20) b = wx.Button(panel, -1, 'A wx.Button') b.SetDefault() sizer.Add(b) b = wx.Button(panel, -1, 'non-default wx.Button') sizer.Add(b) sizer.Add((10,10)) b = buttons.GenButton(panel, -1, 'Genric Button')#Basic universal button sizer.Add(b) b = buttons.GenButton(panel, -1, 'disabled Generic')#Invalid generic button b.Enable(False) sizer.Add(b) b = buttons.GenButton(panel, -1, 'bigger')#Custom size and color buttons b.SetFont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD, False)) b.SetBezelWidth(5) b.SetBackgroundColour('Navy') b.SetForegroundColour('white') b.SetToolTipString('This is a BIG button...') sizer.Add(b) bmp = wx.Image('bitmap.bmp', wx.BITMAP_TYPE_BMP).ConvertToBitmap() b = buttons.GenBitmapButton(panel, -1, bmp)#Universal bitmap button sizer.Add(b) b = buttons.GenBitmapToggleButton(panel, -1, bmp)#Universal bitmap switch button sizer.Add(b) b = buttons.GenBitmapTextButton(panel, -1, bmp, 'Bitmapped Text', Size=(175, 75))#bitmap text button b.SetUseFocusIndicator(False) sizer.Add(b) b = buttons.GenToggleButton(panel, -1, 'Toggle Button')#Universal switch button sizer.Add(b) panel.SetSizer(sizer) if __name__ == '__main__': app = wx.PySimpleApp() frame = GenericButtonFrame() frame.Show() app.MainLoop()

例7.6では、汎用ボタンの使用法は通常のボタンと非常によく似ています。汎用ボタンは、通常のbuttonEVT_BUTTONおよびEVT_TOGGLEBUTTONイベントと同じものを生成します。ユニバーサルボタンが導入されましたGetBevelWidth()およびSetBevelWidth()このメソッドは、3Dベベル効果を変更します。これらは、図7.6の大きなボタンで使用されています。

ユニバーサルビットマップボタンclassGenBitmapButtonは、standardwxPythonバージョンのように機能します。コンストラクターでは、GenBitmapTextButtonは最初にビットマップを必要とし、次にテキストを必要とします。一般的なclassGenToggleButton、GenBitmapToggleButton、およびGenBitmapTextToggleButtonは、非切り替えバージョンと同じであり、処理buttonGetToggle()およびSetToggle()の切り替え状態に応答します。

次のセクションでは、ユーザーが数値を入力または表示できるようにするためのオプションについて説明します。

数字を入力して表示する

グラフィカルなデジタル情報を表示したい場合や、ユーザーがキーボードを使用してデジタル金額を入力しないようにしたい場合があります。このセクションでは、デジタル入力用のwxPythonツールを参照して:スライダー(スライダー)に表示し、コントロールボックスを微調整して、メトリックのスケールを表示します。

スライダーを生成する方法は?

スライダーは、ユーザーがコントロールのディメンション内でインジケーターをドラッグして値を選択できるようにするウィジェットです。 inwxPython Inでは、コントロールクラスiswx.Slider。これには、スライダーの現在の値の読み取り専用テキストの表示が含まれます。図7.7に、水平スライダーと垂直スライダーの例を示します。

図7.7

w7.7.gif

スライダーの基本的な使い方はとても簡単ですが、たくさんのイベントを追加することができます。

スライダーの使い方

例7.7は、図7.7を生成する例です。

例7.7 水平および垂直スライダーの表示コード

import wx class SliderFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Slider Example', size=(300, 350)) panel = wx.Panel(self, -1) self.count = 0 slider = wx.Slider(panel, 100, 25, 1, 100, pos=(10, 10), size=(250, -1), style=wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS ) slider.SetTickFreq(5, 1) slider = wx.Slider(panel, 100, 25, 1, 100, pos=(125, 70), size=(-1, 250), style=wx.SL_VERTICAL | wx.SL_AUTOTICKS | wx.SL_LABELS ) slider.SetTickFreq(20, 1) if __name__ == '__main__': app = wx.PySimpleApp() frame = SliderFrame() frame.Show() app.MainLoop()

通常、wx.Sliderを使用する場合クラスを使用する場合、必要なのは、以下に示すように、他の呼び出しとは異なるコンストラクターだけです。

wx.Slider(parent、id、value、minValue、maxValue、pos = wxDefaultPosition、size = wx.DefaultSize、style = wx.SL_HORIZONTAL、validator = wx.DefaultValidator、name = 'slider')

valueはスライダーの初期値であり、minValueとmaxValueは両端の値です。

スライダースタイルで作業する

スライダーのスタイルは、以下の表7.9に示すように、スライダーの位置と方向を管理します。

表7.9 wx.Sliderスタイル

wx.SL_AUTOTICKS:このスタイルが設定されている場合、スライダーにスケールが表示されます。スケール間の間隔は、制御するSetTickFreqメソッドを渡します。

wx.SL_HORIZONTAL:水平スライダー。これがデフォルト値です。

wx.SL_LABELS:このスタイルが設定されている場合、スライダーは両端の値とスライダーの現在の読み取り専用値を表示します。一部のプラットフォームでは、現在の値が表示されない場合があります。

wx.SL_LEFT:垂直スライダーの場合、スケールはスライダーの左側にあります。

wx.SL_RIGHT:垂直スライダーの場合、スケールはスライダーの右側にあります。

wx.SL_TOP:水平スライダーの場合、スケールはスライダーの上部にあります。

wx.SL_VERTICAL:垂直スライダー。

スライダーの値を変更してアプリケーションの残りの部分に影響を与えたい場合は、使用できるいくつかのイベントを次に示します。これらのイベントは、ウィンドウのスクロールバーによって発行されるイベントと同じです。詳細な説明については、第8章のスクロールバーのセクションを参照してください。

表7.10に、使用できるスライダーを示します。*()メソッドを設定します。 EachSet *()メソッドには対応するGetメソッドがあります-Getメソッドの説明は、対応するSet *()メソッドを参照しています。

表7.10

GetRange()SetRange(minValue、maxValue):スライダーの両端の値を設定します。

GetTickFreq()SetTickFreq(n、pos):パラメーターnを使用して、スケールの間隔を設定します。 parameterposは使用されていませんが、1に設定する必要があります。

GetLineSize()SetLineSize(lineSize):矢印キーを押すたびにスライダーが増減する値を設定します。

GetPageSize()SetPageSize(pageSize):PgUpまたはPgDnを押すたびに設定します。キー、スライダーが加算または減算する値。

GetValue()SetValue(value):スライダーの値を設定します。

スライダーは、可能な範囲内の値をすばやく視覚的に表現しますが、2つの欠点もあります。 1つは、それらが多くのスペースを占めることであり、もう1つは、マウスを使用してスライダーを正確に設定することが難しいことです。以下で説明する微調整コントローラーは、これら2つの問題に対処します。

これらのスマートな上下の矢印ボタンを取得するにはどうすればよいですか?

微調整コントローラーは、テキストコントロールと、数値を調整する1対の矢印ボタンの組み合わせであり、最小限の画面スペースが必要な場合にスライダーの代わりに使用するのに最適です。図7.8は、のwxPython微調整コントローラー制御を示しています。

図7.8

w7.8.gif

inwxPython In、classwx.SpinCtrl微調整ボタンと対応するテキスト表示を管理します。次のセクションでは、スピナーコントローラーを作成します。

微調整コントローラーの作成方法

矢印ボタンを押すか、テキストコントロールを入力して値を変更するには、wx.SpinCtrlを使用する必要があります。入力された非数値テキストは無視されますが、コントロールには入力された非数値テキストが表示されます。入力した値は表示されますが、範囲外の値は対応する最大値または最小値と見なされます。例7.8showswx.SpinCtrl。の使用法。

例7.8 usewx.SpinCtrl

import wx class SpinnerFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Spinner Example', size=(100, 100)) panel = wx.Panel(self, -1) sc = wx.SpinCtrl(panel, -1, '', (30, 20), (80, -1)) sc.SetRange(1,100) sc.SetValue(5) if __name__ == '__main__': app = wx.PySimpleApp() SpinnerFrame().Show() app.MainLoop()

ほとんどの微調整コントロールはすべてコンストラクターにあり、コンストラクターは次のとおりです。

wx.SpinCtrl(parent, id=-1, value=wx.EmptyString, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.SP_ARROW_KEYS, min=0, max=100, initial=0, name='wxSpinCtrl')

parametervalueはダミーです。 useinitialパラメーターを使用してコントロールの値を設定し、useminおよびmaxを使用してコントロールのスコープを設定します。

forwx.SpinCtrlには2つのスタイルタグがあります。デフォルトのスタイルはwx.SP_ARROW_KEYSです。これにより、ユーザーはキーボードの上下の矢印キーを使用してコントロールの値を変更できます。 stylewx.SP_WRAPは、コントロールの値を周期的に変更します。つまり、矢印ボタンでコントロールの値を最大値または最小値に変更すると、続行すると、値が最小値または最大値になります。極端なものから別の極端なものへ。

また、EVT_SPINCTRLイベントをキャプチャすることもできます。このイベントは、コントロールの値が変更されたときに生成されます(変更がテキスト入力によって直接引き起こされた場合でも)。テキストが変更されると、aEVT_TEXTがトリガーされます。このイベントは、別のテキストコントロールを使用する場合と同じです。

例7.8に示すように、SetRange(minVal、maxVal)andSetValue(value)を使用できます。メソッドは範囲と値を設定します。SetValue()関数には文字列または整数が必要です。値を取得するには、メソッド:GetValue()(整数を返します)、GetMin()、およびGetMax()を使用します。

浮動小数点数や文字列のリストを許可するなど、スピナーコントローラーの動作をさらに制御する必要がある場合は、awx.SpinButtonとonewx.TextCtrlを組み合わせて、それらの間の接続を確立できます。次に、fromwx.SpinButtonイベントとupdatewx.TextCtrlをキャプチャします。の値。

プログレスバーを生成する方法は?

ユーザーが数値を変更せずにグラフィカルに表示するだけの場合は、対応するwxPythonwidgetwx.Gaugeを使用します。関連する例は、図7.9に示すプログレスバーです。

図7.9

w7.9.gif

例7.9は、図7.9を生成したコードを示しています。この章の他の多くの例とは異なり、ここではイベントハンドラーを追加しました。次のコードは、ルーラーが閉じているときにルーラーの値を調整し、値を何度も変更します。

例7.9 onewx.Gaugeを表示および更新します

import wx class GaugeFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Gauge Example', size=(350, 150)) panel = wx.Panel(self, -1) self.count = 0 self.gauge = wx.Gauge(panel, -1, 50, (20, 50), (250, 25)) self.gauge.SetBezelFace(3) self.gauge.SetShadowWidth(3) self.Bind(wx.EVT_IDLE, self.OnIdle) def OnIdle(self, event): self.count = self.count + 1 if self.count == 50: self.count = 0 self.gauge.SetValue(self.count) if __name__ == '__main__': app = wx.PySimpleApp() GaugeFrame().Show() app.MainLoop()

wx.Gaugeのコンストラクターは、他の数値ウィジェットに似ています。

wx.Gauge(parent, id, range, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.GA_HORIZONTAL, validator=wx.DefaultValidator, name='gauge')

parametersrangeを使用する場合数値を指定するために使用される場合、この値はルーラーの上限を表し、下限は常に0です。デフォルトのstylewx.GA_HORIZONTALは、水平バーを提供します。 90度回転するには、wx.GA_VERTICALスタイルを使用します。 Windowsを使用している場合、stylewx.GA_PROGRESSBARはyouWindows用です。ツールキットのローカライズされたプログレスバー。

読み取り専用コントロールとして、wx.Gaugeイベントはありません。ただし、そのプロパティは設定できます。 GetValue()、Set -Value(pos)、GetRange()、およびSetRange(range)を使用して、その値と範囲を調整できます。 Windowsを使用していて、ローカルのプログレスバースタイルを使用していない場合は、SetBezelFace(width)およびSetShadowWidth()を使用して、3D効果の幅を変更できます。

ユーザーに選択肢を与える

ほとんどすべてのアプリケーションでは、ユーザーが事前定義されたオプションのセットから選択する必要があります。 inwxPythonには、チェックボックス、ラジオボタン、リストボックス、コンボボックスなど、このタスクでユーザーを支援するさまざまなウィジェットがあります。これらのウィジェットについては、次のセクションで説明します。

チェックボックスを作成するにはどうすればよいですか?

チェックボックスは、テキストラベル付きのトグルボタンです。チェックボックスは通常グループで表示されますが、各チェックボックスの切り替え状態は互いに独立しています。このチェックボックスは、明示的な切り替えステータスを必要とする1つ以上のオプションがある場合に使用できます。図7.10は、一連のチェックボックスを示しています。

図7.10

w7.10.gif

inwxPythonのチェックボックスは使いやすいです。それらはクラスのwx.CheckBoxの例であり、親コンテナーにまとめることで一緒に表示できます。例7.10は、図7.10を生成するためのコードを示しています。

例7.10 1つのフレームに3つのチェックボックスを挿入します

import wx class CheckBoxFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Checkbox Example', size=(150, 200)) panel = wx.Panel(self, -1) wx.CheckBox(panel, -1, 'Alpha', (35, 40), (150, 20)) wx.CheckBox(panel, -1, 'Beta', (35, 60), (150, 20)) wx.CheckBox(panel, -1, 'Gamma', (35, 80), (150, 20)) if __name__ == '__main__': app = wx.PySimpleApp() CheckBoxFrame().Show() app.MainLoop()

wx.CheckBoxには、典型的なwxPythonコンストラクターがあります。

wx.CheckBox(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, name='checkBox')

labelパラメータは、チェックボックスのラベルテキストです。チェックボックスにはスタイルタグはありませんが、独自のコマンドイベントを生成します。EVT_CHECKBOX。wx.CheckBoxのスイッチステータスを使用できますGetValue()およびSetValue(state)メソッドにアクセスし、その値はブール値です。IsChecked()メソッドGetValue()と同等です。このメソッドは、コードを理解しやすくするためのものです。

ラジオボタンのセットを作成する方法(ラジオ ボタン)?

ラジオボタンは、ユーザーがいくつかのオプションの1つを選択できるようにするウィジェットです。チェックボックスとは異なり、ラジオボタンは明示的にグループ化されており、そのうちの1つだけを選択できます。新しいオプションを選択すると、最後の選択が閉じられます。ラジオボタンの使用は、使用するためにグループに編成する必要があるため、チェックボックスよりも複雑です。ラジオボタン名前は、古い車で同じ動作をする一連の選択ボタンに由来します。

inwxPythonでは、ラジオボタンのセットを作成する2つの方法があります。まず、一度にボタンを作成するように要求するwx.RadioButtonと、長方形に表示される単一のオブジェクトを使用してボタンの完全なセットを構成できるwx.RadioBoxを使用します。

wx.RadioButtonクラスはより単純であり、ラジオボタンが他のウィジェットに直接影響する場合、またはラジオボタンが単一の長方形に配置されていない場合に推奨されます。図7.11は、setwx.RadioButtonオブジェクトの列を示しています。

図7.11

w7.11.gif

この例ではwx.RadioButtonを使用します。理由は、各ラジオボタンが関連するテキストコントロールを制御するためです。ウィジェットはこのラジオボタンのセットの外にあるため、1つのラジオボタンボックスだけを使用することはできません。

ラジオボタンの作成方法

例7.11は、ラジオボタンとテキストコントロール間の接続を管理する図7.11のコードを示しています。

例7.11 別のウィジェットを制御するためにwx.RadioButtonを使用する

import wx class RadioButtonFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Radio Example', size=(200, 200)) panel = wx.Panel(self, -1) #Create radio button radio1 = wx.RadioButton(panel, -1, 'Elmo', pos=(20, 50), style=wx.RB_GROUP) radio2 = wx.RadioButton(panel, -1, 'Ernie', pos=(20, 80)) radio3 = wx.RadioButton(panel, -1, 'Bert', pos=(20, 110)) #Create text control text1 = wx.TextCtrl(panel, -1, '', pos=(80, 50)) text2 = wx.TextCtrl(panel, -1, '', pos=(80, 80)) text3 = wx.TextCtrl(panel, -1, '', pos=(80, 110)) Self.texts = {'Elmo': text1, 'Ernie': text2, 'Bert': text3}#Connect buttons and text for eachText in [text2, text3]: eachText.Enable(False) For eachRadio in [radio1, radio2, radio3]: #binding event self.Bind(wx.EVT_RADIOBUTTON, self.OnRadio, eachRadio) self.selectedText = text1 Def OnRadio(self, event):#Event handler if self.selectedText: self.selectedText.Enable(False) radioSelected = event.GetEventObject() text = self.texts[radioSelected.GetLabel()] text.Enable(True) self.selectedText = text if __name__ == '__main__': app = wx.PySimpleApp() RadioButtonFrame().Show() app.MainLoop()

ラジオボタンとテキストボックスを作成し、辞書を使用してそれらの間の接続を確立しました。 1つのforループは2つのテキストボックスを無効にし、別のforループはバインディングラジオボタンコマンドイベントをループします。イベントが発生すると、現在アクティブなテキストボックスが無効になり、タップされているボタンに一致するテキストボックスがアクティブになります。

wx.RadioButtonの使用法はwx.CheckBoxに似ています。以下に示すように、それらのコンストラクターはほとんど同じです。

wx.RadioButton(parent, id, label, pos=wx.DefaultPosition, size=wx.DefaultSize, style=0, validator=wx.DefaultValidator, name='radioButton')

チェックボックスのlabelは、対応するボタンの表示ラベルです。

wx.RB_GROUPスタイルは、ボタンが一連のラジオボタンの先頭にあることを宣言します。ラジオボタンのセットの定義は、切り替え動作を制御するため重要です。グループ内のボタンを選択すると、前に選択したボタンが選択されていない状態に切り替わります。ラジオボタンで使用wx.RB_GROUP作成後、同じ親ウィジェットに追加された後続のすべてのラジオボタンは、別のラジオボタンが使用されるまで同じグループに追加されます。wx.RB_GROUPが作成され、次のグループが開始されます。例7.11では、最初のラジオボタンが使用されています。wx.RB_GROUPが宣言されていますが、それ以降は宣言されていません。その結果、すべてのボタンが同じグループに含まれていると見なされるため、ボタンの1つをタップすると、前に選択したボタンが閉じます。

ラジオボタンを使用する

通常、ボタンのセットを表示する場合は、ボタンを個別に宣言するのは最善の方法ではありません。代わりに、wxPython usewx.RadioBoxクラスを使用すると、完全なグループを含む単一のオブジェクトを作成できます。図7.12に示すように、ラジオボタンのセットと非常によく似ています。

図7.12

w7.12.gif

使用する必要がありますwx.RadioBoxクラス、必要なのはコンストラクターだけです。例7.12は、図7.12のコードを示しています。

例7.12 建設ラジオボックス

import wx class RadioBoxFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Radio Box Example', size=(350, 200)) panel = wx.Panel(self, -1) sampleList = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'] wx.RadioBox(panel, -1, 'A Radio Box', (10, 10), wx.DefaultSize, sampleList, 2, wx.RA_SPECIFY_COLS) wx.RadioBox(panel, -1, '', (150, 10), wx.DefaultSize, sampleList, 3, wx.RA_SPECIFY_COLS | wx.NO_BORDER) if __name__ == '__main__': app = wx.PySimpleApp() RadioBoxFrame().Show() app.MainLoop()

wx.RadioBoxコンストラクターは、以下に示すように、すべてのボタンのデータを一度に指定する必要があるため、単純なラジオボタンよりも複雑です。

wx.RadioBox(parent, id, label, pos=wx.DefaultPosition, size=wxDefaultSize, choices=None, majorDimension=0, style=wx.RA_SPECIFY_COLS, validator=wx.DefaultValidator, name='radioBox')

labelパラメータは静的テキストであり、ラジオボタンの境界に表示されます。これらのボタンは使用されます。choicesパラメータは、それがaPythonであることを指定します。の文字列タグのシーケンス。

グリッドサイザーのように、dimension.wx.RadioBoxを指定するサイズを使用して指定します。、wxPythonのスケールは、別の次元に自動的に入力されます。ディメンションのメインサイズが使用されますmajorDimensionパラメータが指定されます。どの寸法がメインの寸法であるかは、スタイルタグによって決まります。デフォルト値はwx.RA_SPECIFY_COLSです。この例では、左側のフレームの列数は2に設定され、右側のフレームの列数は3に設定され、行数は選択肢によって決定されます。リスト内の要素数は動的に決定されます。逆の動作をしたい場合は、スタイルtowx.RA_SPECIFY_ROWSを設定する必要があります。ラジオボタンがタップされたときにコマンドイベントに応答する場合、このコマンドイベントはEVT_RADIOBOXです。

wx.RadioBoxクラスには、ボックス内のさまざまなラジオボタンを管理するための多くの方法があります。これらのメソッドを使用すると、特定の内部ボタンを処理して、ボタンのインデックスを渡すことができます。インデックスは0から始まり、ボタンのラベルがコンストラクターに渡される順序で厳密な順序で展開されます。これらの方法を表7.11に示します。

表7.11 wx.RadioBoxメソッド

EnableItem(n、flag):flagパラメータは、インデックスnのボタンを有効または無効にするために使用されるブール値です。ボックス全体をすぐに機能させるには、Enable()を使用します。

FindString(string):指定されたラベルに基づいて関連するボタンの整数インデックス値を返します。ラベルが見つからない場合は-1を返します。

GetCount():ボックス内のボタンの数を返します。

GetItemLabel(n)SetItemLabel(n、string):インデックスnのボタンの文字列ラベルを返すか設定します。

GetSelection()GetStringSelection()SetSelection(n)SetStringSelection(string):GetSelection()andSetSelection()このメソッドは、現在選択されているラジオボタンの整数インデックスを処理します。GetStringSelection()は、現在選択されているボタンの文字列ラベルを返します。SetStringSelection()選択したボタンの文字列ラベルを指定した値に変更します。 Noset *()が生成したEVT_RADIOBOXイベント。

ShowItem(item、show):showパラメータは、インデックスasitemボタンを表示または非表示にするために使用されるブール値です。

ラジオボタンは、ユーザーに一連の選択肢を提供する唯一の方法ではありません。リストボックスとコンボボックスは占有するスペースが少なく、ユーザーが同じグループから複数の選択を行えるように構成できます。

リストボックスを作成するにはどうすればよいですか?

列は、ユーザーが選択できるもう1つのメカニズムです。オプションは長方形のウィンドウに配置され、ユーザーは1つ以上を選択できます。リストボックスはラジオボタンよりも占有するスペースが少なく、オプションの数が比較的少ない場合はリストボックスが適しています。ただし、ユーザーがすべてのオプションを表示するのに十分な距離までスクロールバーを引く必要がある場合、そのユーティリティは減少します。図7.13は、awxPythonリストボックスを示しています。

w7.13.gif

inwxPythonでは、リストボックスはclasswx.ListBoxです。の要素。このクラスのメソッドを使用すると、リスト内の選択を処理できます。

リストボックスの作成方法

例7.13は、図7.13を生成したコードを示しています。

例7.13 usewx.ListBox

import wx class ListBoxFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'List Box Example', size=(250, 200)) panel = wx.Panel(self, -1) sampleList = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen'] listBox = wx.ListBox(panel, -1, (20, 20), (80, 120), sampleList, wx.LB_SINGLE) listBox.SetSelection(3) if __name__ == '__main__': app = wx.PySimpleApp() ListBoxFrame().Show() app.MainLoop()

wx.ListBoxのコンストラクターは、以下に示すように、ラジオボックスに似ています。

wx.ListBox(parent, id, pos=wx.DefaultPosition, size=wx.DefaultSize, choices=None, style=0, validator=wx.DefaultValidator, name='listBox')

ラジオボックスとリストボックスの主な違いは、wx.ListBoxnolabel属性です。リストに表示されている要素は、parameterschoices Inに配置されます。これは、文字列のシーケンスです。リストボックスには、表7.12に示すように、ユーザーがリストボックスから要素を選択する方法を決定する3つの相互に排他的なスタイルがあります。

ユーザーは通常、複数の選択肢についていくつかの問題を抱えています。これは、通常、単一の選択肢のリストを見たいためです。これは、複数の選択肢(複数の選択肢の質問や複数の選択肢の質問など)では難しい場合があります。困った。複数選択リストを使用する場合は、リストを明確に示すことをお勧めします。

表7.12 リストタイプ選択タイプスタイル

wx.LB_EXTENDED:ユーザーは、Shiftキーを押しながらマウスをクリックして、連続するオプションの範囲を選択するか、ボタンと同等の機能を使用できます。

wx.LB_MULTIPLE:ユーザーは一度に複数のオプションを選択できます(オプションは不連続になる可能性があります)。実際、この場合、リストボックスは一連のチェックボックスのように動作します。

wx.LB_SINGLE:ユーザーは一度に1つのオプションしか選択できません。実際、この場合、リストボックスは一連のラジオボタンのように動作します。

コントロールには3種類ありますwx.ListBoxのスクロールバー表示のスタイルを表7.13に示します。

表7.13 リストボックスのスクロールバータイプのスタイル

wx.LB_ALWAYS_SB:リストボックスには、必要かどうかに関係なく、常に垂直スクロールバーが表示されます。

wx.LB_HSCROLL:ローカルコントロールがサポートしている場合、選択肢が多すぎるとリストボックスに水平スクロールバーが作成されます。

wx.LB_HSCROLL:リストボックスには、必要な場合にのみ垂直スクロールバーが表示されます。これがデフォルトのスタイルです。

別のstylewx.LB_SORTがあります。これにより、リスト内の要素がアルファベット順に並べ替えられます。

.EVT_LISTBOX専用のtowx.ListBoxコマンドイベントが2つあります。このイベントは、リスト内の要素が選択されたときに発生します(現在選択されている要素であっても)。リストをダブルクリックすると、EVT_LISTBOX_DCLICKイベントが発生しました。

ボックス内のアイテムを操作するために使用できるリストボックスに固有の方法がいくつかあります。表7.14に、いくつかの方法を示します。リストボックスのアイテムインデックスは0から始まります。

リストボックスを作成したら、プルメニューやチェックボックスなどの他のウィジェットと自然に組み合わせたいと思うでしょう。次のセクションでは、これについて説明します。

表7.14 リストボックス方式

Append(item):リストボックスの最後に文字列アイテムを追加します。

Clear():リストボックスをクリアします。

Delete(n):リストボックス内のインデックスnのアイテムを削除します。

Deselect(n):複数選択リストボックスで、nを配置するオプションが選択解除されます。他のスタイルでは機能しません。

FindString(string):指定された文字列の整数位置を返します。見つからない場合は-1を返します。

GetCount():リスト内の文字列の数を返します。

GetSelection()SetSelection(n、select)GetStringSelection()SetStringSelection(string、select)GetSelections():GetSelection()現在の選択の整数インデックスを取得します(単一選択リストの場合のみ)。複数選択リストの場合、GetSelections()を使用して、選択したアイテムの整数位置を含むタプルを返します。単一選択リストの場合、GetStringSelection()現在選択されている文字列を返します。対応するセットメソッドはブールパラメータを使用しますselect指定された文字列またはインデックスオプションの状態を設定します。このメソッドを使用して、EVT_LISTBOXイベントをトリガーせずに選択を変更します。

GetString(n)SetString(n、string):位置nの文字列を取得または設定します。

InsertItems(items、pos):parametersitemsを挿入します。リストボックスに文字列のリストを挿入します。posパラメーターで指定された位置。位置0は、アイテムがリストの先頭に配置されることを意味します。

Selected(n):インデックスnのアイテムの選択状態に対応するブール値を返します。

セット(選択肢):再利用選択肢コンテンツ設定リストボックス。

チェックボックスとリストボックスをマージする方法は?

classwx.CheckListBoxを使用して、チェックボックスをリストボックスとマージできます。図7.14は、リストボックスとチェックボックスがマージされる例を示しています。

図7.14

w7.14.gif

wx.CheckListBoxコンストラクターとほとんどのメソッドwithwx.ListBox同じことが。にも当てはまります。新しいイベント:wx.EVT_CHECKLISTBOXがあり、リストのチェックボックスがタップされたときに発生します。チェックボックスを管理するための2つの新しいメソッドがあります。Check(n、check)は、インデックスnのアイテムの選択状態を設定し、IsChecked(item)は、指定されたインデックスのアイテムが選択された場合に戻ります。

ドロップダウン選択が必要な場合はどうなりますか?

ドロップダウン選択は、ドロップダウン矢印がタップされた場合にのみオプションを表示する選択メカニズムです。これは、選択した要素を表示する最も簡単な方法であり、画面スペースが限られている場合に最も役立ちます。図7.15は、閉じたドロップダウン選択を示しています。図7.16は、開いているドロップダウンの選択を示しています。

図7.15

w7.15.gif

図7.16

w7.16.gif

ドロップダウン選択の使用は、標準のリストボックスと非常によく似ています。例7.14は、ドロップダウン選択を作成する方法を示しています。

例7.14

import wx class ChoiceFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Choice Example', size=(250, 200)) panel = wx.Panel(self, -1) sampleList = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'] wx.StaticText(panel, -1, 'Select one:', (15, 20)) wx.Choice(panel, -1, (85, 18), choices=sampleList) if __name__ == '__main__': app = wx.PySimpleApp() ChoiceFrame().Show() app.MainLoop()

wx.Choiceのコンストラクタは、基本的にリストボックスと同じです。

wx.Choice(parent, id, pos=wx.DefaultPosition, size=wx.DefaultSize, choices=None, style=0, validator=wx.DefaultValidator, name='choice')

wx.Choiceには特別なスタイルはありませんが、固有のコマンドイベントEVT_CHOICEがあります。単一選択リストボックスに適用される表7.14のほとんどすべてのメソッドは、towx.Choiceオブジェクトに適用されます。

テキストフィールドをリストとマージできますか?

テキストフィールドをリストとマージするウィジェットはコンボボックスと呼ばれ、基本的にドロップダウン選択とテキストボックスの組み合わせです。図7.17にコンボボックスを示します。

図7.17 左側のiswx.CB_DropDOWNスタイル、右側のiswx.CB_SIMPLEスタイル

w7.17.gif

inWindowsでは、右側のスタイルを使用できます。これは、リストボックスとテキストボックスを組み合わせたものです。

コンボボックスを作成するコードは、これまで見てきたものと似ています。このクラスiswx.ComboBox、それはiswx.Choiceのサブクラスです。例7.15は、図7.17のコードを示しています。

例7.15

import wx class ComboBoxFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Combo Box Example', size=(350, 300)) panel = wx.Panel(self, -1) sampleList = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight'] wx.StaticText(panel, -1, 'Select one:', (15, 15)) wx.ComboBox(panel, -1, 'default value', (15, 30), wx.DefaultSize, sampleList, wx.CB_DropDOWN) wx.ComboBox(panel, -1, 'default value', (150, 30), wx.DefaultSize, sampleList, wx.CB_SIMPLE) if __name__ == '__main__': app = wx.PySimpleApp() ComboBoxFrame().Show() app.MainLoop()

wx.ComboBoxのコンストラクターは次のようになります。

wx.ComboBox(parent, id, value='', pos=wx.DefaultPosition, size=wx.DefaultSize, choices, style=0, validator=wx.DefaultValidator, name='comboBox')

forwx.ComboBox4つのスタイルがあります。それらのうちの2つは、コンボボックスの描画方法を決定します。wx.CB_DropDOWNは、ドロップダウンリストを使用してコンボボックスを作成します。wx.CB_SIMPLEリストボックスを使用してコンボボックスを作成します。 inWindowswx.CB_SIMPLEスタイルでのみ使用できます。任意のコンボボックスをaswx.CB_READONLYとして指定できます。このスタイルは、ユーザーがテキストフィールドに入力できないようにします。コンボボックスが読み取り専用として指定されている場合、プログラムで設定した場合でも、選択リストの要素の1つから選択する必要があります。 at lastwx.CB_SORTこのスタイルにより、選択リストの要素がアルファベット順に表示されます。

due towx.ComboBox iswx.Choiceサブクラス、allwx.Choiceこのメソッドは、表7.14に示すように、コンボボックスから呼び出すことができます。さらに、samewx.TextCtrl(表7.4を参照)を動作するテキストコンポーネントを定義する方法はたくさんあります。定義されたメソッドはCopy()、Cut()、GetInsertionPoint()、GetValue()、Paste()、Replace(from、 to、text)、Remove(from、to)、SetInsertionPoint(pos)、SetInsertionPointEnd()、およびSetValue()。

差出人:http://wiki.woodpecker.org.cn/moin/WxPythonInAction/ChapterSeven