{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f6407a4e",
   "metadata": {},
   "source": [
    "# 16-19 · filedialog i pathlib\n",
    "\n",
    "Praktyka do sekcji [„Otwieramy i zapisujemy pliki: filedialog i pathlib”](/pl/chapters/rozdzial-16/16-19-filedialog-i-pathlib.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "249885ea",
   "metadata": {},
   "source": [
    "## Cel\n",
    "\n",
    "Poprawnie załatw anulowanie dialogu przed pracą nad ścieżką."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b7fbf159",
   "metadata": {},
   "source": [
    "## Pro mainloop() w tym laptopie\n",
    "\n",
    "W normalnym życiu `.py`- pliku aplikacja jest uruchamiana przez `root.mainloop()` - To polecenie „zamraża” `root.mainloop()` zadzwonimy `root.update()` (obsługuje zdarzenia raz, bez oczekiwania) a następnie `root.destroy()` — interfejs buduje się dokładnie tak samo, po prostu bez nieskończonego oczekiwania na końcu."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9fa86779",
   "metadata": {},
   "source": [
    "## Pro filedialog w tym laptopie\n",
    "\n",
    "Okno wyboru pliku czeka na użytkownika na żywo. W automatycznie uruchamianym laptopie niezbędne funkcje `filedialog` tymczasowo zastępowane przez przygotowane odpowiedzi."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9af9f865",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T21:45:16.682897Z",
     "iopub.status.busy": "2026-08-18T21:45:16.682791Z",
     "iopub.status.idle": "2026-08-18T21:45:16.746284Z",
     "shell.execute_reply": "2026-08-18T21:45:16.745728Z"
    }
   },
   "outputs": [],
   "source": [
    "from tkinter import filedialog\n",
    "\n",
    "filedialog.askopenfilename = lambda *args, **kwargs: ''"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "83ae39a3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T21:45:16.747441Z",
     "iopub.status.busy": "2026-08-18T21:45:16.747302Z",
     "iopub.status.idle": "2026-08-18T21:45:16.750526Z",
     "shell.execute_reply": "2026-08-18T21:45:16.750009Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Отмена обработана корректно: True\n"
     ]
    }
   ],
   "source": [
    "from pathlib import Path\n",
    "\n",
    "filename = filedialog.askopenfilename()\n",
    "if not filename:\n",
    "    otmena_obrabotana = True\n",
    "else:\n",
    "    otmena_obrabotana = False\n",
    "    Path(filename).read_text(encoding=\"utf-8\")\n",
    "\n",
    "print(\"Отмена обработана корректно:\", otmena_obrabotana)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90769c38",
   "metadata": {},
   "source": [
    "## Podstawowa praktyka - Pomyślny ★ wybór pliku"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3d10b2cb",
   "metadata": {},
   "source": [
    "## Pro filedialog w tym laptopie\n",
    "\n",
    "Okno wyboru pliku czeka na użytkownika na żywo. W automatycznie uruchamianym laptopie niezbędne funkcje `filedialog` tymczasowo zastępowane przez przygotowane odpowiedzi."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a2621410",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T21:45:16.753338Z",
     "iopub.status.busy": "2026-08-18T21:45:16.753216Z",
     "iopub.status.idle": "2026-08-18T21:45:16.756455Z",
     "shell.execute_reply": "2026-08-18T21:45:16.755572Z"
    }
   },
   "outputs": [],
   "source": [
    "from tkinter import filedialog\n",
    "\n",
    "filedialog.askopenfilename = lambda *args, **kwargs: 'privet_gui.txt'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "cb7ea77a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-18T21:45:16.757751Z",
     "iopub.status.busy": "2026-08-18T21:45:16.757620Z",
     "iopub.status.idle": "2026-08-18T21:45:16.760565Z",
     "shell.execute_reply": "2026-08-18T21:45:16.760068Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Привет из GUI!\n"
     ]
    }
   ],
   "source": [
    "from pathlib import Path\n",
    "\n",
    "Path(\"privet_gui.txt\").write_text(\"Привет из GUI!\", encoding=\"utf-8\")\n",
    "\n",
    "filename = filedialog.askopenfilename()\n",
    "if filename:\n",
    "    text = Path(filename).read_text(encoding=\"utf-8\")\n",
    "print(text)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Cartesian Python 3.14",
   "language": "python",
   "name": "cartesian-python314"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
