Нужна помощь с wxPython (новичок) - PullRequest
2 голосов
/ 21 июля 2009

Мне нужно создать то, что я считаю простым графическим интерфейсом. У меня очень мало опыта в создании графических интерфейсов. Я визуальный ученик, и «wxPython In Action» не помогает мне. Я плохо учусь по книгам, написанным докторами наук. Я использую Python 2.6. Многие примеры в Интернете не работают в Python 2.6.

Мне нужно создать графический интерфейс с 3 колонками и несколькими кнопками внизу.

На первом проходе каждый из столбцов будет просто многострочным вводом текста. Я создал графический интерфейс, который имел 3 столбца с использованием 3 панелей, но я не мог получить многострочный текстовый ввод для заполнения всей панели. Я попытался использовать boxsizer и flexgridsizer с одной панелью, но опять же, я не смог получить многострочный текстовый ввод для заполнения всего столбца.

Где-то я увидел пример почти точно того, что искал, но я либо не добавил его в закладки, либо это было в примере, и я забыл, где это. В этом примере было 3 столбца, в которых каждый столбец можно настроить по ширине, как в электронной таблице.

Я занимался этим довольно много дней и не достиг никакого прогресса. То, что я ищу, это что-то похожее на Sashwindow, но с 3 колонками.

Я пробовал несколько панелей, боксеров с flexgridsizer, но не повезло. Я прошел через все демоверсии wxPython, и ничего не получилось. Возможно, потому что то, что я ищу, слишком просто и не заслуживает демонстрации. Некоторые столбцы в реальной программе будут использовать выбираемые списки и сетки, но сначала мне нужно начать с упрощенного возможного случая.

Может ли кто-нибудь предоставить минималистичную программу, которая показывает 3 столбца с многострочным вводом текста, заполняющим весь столбец? Я разберусь, как добавить кнопки внизу.

Спасибо,

1 Ответ

4 голосов
/ 21 июля 2009

Вы должны взглянуть на wxGlade . Это удобный маленький конструктор GUI, который вы можете использовать для создания своего интерфейса. После этого вы также можете посмотреть код, который он генерирует, и перейти оттуда.

Редактировать: Хорошо, вот так:

В wxGlade создайте новый фрейм. Добавьте горизонтальный классификатор с тремя слотами. Добавьте TextCtrl в первый слот. На странице «Макет» для текстового элемента управления установите флажок wxEXPAND и установите для параметра «Пропорция» 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()

Надеюсь, это поможет: -)

...