Zatimm commited on
Commit
57ea2cd
·
verified ·
1 Parent(s): 141fba5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -32
app.py CHANGED
@@ -3,54 +3,57 @@ import pandas as pd
3
  import matplotlib.pyplot as plt
4
  from matplotlib.patches import Rectangle
5
 
6
- # --- Çizim Fonksiyonu (Değişiklik yok) ---
7
  def cizim_olustur(W, H, T, bolme_pozisyonlari, bolme_genislikleri, bolme_raf_sayilari):
 
8
  try:
9
- fig, ax = plt.subplots(figsize=(W/20, H/20))
 
 
10
  ax.add_patch(Rectangle((0, 0), W, H, fill=None, edgecolor='black', linewidth=2))
11
  ax.add_patch(Rectangle((T, T), W - 2 * T, H - 2 * T, fill=None, edgecolor='gray', linewidth=1))
 
 
12
  for pozisyon in bolme_pozisyonlari:
13
  ax.add_patch(Rectangle((T + pozisyon, T), T, H - 2 * T, facecolor='#E0E0E0', edgecolor='gray', linewidth=1))
 
 
14
  sol_kenar_x = T
15
  for i in range(len(bolme_genislikleri)):
16
  genislik = bolme_genislikleri[i]
17
  raf_sayisi = bolme_raf_sayilari[i]
 
18
  if raf_sayisi > 0:
19
  bolme_ic_yukseklik = H - 2 * T
20
  bosluk = bolme_ic_yukseklik / (raf_sayisi + 1)
21
  for j in range(raf_sayisi):
22
  raf_y = T + ((j + 1) * bosluk) - (T / 2)
23
  ax.add_patch(Rectangle((sol_kenar_x, raf_y), genislik, T, facecolor='#F0F0F0', edgecolor='gray', linewidth=1))
 
24
  sol_kenar_x += genislik + T
 
25
  ax.set_xlim(0, W); ax.set_ylim(0, H)
26
  ax.set_aspect('equal', adjustable='box'); ax.set_xticks([]); ax.set_yticks([])
27
  plt.title("Dolap İç Yapısı (Ön Görünüm)"); plt.tight_layout()
 
28
  return fig
29
  except Exception:
30
  fig, ax = plt.subplots(); ax.text(0.5, 0.5, 'Çizim oluşturulamadı.', ha='center'); return fig
31
 
32
- # --- Arayüz Güncelleme Fonksiyonu (Güncellendi) ---
33
  def update_bolme_arayuzu(dikey_bolme_adedi):
34
  dikey_bolme_adedi = int(dikey_bolme_adedi)
35
  bolme_sayisi = dikey_bolme_adedi + 1
36
-
37
  updates = []
38
- # Dikey bölme pozisyon kutularını güncelle
39
- for i in range(MAX_BOLMELER):
40
- updates.append(gr.update(visible=i < dikey_bolme_adedi))
41
- # Bölme raf sayısı kutularını güncelle
42
- for i in range(MAX_BOLMELER + 1):
43
- updates.append(gr.update(visible=i < bolme_sayisi))
44
-
45
- # YENİ: Çekmece bölme seçimi menüsünü güncelle
46
  bolme_choices = [str(i + 1) for i in range(bolme_sayisi)]
47
  updates.append(gr.update(choices=bolme_choices, value="1"))
48
-
49
  return updates
50
 
51
- # --- Ana Hesaplama Fonksiyonu (Güncellendi) ---
52
  def ana_fonksiyon(
53
- genislik, yukseklik, derinlik, kalinlik,
54
  dikey_bolme_sayisi, arkalik_var_mi,
55
  kapak_sayisi, kapak_bosluk,
56
  cekmece_sayisi, cekmece_on_yuksekligi, cekmece_bolme_secimi,
@@ -58,6 +61,7 @@ def ana_fonksiyon(
58
  ):
59
  try:
60
  W, H, D, T = float(genislik), float(yukseklik), float(derinlik), float(kalinlik)
 
61
  dikey_bolme_sayisi = int(dikey_bolme_sayisi)
62
  bolme_sayisi = dikey_bolme_sayisi + 1
63
  dikey_bolme_pozisyonlari = sorted([float(p) for p in dynamic_inputs[:dikey_bolme_sayisi]])
@@ -69,13 +73,13 @@ def ana_fonksiyon(
69
  if dikey_bolme_pozisyonlari and max(dikey_bolme_pozisyonlari) >= ic_genislik:
70
  raise ValueError(f"Bölme pozisyonu ({max(dikey_bolme_pozisyonlari)}cm) iç genişlikten ({ic_genislik}cm) büyük olamaz.")
71
 
72
- # --- GÖVDE PARÇALARI VE BANTLAMA ---
73
  parcalar.append(["Gövde - Yan Panel", 2, H, D, "Ön ve alt kenar bantlı", 1, 1])
74
  parcalar.append(["Gövde - Alt/Üst Panel", 2, ic_genislik, D, "Ön kenar bantlı", 1, 0])
75
  if dikey_bolme_sayisi > 0:
76
  parcalar.append(["Gövde - Dikey Bölme", dikey_bolme_sayisi, H - 2 * T, D, "Ön kenar bantlı", 1, 0])
77
 
78
- # --- BÖLME GENİŞLİKLERİ VE RAFLAR ---
79
  bolme_genislikleri = []
80
  sol_kenar_pozisyonu = 0
81
  for pozisyon in dikey_bolme_pozisyonlari:
@@ -83,24 +87,28 @@ def ana_fonksiyon(
83
  bolme_genislikleri.append(round(genislik_hesap, 2))
84
  sol_kenar_pozisyonu = pozisyon + T
85
  bolme_genislikleri.append(round(ic_genislik - sol_kenar_pozisyonu, 2))
86
-
87
  for i in range(bolme_sayisi):
88
  if bolme_raf_sayilari[i] > 0:
89
  parcalar.append([f"Raf - Bölme {i+1}", bolme_raf_sayilari[i], bolme_genislikleri[i], D, "Ön kenar bantlı", 1, 0])
90
 
91
- # --- DİĞER PARÇALAR VE BANTLAMA ---
92
  if arkalik_var_mi: parcalar.append(["Gövde - Arkalık (İnce)", 1, H, W, "Bantlanmaz", 0, 0])
 
93
  if int(kapak_sayisi) > 0:
94
- parcalar.append(["Kapak", int(kapak_sayisi), H - (2*float(kapak_bosluk)), round((W - (int(kapak_sayisi) + 1) * float(kapak_bosluk)) / int(kapak_sayisi), 2), "4 kenar bantlı", 2, 2])
 
 
 
 
95
 
96
- # YENİ: Çekmece hesabı artık seçilen bölmeye göre yapılıyor
97
  if int(cekmece_sayisi) > 0:
98
  cekmece_bolme_index = int(cekmece_bolme_secimi) - 1
99
- if cekmece_bolme_index >= len(bolme_genislikleri):
100
- raise ValueError("Seçilen çekmece bölmesi geçersiz.")
101
-
102
  aciklik_genisligi = bolme_genislikleri[cekmece_bolme_index]
103
- parcalar.append(["Çekmece - Ön Panel", int(cekmece_sayisi), float(cekmece_on_yuksekligi), round(aciklik_genisligi - 0.6, 2), f"{cekmece_bolme_secimi}. Bölme için, 4 kenar bantlı", 2, 2])
 
 
 
104
  kasa_yukseklik = float(cekmece_on_yuksekligi) - 2.5
105
  kasa_derinlik = D - 5
106
  kasa_dis_genislik = aciklik_genisligi - 2.6
@@ -108,7 +116,7 @@ def ana_fonksiyon(
108
  parcalar.append(["Çekmece - Kasa Ön/Arka", int(cekmece_sayisi) * 2, kasa_dis_genislik - (2*T), kasa_yukseklik, "Üst kenar bantlı", 1, 0])
109
  parcalar.append(["Çekmece - Kasa Altı (İnce)", int(cekmece_sayisi), kasa_dis_genislik, kasa_derinlik, "Bantlanmaz", 0, 0])
110
 
111
- # --- SONUÇLARI HAZIRLAMA ---
112
  df = pd.DataFrame(parcalar, columns=["Parça Adı", "Adet", "Uzunluk (cm)", "Genişlik (cm)", "Not", "Bant (Uzun)", "Bant (Kısa)"])
113
  toplam_alan_m2 = round(df[~df['Parça Adı'].str.contains('İnce')].apply(lambda r: r['Adet'] * r['Uzunluk (cm)'] * r['Genişlik (cm)'] / 10000, axis=1).sum(), 2)
114
  toplam_bant_m = round(df.apply(lambda r: r['Adet'] * (r['Bant (Uzun)'] * r['Uzunluk (cm)'] + r['Bant (Kısa)'] * r['Genişlik (cm)']) / 100, axis=1).sum(), 2)
@@ -121,7 +129,7 @@ def ana_fonksiyon(
121
  except Exception as e:
122
  return pd.DataFrame(), f"HATA: {e}", cizim_olustur(1,1,0.1,[],[],[])
123
 
124
- # --- Gradio Arayüzü (Güncellendi) ---
125
  MAX_BOLMELER = 5
126
 
127
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
@@ -129,12 +137,14 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
129
  gr.Markdown("Bu araç; kesim listesi, bantlama bilgisi, metraj hesabı ve görsel ön izleme sunar.")
130
  with gr.Row():
131
  with gr.Column(scale=2):
132
- gr.Markdown("### 1. Gövde ve Malzeme")
133
  genislik = gr.Number(label="Toplam Genişlik (cm)", value=200)
134
  yukseklik = gr.Number(label="Toplam Yükseklik (cm)", value=240)
135
  derinlik = gr.Number(label="Toplam Derinlik (cm)", value=60)
136
  kalinlik = gr.Number(label="Malzeme Kalınlığı (cm)", value=1.8)
 
137
  arkalik_var_mi = gr.Checkbox(label="Arkalık Eklensin mi?", value=True)
 
138
  with gr.Column(scale=3):
139
  gr.Markdown("### 2. İç Tasarım ve Yapılandırma")
140
  dikey_bolme_sayisi_slider = gr.Slider(minimum=0, maximum=MAX_BOLMELER, step=1, label="Dikey Bölme Sayısı", value=1)
@@ -144,6 +154,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
144
  with gr.Group():
145
  gr.Markdown("#### Bölmelere Göre Raf Sayıları (adet)")
146
  bolme_raf_sayisi_inputs = [gr.Number(label=f"{i+1}. Bölme Raf Sayısı", value=4, visible=False, precision=0) for i in range(MAX_BOLMELER + 1)]
 
147
  with gr.Column(scale=2):
148
  gr.Markdown("### 3. Kapak ve Çekmece")
149
  kapak_sayisi = gr.Slider(minimum=0, maximum=6, step=1, label="Kapak Sayısı", value=2)
@@ -151,8 +162,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
151
  gr.Markdown("---")
152
  cekmece_sayisi = gr.Slider(minimum=0, maximum=10, step=1, label="Çekmece Sayısı", value=0)
153
  cekmece_on_yuksekligi = gr.Number(label="Tek Çekmece Yüksekliği", value=20)
154
- # YENİ: Çekmece bölme seçimi menüsü
155
- cekmece_bolme_secimi = gr.Dropdown(label="Çekmece Hangi Bölmeye Eklensin?", choices=["1"], value="1", type="value")
156
 
157
  hesapla_btn = gr.Button("Hesapla, Çiz ve Bantlamayı Belirle", variant="primary")
158
  gr.Markdown("---")
@@ -166,11 +176,15 @@ with gr.Blocks(theme=gr.themes.Soft()) as demo:
166
  gr.Markdown("### Görsel Ön İzleme")
167
  sonuc_cizim = gr.Plot(label="Dolap İç Yapısı")
168
 
169
- # --- Bağlantılar (Güncellendi) ---
170
  dynamic_ui_components = dikey_bolme_pozisyon_inputs + bolme_raf_sayisi_inputs + [cekmece_bolme_secimi]
171
  dikey_bolme_sayisi_slider.change(fn=update_bolme_arayuzu, inputs=dikey_bolme_sayisi_slider, outputs=dynamic_ui_components)
172
 
173
- all_inputs = [genislik, yukseklik, derinlik, kalinlik, dikey_bolme_sayisi_slider, arkalik_var_mi, kapak_sayisi, kapak_bosluk, cekmece_sayisi, cekmece_on_yuksekligi, cekmece_bolme_secimi] + dikey_bolme_pozisyon_inputs + bolme_raf_sayisi_inputs
 
 
 
 
 
174
 
175
  hesapla_btn.click(fn=ana_fonksiyon, inputs=all_inputs, outputs=[sonuc_df, sonuc_metni, sonuc_cizim])
176
 
 
3
  import matplotlib.pyplot as plt
4
  from matplotlib.patches import Rectangle
5
 
6
+ # --- Çizim Fonksiyonu ---
7
  def cizim_olustur(W, H, T, bolme_pozisyonlari, bolme_genislikleri, bolme_raf_sayilari):
8
+ """Verilen ölçülere göre dolabın ön görünüşünü çizer."""
9
  try:
10
+ fig, ax = plt.subplots(figsize=(W/20, H/20)) # Boyutları orantılı yap
11
+
12
+ # 1. Ana Gövdeyi (Dış Çerçeveyi) Çiz
13
  ax.add_patch(Rectangle((0, 0), W, H, fill=None, edgecolor='black', linewidth=2))
14
  ax.add_patch(Rectangle((T, T), W - 2 * T, H - 2 * T, fill=None, edgecolor='gray', linewidth=1))
15
+
16
+ # 2. Dikey Bölmeleri Çiz
17
  for pozisyon in bolme_pozisyonlari:
18
  ax.add_patch(Rectangle((T + pozisyon, T), T, H - 2 * T, facecolor='#E0E0E0', edgecolor='gray', linewidth=1))
19
+
20
+ # 3. Rafları Çiz
21
  sol_kenar_x = T
22
  for i in range(len(bolme_genislikleri)):
23
  genislik = bolme_genislikleri[i]
24
  raf_sayisi = bolme_raf_sayilari[i]
25
+
26
  if raf_sayisi > 0:
27
  bolme_ic_yukseklik = H - 2 * T
28
  bosluk = bolme_ic_yukseklik / (raf_sayisi + 1)
29
  for j in range(raf_sayisi):
30
  raf_y = T + ((j + 1) * bosluk) - (T / 2)
31
  ax.add_patch(Rectangle((sol_kenar_x, raf_y), genislik, T, facecolor='#F0F0F0', edgecolor='gray', linewidth=1))
32
+
33
  sol_kenar_x += genislik + T
34
+
35
  ax.set_xlim(0, W); ax.set_ylim(0, H)
36
  ax.set_aspect('equal', adjustable='box'); ax.set_xticks([]); ax.set_yticks([])
37
  plt.title("Dolap İç Yapısı (Ön Görünüm)"); plt.tight_layout()
38
+
39
  return fig
40
  except Exception:
41
  fig, ax = plt.subplots(); ax.text(0.5, 0.5, 'Çizim oluşturulamadı.', ha='center'); return fig
42
 
43
+ # --- Arayüz Güncelleme Fonksiyonu ---
44
  def update_bolme_arayuzu(dikey_bolme_adedi):
45
  dikey_bolme_adedi = int(dikey_bolme_adedi)
46
  bolme_sayisi = dikey_bolme_adedi + 1
 
47
  updates = []
48
+ for i in range(MAX_BOLMELER): updates.append(gr.update(visible=i < dikey_bolme_adedi))
49
+ for i in range(MAX_BOLMELER + 1): updates.append(gr.update(visible=i < bolme_sayisi))
 
 
 
 
 
 
50
  bolme_choices = [str(i + 1) for i in range(bolme_sayisi)]
51
  updates.append(gr.update(choices=bolme_choices, value="1"))
 
52
  return updates
53
 
54
+ # --- Ana Hesaplama Fonksiyonu ---
55
  def ana_fonksiyon(
56
+ genislik, yukseklik, derinlik, kalinlik, bant_kalinligi,
57
  dikey_bolme_sayisi, arkalik_var_mi,
58
  kapak_sayisi, kapak_bosluk,
59
  cekmece_sayisi, cekmece_on_yuksekligi, cekmece_bolme_secimi,
 
61
  ):
62
  try:
63
  W, H, D, T = float(genislik), float(yukseklik), float(derinlik), float(kalinlik)
64
+ T_bant = float(bant_kalinligi) / 10 # mm'yi cm'ye çevir
65
  dikey_bolme_sayisi = int(dikey_bolme_sayisi)
66
  bolme_sayisi = dikey_bolme_sayisi + 1
67
  dikey_bolme_pozisyonlari = sorted([float(p) for p in dynamic_inputs[:dikey_bolme_sayisi]])
 
73
  if dikey_bolme_pozisyonlari and max(dikey_bolme_pozisyonlari) >= ic_genislik:
74
  raise ValueError(f"Bölme pozisyonu ({max(dikey_bolme_pozisyonlari)}cm) iç genişlikten ({ic_genislik}cm) büyük olamaz.")
75
 
76
+ # GÖVDE PARÇALARI VE BANTLAMA
77
  parcalar.append(["Gövde - Yan Panel", 2, H, D, "Ön ve alt kenar bantlı", 1, 1])
78
  parcalar.append(["Gövde - Alt/Üst Panel", 2, ic_genislik, D, "Ön kenar bantlı", 1, 0])
79
  if dikey_bolme_sayisi > 0:
80
  parcalar.append(["Gövde - Dikey Bölme", dikey_bolme_sayisi, H - 2 * T, D, "Ön kenar bantlı", 1, 0])
81
 
82
+ # BÖLME GENİŞLİKLERİ VE RAFLAR
83
  bolme_genislikleri = []
84
  sol_kenar_pozisyonu = 0
85
  for pozisyon in dikey_bolme_pozisyonlari:
 
87
  bolme_genislikleri.append(round(genislik_hesap, 2))
88
  sol_kenar_pozisyonu = pozisyon + T
89
  bolme_genislikleri.append(round(ic_genislik - sol_kenar_pozisyonu, 2))
 
90
  for i in range(bolme_sayisi):
91
  if bolme_raf_sayilari[i] > 0:
92
  parcalar.append([f"Raf - Bölme {i+1}", bolme_raf_sayilari[i], bolme_genislikleri[i], D, "Ön kenar bantlı", 1, 0])
93
 
94
+ # DİĞER PARÇALAR VE BANTLAMA
95
  if arkalik_var_mi: parcalar.append(["Gövde - Arkalık (İnce)", 1, H, W, "Bantlanmaz", 0, 0])
96
+
97
  if int(kapak_sayisi) > 0:
98
+ hedef_yukseklik = H - (2 * float(kapak_bosluk))
99
+ hedef_genislik = (W - (int(kapak_sayisi) + 1) * float(kapak_bosluk)) / int(kapak_sayisi)
100
+ kesim_yuksekligi = round(hedef_yukseklik - (2 * T_bant), 2)
101
+ kesim_genisligi = round(hedef_genislik - (2 * T_bant), 2)
102
+ parcalar.append(["Kapak", int(kapak_sayisi), kesim_yuksekligi, kesim_genisligi, "4 kenar bantlı (ölçüden düşüldü)", 2, 2])
103
 
 
104
  if int(cekmece_sayisi) > 0:
105
  cekmece_bolme_index = int(cekmece_bolme_secimi) - 1
106
+ if cekmece_bolme_index >= len(bolme_genislikleri): raise ValueError("Geçersiz çekmece bölmesi.")
 
 
107
  aciklik_genisligi = bolme_genislikleri[cekmece_bolme_index]
108
+ hedef_cekmece_genislik = aciklik_genisligi - (2 * float(kapak_bosluk))
109
+ kesim_cekmece_genislik = round(hedef_cekmece_genislik - (2 * T_bant), 2)
110
+ parcalar.append(["Çekmece - Ön Panel", int(cekmece_sayisi), float(cekmece_on_yuksekligi) - (2*T_bant), kesim_cekmece_genislik, f"{cekmece_bolme_secimi}. Bölme, 4 kenar bantlı", 2, 2])
111
+
112
  kasa_yukseklik = float(cekmece_on_yuksekligi) - 2.5
113
  kasa_derinlik = D - 5
114
  kasa_dis_genislik = aciklik_genisligi - 2.6
 
116
  parcalar.append(["Çekmece - Kasa Ön/Arka", int(cekmece_sayisi) * 2, kasa_dis_genislik - (2*T), kasa_yukseklik, "Üst kenar bantlı", 1, 0])
117
  parcalar.append(["Çekmece - Kasa Altı (İnce)", int(cekmece_sayisi), kasa_dis_genislik, kasa_derinlik, "Bantlanmaz", 0, 0])
118
 
119
+ # SONUÇLARI HAZIRLAMA
120
  df = pd.DataFrame(parcalar, columns=["Parça Adı", "Adet", "Uzunluk (cm)", "Genişlik (cm)", "Not", "Bant (Uzun)", "Bant (Kısa)"])
121
  toplam_alan_m2 = round(df[~df['Parça Adı'].str.contains('İnce')].apply(lambda r: r['Adet'] * r['Uzunluk (cm)'] * r['Genişlik (cm)'] / 10000, axis=1).sum(), 2)
122
  toplam_bant_m = round(df.apply(lambda r: r['Adet'] * (r['Bant (Uzun)'] * r['Uzunluk (cm)'] + r['Bant (Kısa)'] * r['Genişlik (cm)']) / 100, axis=1).sum(), 2)
 
129
  except Exception as e:
130
  return pd.DataFrame(), f"HATA: {e}", cizim_olustur(1,1,0.1,[],[],[])
131
 
132
+ # --- Gradio Arayüzü ---
133
  MAX_BOLMELER = 5
134
 
135
  with gr.Blocks(theme=gr.themes.Soft()) as demo:
 
137
  gr.Markdown("Bu araç; kesim listesi, bantlama bilgisi, metraj hesabı ve görsel ön izleme sunar.")
138
  with gr.Row():
139
  with gr.Column(scale=2):
140
+ gr.Markdown("### 1. Üretim Detayları")
141
  genislik = gr.Number(label="Toplam Genişlik (cm)", value=200)
142
  yukseklik = gr.Number(label="Toplam Yükseklik (cm)", value=240)
143
  derinlik = gr.Number(label="Toplam Derinlik (cm)", value=60)
144
  kalinlik = gr.Number(label="Malzeme Kalınlığı (cm)", value=1.8)
145
+ bant_kalinligi = gr.Dropdown(label="Bant Kalınlığı (mm)", choices=[0.4, 0.8, 1, 2], value=1, type="value")
146
  arkalik_var_mi = gr.Checkbox(label="Arkalık Eklensin mi?", value=True)
147
+
148
  with gr.Column(scale=3):
149
  gr.Markdown("### 2. İç Tasarım ve Yapılandırma")
150
  dikey_bolme_sayisi_slider = gr.Slider(minimum=0, maximum=MAX_BOLMELER, step=1, label="Dikey Bölme Sayısı", value=1)
 
154
  with gr.Group():
155
  gr.Markdown("#### Bölmelere Göre Raf Sayıları (adet)")
156
  bolme_raf_sayisi_inputs = [gr.Number(label=f"{i+1}. Bölme Raf Sayısı", value=4, visible=False, precision=0) for i in range(MAX_BOLMELER + 1)]
157
+
158
  with gr.Column(scale=2):
159
  gr.Markdown("### 3. Kapak ve Çekmece")
160
  kapak_sayisi = gr.Slider(minimum=0, maximum=6, step=1, label="Kapak Sayısı", value=2)
 
162
  gr.Markdown("---")
163
  cekmece_sayisi = gr.Slider(minimum=0, maximum=10, step=1, label="Çekmece Sayısı", value=0)
164
  cekmece_on_yuksekligi = gr.Number(label="Tek Çekmece Yüksekliği", value=20)
165
+ cekmece_bolme_secimi = gr.Dropdown(label="Çekmece Hangi Bölmeye?", choices=["1"], value="1", type="value")
 
166
 
167
  hesapla_btn = gr.Button("Hesapla, Çiz ve Bantlamayı Belirle", variant="primary")
168
  gr.Markdown("---")
 
176
  gr.Markdown("### Görsel Ön İzleme")
177
  sonuc_cizim = gr.Plot(label="Dolap İç Yapısı")
178
 
 
179
  dynamic_ui_components = dikey_bolme_pozisyon_inputs + bolme_raf_sayisi_inputs + [cekmece_bolme_secimi]
180
  dikey_bolme_sayisi_slider.change(fn=update_bolme_arayuzu, inputs=dikey_bolme_sayisi_slider, outputs=dynamic_ui_components)
181
 
182
+ all_inputs = [
183
+ genislik, yukseklik, derinlik, kalinlik, bant_kalinligi,
184
+ dikey_bolme_sayisi_slider, arkalik_var_mi,
185
+ kapak_sayisi, kapak_bosluk,
186
+ cekmece_sayisi, cekmece_on_yuksekligi, cekmece_bolme_secimi
187
+ ] + dikey_bolme_pozisyon_inputs + bolme_raf_sayisi_inputs
188
 
189
  hesapla_btn.click(fn=ana_fonksiyon, inputs=all_inputs, outputs=[sonuc_df, sonuc_metni, sonuc_cizim])
190