2010-04-12 2 views
3

Хорошо, так что я учусь о дробилках в WxPython и мне было интересно, если это можно было сделать что-то вроде:Sizers ... - WxPython

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

ПРИМЕЧАНИЯ: Да, я буквально получил от этого wxPython - picking the right sizer to use in an application

с ТЕТРАДЬЮ расширена слева и снизу, изображение, чтобы выровнять по левому нижнему и LoginForm выравнивать направо и снизу, и мне удалось сделать почти все, но теперь у меня есть проблема ..

проблема заключается в том, что я не может совмещать Logform и изображение отдельно (im, используя Box Sizers), и я w ould нравится.

EDIT: Так что каждый может увидеть, что я имею в виду: «Да, и то, что я имел в виду, в основном, что если бы я изменил выравнивать, это будет влиять как LoginForm и изображение .. Например, если я установил выровняйте вправо, изображение и форма входа будут выровнены вправо из-за: sizer.Add (sizer4,0, wx.ALIGN_RIGHT | wx.RIGHT, 10). Надеюсь, вы, ребята, можете понять на этот раз »

это код, который я использую, что вызывает проблему на данный момент, любая помощь приветствуется. ПРИМЕЧАНИЕ. Код может быть (HUGELY) неаккуратным, поскольку я все еще участвую в коробке. Heres тестовый код:

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() 
+1

wxGlade. Изучайте, живите, любите. Это не идеально, но это намного лучше, чем ручное кодирование с нуля. –

+0

Спасибо за совет, хотя мне все равно хотелось бы узнать, удалось ли решить мою проблему :). – dpswt

+0

@Francisco - Не могли бы вы разместить полный код для минимального, но рабочего примера? Пожалуйста, как можно проще, так что никаких изображений, регистрационных ящиков и т. Д., А просто используйте кнопки или панели. Есть, вероятно, лучшие примеры, но я надеюсь на что-то вроде того, что я разместил здесь: http://stackoverflow.com/questions/2546979/2549783#2549783 – tom10

ответ

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) будет действовать в качестве спейсера, который будет принимать все пространство между изображением и формой входа. Я действительно не понимал, что вы подразумеваете под «Проблема в том, что я не могу выровнять Logform и Image отдельно (im using Box Sizers), и я бы хотел». В основном я просто следил за иллюстрацией, пытаясь создать макет. Надеюсь, это поможет.

+0

Спасибо за ваш ответ, плохо проанализируйте его завтра, когда я уйду спать, я также добавил тестовый код, если вы хотите побеседовать с ним, спасибо большое за ваш ответ, тем не менее – dpswt

+0

Нет проблем Вы можете сделать большинство макетов с различными комбинациями вложенных BoxSizers. – synic

+0

О, и о чем я говорил, было в основном тем, что если бы я изменил выравнивание, это повлияло бы как на LoginForm, так и на изображение. Например, если я установил align в RIGHT, оба изображения и форма входа в систему были бы выровнены вправо из-за: sizer.Add (sizer4,0, wx.ALIGN_RIGHT | wx.RIGHT, 10). Надеюсь, вы поймете это на этот раз. – dpswt

0

Просто пометка здесь, мне всегда было проще сделать скелет кода в wxFormBuilder, а затем добавить код в свой проект, в отличие от проб и ошибок в чистом Python.

Смежные вопросы