私は自分自身(Wx)Pythonを教えていて、立ち往生しています。私は自分のコードの大部分を含んでいる私のTestFrameの中に情報の定期的なセットを持つ子ウィンドウを作成したいと思います。問題は、コード内にウィジェットが1つしか表示されないことです。私は次のことを、私の重要性の順に理解しようとしています。WxPython:子ウィンドウの複数のウィジェット
**このコードはthisページへの拡張であることに注意してください。*
- 私は「AddBox」クラスの複数のウィジェットが正しく表示されるようにするにはどうすればよいですか?
- ウィンドウのサイズを変更すると、添付されている画面のようにボタンイメージが破損します。どうすればこの問題を解決できますか?
- これらの動的に作成されたウィジェットのそれぞれをどのように呼び出し/バインドしますか?
- ボーナス:ここに必要な "OnSize"モジュールはありますか?
ありがとうございました。許可されている/適切な場合、私はあなたが私の場合、勝者にPaypalを介して$ 5を寄付するつもりです。
import wx
class AddBox(wx.Window):
def __init__(self, parent):
wx.Window.__init__(self, parent)
pbox = wx.BoxSizer(wx.VERTICAL)
controlback = wx.Button(self, label="Back")
controlforward = wx.Button(self, label="Forward")
pbox.AddMany([(controlback, 1, wx.ALL), (controlforward, 1, wx.ALL)])
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, size=(1000, 550))
self.Bind(wx.EVT_SIZE, self.OnSize)
pbox0 = wx.BoxSizer(wx.VERTICAL)
controlback0 = wx.Button(self, label="Back0")
controlforward0 = wx.Button(self, label="Forward0")
pbox0.AddMany([(controlback0, 1, wx.ALL), (controlforward0, 1, wx.ALL)])
pbox2 = wx.BoxSizer(wx.VERTICAL)
self.scrolling_window = wx.ScrolledWindow(self)
self.scrolling_window.SetScrollRate(1,6)
self.scrolling_window.EnableScrolling(True,True)
self.sizer_container = wx.BoxSizer(wx.VERTICAL)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer_container.Add(self.sizer,1,wx.CENTER,wx.EXPAND)
self.child_windows = []
for i in range(0,8):
wind = AddBox(self.scrolling_window)
self.sizer.Add(wind, 0, wx.CENTER|wx.ALL, 5)
self.child_windows.append(wind)
self.scrolling_window.SetSizer(self.sizer_container)
#self.Layout() #not needed?
pbox2.AddMany([(self.sizer_container, 1, wx.ALL)])
def OnSize(self, event):
self.scrolling_window.SetSize(self.GetClientSize())
if __name__=='__main__':
app = wx.PySimpleApp()
f = TestFrame()
f.Show()
app.MainLoop()
を(私はいつかこれらにアクセスする必要がある場合はもちろん、あなたがラムダ関数の上にウィジェットを直接渡すことができますが、私はどこかに作成したウィジェットのインスタンスを持っているのが好き)、たとえば、controlbackやcontrolback0が押された場合、addBoxモジュール内のtextctrlをどのように編集することができますか? – mh00h
私はここで何かを紛失しているに違いありません。あなたの例にTextCtrlはどこにありますか? 1つではありません。とにかくランダムボタンを押すと、テキストコントロールを編集することができますか?ボタンを押して編集をオンにしたい場合は、ボタンのデータ構造(おそらく辞書)とそれらにマップされるテキストコントロールを保持する必要があります。次に、ボタンを押すと、テキストコントロールが有効になり、そこにフォーカスが置かれます。 –
ありがとうございます。私はあなたがエレガントに修正したQ1で一番苦労しました。 wxで何をするか教えてくれてありがとう。ウィンドウ、私はそれを追求する方法がわからなかったし、私はここで何が起こっているのか理解を開始する必要がある牽引を私に与えた。 Q3に関しては、あなたの答えが本当に助けになり、複数のtextctrlを自動入力することが可能になりました。いつか私はこのような人々にできる...ありがとう! – mh00h