Python桌面开发推荐结构

0 投票
2 回答
1503 浏览
提问于 2025-04-16 16:11

我是一名快乐的Django开发者,现在想做一个小的Python桌面应用程序。我决定使用wxpython作为我的图形界面工具包。

现在开始让我感到困惑的是,我该如何组织我的代码呢?有没有什么简单的入门方案?有没有人能给我一些关于小型wxpython应用程序与数据库交互的实际代码示例?

2 个回答

0

我遵循“我写什么,就得到什么”的原则。所以我通常会从以下几种方式开始:

1) 使用默认的框架大小调整器来设置面板:

在这里输入图片描述

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) 使用默认的框架大小调整器来设置面板,并为里面的所有东西加上边框:

在这里输入图片描述

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) 使用自定义的框架大小调整器来设置面板,这样我可以控制它,比如在需要的时候调用“适应”和“布局”:

在这里输入图片描述

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

这就是我的起点。然后我会添加其他基本的控件,并为它们绑定事件。如果我需要一个新的面板,我通常会把它放在一个新的模块里,并从面板类派生出新的类。我对那些必须从基本控件派生的特殊控件也这样做,比如绘图面板、OpenGL画布、特殊按钮等等。

通常,把功能和图形界面分开也是个好主意。所以我会先编写功能代码,让它不依赖于图形界面。

3

这是我开始一个新的wxPython项目时最喜欢的方法:http://www.oneminutepython.com/

它还会帮你把代码整理得很好。

撰写回答