推荐的python桌面开发结构

时间:2011-04-21 17:54:58

标签: python user-interface wxpython

我是一个快乐的django开发人员,现在想要构建一个小型的python桌面应用程序。我决定使用wxpython作为我的gui工具包。

现在开始混乱。我该如何组织我的代码?有没有简单的起点计划?有关数据库交互的小型wxpython应用程序的真实世界代码的指针吗?

2 个答案:

答案 0 :(得分:3)

这是我开始使用新wxPython项目的最佳方式:http://www.oneminutepython.com/

它也开始以一种很好的方式为你编写代码。

答案 1 :(得分:0)

我坚持“我写的东西,我得到的”规则。所以我通常从其中一个开始:

1)使用面板的默认Frame sizer:

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)使用面板中的默认Frame sizer和内部的所有内容:

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)为面板使用自定义Frame sizer,我可以控制它,例如在需要时调用它“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分开通常也是个好主意。所以我首先按照不需要GUI的方式编写功能。