3

わかりましたので、wxPython のサイザーについて学習していて、次のようなことができるかどうか疑問に思っていました。

==============================================
|WINDOW TITLE                          _ [] X|
|============================================|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxNOTEBOOKxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
|________                         ___________|
|IMAGE   |                       |LoginForm  |
|________|                       |___________|
==============================================

注:ええ、私は文字通りこれをwxPython から取得しました - アプリケーションで使用する適切なサイザーの選択

NOTEBOOKを左下に展開し、IMAGEを左下に、ログインフォームを右下に揃えて、ほぼできたのですが、問題が発生しました..

問題は、Loginform と Image を別々に配置できないことです (Box Sizers を使用しています)。

編集:だから誰もが私が何を意味するかを見ることができます:次の理由により、loginform は右揃えになります: sizer.Add(sizer4,0, wx.ALIGN_RIGHT | wx.RIGHT, 10)。

これは、現時点で問題を引き起こしている私が使用しているコードです。注:私はまだボックスサイザーを学んでいるので、コードは(非常に)ずさんである可能性があります。テストコードは次のとおりです。

import wx
class Sizerframe(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'sizertestframe',size=(790, 524))
        p = wx.Panel(self)
        nb = wx.Notebook(p, size = (750, 332))
        button = wx.Button(p, -1, "loginform1rest", size=(94,23))
        button1 = wx.Button(p, -1, "Login", size=(94,23))
        button2 = wx.Button(p, -1, "Cancel", size=(94,23))
        imagebutton = wx.Button(p, -1, "imagebutton", size=(94,23))



        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer1 = wx.BoxSizer(wx.HORIZONTAL)
        sizer1.Add(nb,1, wx.EXPAND)
        sizer.Add(sizer1,1, wx.LEFT | wx.RIGHT | wx.EXPAND, 10)
        sizer.Add((-1, 25))
        sizer2 = wx.BoxSizer(wx.VERTICAL)
        sizer2.Add(button, 0)
        sizer3 = wx.BoxSizer(wx.HORIZONTAL)
        sizer3.Add(button1, 0)
        sizer3.Add(button2,0, wx.LEFT, 5)
        sizer2.Add(sizer3, 0)

        sizer4 = wx.BoxSizer(wx.HORIZONTAL)
        sizer4.Add(imagebutton, 1, wx.LEFT | wx.BOTTOM)
        sizer4.Add(sizer2,0, wx.RIGHT | wx.BOTTOM , 5)
        sizer.Add(sizer4,0, wx.ALIGN_RIGHT | wx.RIGHT, 10)
        p.SetSizer(sizer)

def main():
    app = wx.App()
    frame = Sizerframe()
    frame.Show()
    app.MainLoop()
if __name__ == '__main__':
    main()
4

2 に答える 2

5

このようなものはどうですか?

container = wx.BoxSizer(wx.VERTICAL)
container.Add(self.nb, 1, wx.EXPAND)

login = wx.BoxSizer(wx.VERTICAL)
login.Add(self.userLabel)
login.Add(self.userText)

# ... clip, rest of login form additions here

bottom = wx.BoxSizer(wx.HORIZONTAL)
bottom.Add(image)
bottom.Add((0, 0), 1, wx.EXPAND)
bottom.Add(login)

container.Add(bottom, 1, wx.EXPAND)

基本的に、bottom.Add((0, 0), 1, wx.EXPAND)は画像とログイン フォームの間のすべてのスペースを占めるスペーサーとして機能します。「問題は、Loginform と Image を個別に配置できないことです (Box Sizers を使用しています)。そうしたいです」という意味がよくわかりませんでした。レイアウトを作成しようとして、ほとんどの場合、イラストに従いました。これが役立つことを願っています。

于 2010-04-12T04:07:46.673 に答える
0

ここにタグを付けるだけで、純粋な Python で試行錯誤するよりも、 wxFormBuilderでコードのスケルトンを作成してからプロジェクトにコードを追加する方が簡単であることが常にわかっています。

于 2015-07-12T21:12:20.033 に答える