【问题标题】:Need assistance with wxPython (newbie)需要 wxPython 的帮助(新手)
【发布时间】:2009-07-21 16:34:00
【问题描述】:

我需要创建我认为应该是一个简单的 GUI。我对构建 GUI 的经验很少。我是一个视觉学习者,“wxPython In Action”并没有帮助我。博士写的书我学的不好。我正在使用 Python 2.6。 Internet 上的许多示例都不适用于 Python 2.6。

我需要创建一个包含 3 列和底部一些按钮的 GUI。

在第一遍中,每一列都只是多行文本输入。我创建了一个使用 3 个面板确实有 3 列的 GUI,但我无法获得多行文本输入来填充整个面板。我尝试在一个面板上使用 boxsizer 和 flexgridsizer,但同样,我无法让多行文本输入填充整个列。

在某个地方,我看到了一个几乎正是我要查找的示例,但我要么没有为它添加书签,要么它在一个示例中,我忘记了它在哪里。这个例子有 3 列,每列都可以像在电子表格中一样调整宽度。

我已经做了好几天了,但我没有取得任何进展。我正在寻找的是类似于 Sashwindow 但有 3 列的东西。

我尝试了多个面板、boxsizers 和 flexgridsizers 但没有运气。我已经浏览了所有的 wxPython 演示,没有任何东西可以完成。也许是因为我要找的东西太简单了,不值得做演示。实际程序中的某些列将使用可选列表和网格,但首先我需要从最简单的可能情况开始。

谁能提供一个简约的程序,显示 3 列,多行文本输入填充整个列?我会弄清楚如何在底部添加按钮。

谢谢,

【问题讨论】:

    标签: wxpython wxwidgets


    【解决方案1】:

    你应该看看wxGlade。它是一个方便的小 GUI 构建器,可用于创建 UI。之后,您还可以查看它生成的代码并从那里开始。

    编辑:好的,开始吧:

    在 wxGlade 中,创建一个新框架。添加一个带有三个插槽的水平尺寸器。将 TextCtrl 添加到第一个插槽。在文本控件的 Layout 页面上,选中 wxEXPAND 并将 Proportion 设置为 1;在小部件页面上,检查 wxTE_MULTILINE。将文本控件复制到剪贴板并粘贴到剩余的两个插槽中。

    这是 wxGlade 生成的代码:

    #!/usr/bin/env python
    # -*- coding: iso-8859-15 -*-
    # generated by wxGlade 0.6.3 on Tue Jul 21 20:00:54 2009
    
    import wx
    
    # begin wxGlade: extracode
    # end wxGlade
    
    
    
    class MyFrame(wx.Frame):
        def __init__(self, *args, **kwds):
            # begin wxGlade: MyFrame.__init__
            kwds["style"] = wx.DEFAULT_FRAME_STYLE
            wx.Frame.__init__(self, *args, **kwds)
            self.text_ctrl_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
            self.text_ctrl_1_copy = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
            self.text_ctrl_1_copy_1 = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE)
    
            self.__set_properties()
            self.__do_layout()
            # end wxGlade
    
        def __set_properties(self):
            # begin wxGlade: MyFrame.__set_properties
            self.SetTitle("frame_1")
            # end wxGlade
    
        def __do_layout(self):
            # begin wxGlade: MyFrame.__do_layout
            sizer_1 = wx.BoxSizer(wx.VERTICAL)
            sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
            sizer_2.Add(self.text_ctrl_1, 1, wx.EXPAND, 0)
            sizer_2.Add(self.text_ctrl_1_copy, 1, wx.EXPAND, 0)
            sizer_2.Add(self.text_ctrl_1_copy_1, 1, wx.EXPAND, 0)
            sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
            self.SetSizer(sizer_1)
            sizer_1.Fit(self)
            self.Layout()
            # end wxGlade
    
    # end of class MyFrame
    
    
    if __name__ == "__main__":
        app = wx.PySimpleApp(0)
        wx.InitAllImageHandlers()
        frame_1 = MyFrame(None, -1, "")
        app.SetTopWindow(frame_1)
        frame_1.Show()
        app.MainLoop()
    

    希望有所帮助:-)

    【讨论】:

    • 我一直在使用 Boa 构造函数。像 wxGlade 一样,它只有在您已经知道自己在做什么时才有用。我已经阅读了 wxPython 和 Boa Constructor 上的 ShowMeDo 教程(尤其是视频 #8 多次)。我不会问我是否已经尝试了所有我可以使用的东西。
    • 抱歉没有早点回来。自从您发布代码以来,我一直在编程。您的解决方案绝对完美。非常感谢你。一旦我克服了最初的心理锁定障碍,我就能弄清楚其他所有事情。我也给了 wxGlade 另一个机会,我已经从 Boa 切换到 wxGlade。我喜欢 wxGlade 生成几乎是手写代码的方式。我的程序不仅仅是 TextCtrls,但我想看看最简单的情况,因为我知道我可以自己弄清楚血淋淋的细节。
    • 我无法对您的解决方案进行投票,因为我没有 15 的声望。愚蠢的控制狂。我想给你最大的积极性。
    • 很好,很高兴能帮上忙。另外,根据经验相信我,代表限制在一般情况下是一件好事。干杯!
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 2020-04-25
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多