рекомендуемая структура для разработки рабочего стола Python - PullRequest
0 голосов
/ 21 апреля 2011

Я счастливый разработчик django и теперь хочу создать небольшое приложение для рабочего стола на python.Я решил использовать wxpython в качестве моего инструментария GUI.

Теперь начинается путаница.Как мне организовать свой код?Существуют ли простые схемы отправной точки?Любые указатели на реальный код небольшого приложения wxpython с взаимодействиями с базой данных?

Ответы [ 2 ]

3 голосов
/ 21 апреля 2011

Это мой любимый способ начать работу с новым проектом wxPython: http://www.oneminutepython.com/

Он также начинает выкладывать код для вас.

0 голосов
/ 22 апреля 2011

Я придерживаюсь правила «что я пишу, то и получаю». Поэтому я обычно начинаю с одного из них:

1) Использование размера рамки по умолчанию для панели:

enter image description here

import wx

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)
        self.button = wx.Button(self.panel, label="Test")

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.button)

        self.panel.SetSizerAndFit(self.sizer)  
        self.Show()

app = wx.App(False)
win = MainWindow(None)
app.MainLoop()

2) Использование стандартного размера рамки для панели и границы для всего, что внутри:

enter image description here

import wx

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)
        self.button = wx.Button(self.panel, label="Test")

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.button)

        self.border = wx.BoxSizer()
        self.border.Add(self.sizer, 1, wx.ALL | wx.EXPAND, 5)

        self.panel.SetSizerAndFit(self.border)  
        self.Show()

app = wx.App(False)
win = MainWindow(None)
app.MainLoop()

3) Использование настраиваемого размера рамки для панели, чтобы я мог управлять им, например, при необходимости вызывать «Fit» и «Layout» на нем:

enter image description here

import wx

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)
        self.button = wx.Button(self.panel, label="Test")

        self.windowSizer = wx.BoxSizer()
        self.windowSizer.Add(self.panel, 1, wx.ALL | wx.EXPAND)

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.button)

        self.border = wx.BoxSizer()
        self.border.Add(self.sizer, 1, wx.ALL | wx.EXPAND, 5)

        self.panel.SetSizerAndFit(self.border)  
        self.SetSizerAndFit(self.windowSizer)   
        self.Show()

app = wx.App(False)
win1 = MainWindow(None)
app.MainLoop()

Это моя отправная точка. Затем я просто добавляю другие примитивные виджеты и связываю события для них. Если мне нужна новая панель, я обычно помещаю ее в новый модуль и получаю класс Panel. Я делаю то же самое для специальных виджетов, которые должны быть производными от примитивных - таких как панели рисования, холст OpenGL, кнопки специальных случаев и т. Д.

Обычно также неплохо бы отделить функциональность от GUI. Поэтому сначала пишу функциональность так, как она не нуждается в графическом интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...