Как интегрировать код на Python с графическим интерфейсом, созданным с помощью wxPython?

Извините за возможно несоответствующий вопрос, но я новичок и не смог найти нужную информацию. Вопрос заключается в следующем: у меня есть код для простого счётчика площади помещения: <br/> a, b, h, o1, o2, d1, d2 = [float(input(x + ' = ')) for x in ['Ширина (м)', 'Длина (м)', 'Высота (м)', 'Окно ширина (м)', 'Окно высота (м)', 'Дверь ширина (м)', 'Дверь высота (м)']] <br/> print(round(a * 2 * h + b * 2 * h - o1 * o2 - d1 * d2, 2)) <br/> <br/> и имеется окно wxPython: <br/> import wx <br/> <br/> class MyFrame(wx.Frame): <br/> def __init__(self, parent, title): <br/> super().__init__(parent, title=title, size=(600,300)) <br/> <br/> app = wx.App() <br/> frame = MyFrame(None, "Площадь стен помещения") <br/> frame.Show() <br/> app.MainLoop() <br/> Как объединить эти два фрагмента кода? Как создать работающий интерфейс приложения? Заранее благодарю за помощь.
  • 22 октября 2024 г. 13:43
Ответы на вопрос 1
С удовольствием помогу вам объединить ваш код для счётчика площади помещения с графическим интерфейсом, созданным с помощью wxPython. В нашем новом приложении мы создадим простую форму, где пользователь сможет вводить размеры (ширину, длину и т.д.) через текстовые поля, а затем нажать кнопку для выполнения расчёта и отображения результата.

Вот пример того, как это можно реализовать:

```python
import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super().__init__(parent, title=title, size=(400, 300))

        panel = wx.Panel(self)

        # Создание панели для ввода данных
        vbox = wx.BoxSizer(wx.VERTICAL)

        self.width_text = wx.TextCtrl(panel)
        self.length_text = wx.TextCtrl(panel)
        self.height_text = wx.TextCtrl(panel)
        self.window_width_text = wx.TextCtrl(panel)
        self.window_height_text = wx.TextCtrl(panel)
        self.door_width_text = wx.TextCtrl(panel)
        self.door_height_text = wx.TextCtrl(panel)

        # Дополняем интерфейс элементами
        vbox.Add(wx.StaticText(panel, label='Ширина (м)'))
        vbox.Add(self.width_text, flag=wx.EXPAND)
        vbox.Add(wx.StaticText(panel, label='Длина (м)'))
        vbox.Add(self.length_text, flag=wx.EXPAND)
        vbox.Add(wx.StaticText(panel, label='Высота (м)'))
        vbox.Add(self.height_text, flag=wx.EXPAND)
        vbox.Add(wx.StaticText(panel, label='Окно ширина (м)'))
        vbox.Add(self.window_width_text, flag=wx.EXPAND)
        vbox.Add(wx.StaticText(panel, label='Окно высота (м)'))
        vbox.Add(self.window_height_text, flag=wx.EXPAND)
        vbox.Add(wx.StaticText(panel, label='Дверь ширина (м)'))
        vbox.Add(self.door_width_text, flag=wx.EXPAND)
        vbox.Add(wx.StaticText(panel, label='Дверь высота (м)'))
        vbox.Add(self.door_height_text, flag=wx.EXPAND)

        self.calculate_button = wx.Button(panel, label='Рассчитать площадь')
        self.calculate_button.Bind(wx.EVT_BUTTON, self.on_calculate)
        vbox.Add(self.calculate_button, flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM, border=10)

        self.result_text = wx.StaticText(panel, label='')
        vbox.Add(self.result_text, flag=wx.ALIGN_CENTER)

        panel.SetSizer(vbox)
        self.Centre()

    def on_calculate(self, event):
        try:
            width = float(self.width_text.GetValue())
            length = float(self.length_text.GetValue())
            height = float(self.height_text.GetValue())
            window_width = float(self.window_width_text.GetValue())
            window_height = float(self.window_height_text.GetValue())
            door_width = float(self.door_width_text.GetValue())
            door_height = float(self.door_height_text.GetValue())

            # Расчёт площади стен
            area = round(width * 2 * height + length * 2 * height - (window_width * window_height) - (door_width * door_height), 2)

            self.result_text.SetLabel(f'Площадь: {area} м²')
        except ValueError:
            self.result_text.SetLabel('Ошибка: введите корректные числа.')

app = wx.App()
frame = MyFrame(None, "Площадь стен помещения")
frame.Show()
app.MainLoop()
```

### Пояснение:
1. **Импортирование wxPython**: Сначала требуется импортировать библиотеку wx.

2. **Создание класса `MyFrame`**: Этот класс отвечает за создание основного окна приложения (фрейма).

3. **Ввод данных**: Мы создаём текстовые поля (TextCtrl) для ввода ширины, длины, высоты, размеров окон и дверей.

4. **Кнопка расчёта**: При нажатии на кнопку происходит событие, связывающее его с методом `on_calculate`, который выполняет расчёт площади.

5. **Обработка ошибок**: Добавлен блок `try-except` для обработки возможных ошибок при вводе некорректных данных. Если вводимые данные не являются числами, отображается ошибка.

6. **Отображение результата**: Результат рассчитывается и отображается в виде текста в интерфейсе.

Этот пример должен дать вам общее представление о том, как связать ваш код с графическим интерфейсом, и вы можете
Похожие вопросы