5

デフォルトの高さでカスタムの幅を持つテキストコントロールを作成しようとしています。これは私の現在のコードです:

tc = wx.TextCtrl(self, -1)
tc.Size.SetWidth(300)

ただし、テキストコントロールの幅は変更されません。tc.Layout()幅を変えて呼び出してみましたが、結果が出ませんでした。デフォルトの高さを使用したいので、クラスコンストラクターにカスタムサイズを入力する必要はありません。また、オブジェクトtc.GetSizeの深いコピーが返される場合に備えて、より詳細にしようとしました。Size

tc = wx.TextCtrl(self, -1, size=(300, 23))

tc_size = tc.Size
tc_size.SetWidth(300)

tc.Size = tc_size
tc.Layout()

また、役に立たない。コードが機能しないのはなぜですか。また、どのように機能させるのですか?


コンストラクターでサイズを設定すると機能するため、サイザーは問題とは無関係です。

4

2 に答える 2

12

(300, -1)テキストコントロールのサイズとして渡すことができることに気づきました。

wx.TextCtrl(self, -1, size=(300, -1))

これにより、デフォルトの高さを使用したテキストコントロールが作成されます。これは私の問題を解決しますが、技術的には私の質問に答えないので、私はより良い答えを求めています。


編集:この回答と以下のコメントが私の質問に答えます。

于 2013-01-13T18:43:43.357 に答える
4

明示的に設定するのではなく、サイザーでコントロールのサイズを制御できるようにする必要があります。

import wx

class Frm(wx.Frame):
   def __init__(self, *args, **kwargs):
      super(Frm, self).__init__(*args, **kwargs)
      txt = wx.TextCtrl(self)
      s = wx.BoxSizer(wx.HORIZONTAL)
      s.Add(txt, 1)
      self.SetSizer(s)
      self.Layout()


app = wx.PySimpleApp()
frame = Frm(None)
frame.Show()
app.MainLoop()

これにより、コードからの一般的なガイダンスに従って、コントロールを相互に相対的にレイアウトできます。したがって、たとえば、Mac と Windows で同じコードを実行しても、適切なレイアウトが得られるはずです。

これはあなたの質問への直接的な回答ではないことは承知していますが、サイザーに気付いていない場合に備えて、サイザーを紹介したいと思います。UI レイアウトを作成して維持することで、多くの単調な作業が必要になります。

于 2013-01-13T19:51:54.693 に答える