С удовольствием помогу вам объединить ваш код для счётчика площади помещения с графическим интерфейсом, созданным с помощью 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. **Отображение результата**: Результат рассчитывается и отображается в виде текста в интерфейсе.
Этот пример должен дать вам общее представление о том, как связать ваш код с графическим интерфейсом, и вы можете