python桌面开发推荐结构

发布于 2024-11-03 04:39:21 字数 161 浏览 5 评论 0原文

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

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

I am a happy django developer and now want to build a small python desktop app. I have decided to use wxpython as my gui toolkit.

Now starts the confusion. How should I organize my code? are there any simple starting point schemes? Any pointers to real world code of small wxpython application with database interactions ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜唯美灬不弃 2024-11-10 04:39:21

这是我最喜欢的开始新的 wxPython 项目的方式: http://www.onemillionpython.com/

它还开始以一种很好的方式为您布置代码。

This is my favorite way to get started with a new wxPython project: http://www.oneminutepython.com/

It also starts laying out the code for you in a nice way.

假装不在乎 2024-11-10 04:39:21

我坚持“我写什么,我就得到什么”的规则。所以我通常从其中之一开始:

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) 使用自定义 Frame sizer对于面板,这样我就可以控制它,例如在需要时调用“Fit”和“Layout”:

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 的方式编写功能。

I stick to the "what I write, that I get" rule. So I usually start with one of those:

1) Using default Frame sizer for panel:

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) Using default Frame sizer for panel and Border for everything inside:

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) Using custom Frame sizer for panel, so I can control it, for example call "Fit" and "Layout" on it when needed:

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

That is my starting point. Then I just add other primitive widgets and bind events for them. If I need a new panel, I usually put it in a new module and derive the Panel class. I do the same for special widgets which have to derive from the primitive ones - like drawing panels, OpenGL canvas, special case buttons etc.

It is usually also good idea to have functionality separated from GUI. So I write functionality first the way it does not need GUI.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文