π΅ ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Python: ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Python, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ **curses**. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
import curses
def main(stdscr):
# ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ curses
curses.initscr()
# ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΡΠ°
curses.curs_set(0)
# ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΎΠΊΠ½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ
height, width = stdscr.getmaxyx()
# Π Π°ΡΡΠ΅Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠ΅Π½ΡΡΠ° ΠΎΠΊΠ½Π°
x = width // 2
y = height // 2
# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ
button = curses.newwin(3, 10, y, x - 5)
# ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΡΡ
Π΅ΠΌΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ
button.bkgd(curses.color_pair(1))
# ΠΡΠ²ΠΎΠ΄ ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅
button.addstr(1, 3, "ΠΠ°ΠΆΠΌΠΈ")
# ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΊΠ½Π°
button.refresh()
# ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ
stdscr.getch()
# ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
curses.wrapper(main)
ΠΡΠΎΡ ΠΊΠΎΠ΄ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠΊΠ½ΠΎ Π² ΡΠ΅Π½ΡΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΈ Π½Π°ΡΠΈΡΡΠ΅Ρ ΠΊΠ½ΠΎΠΏΠΊΡ Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ "ΠΠ°ΠΆΠΌΠΈ". ΠΠΎΠ³Π΄Π° ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΏΡΠΎΠΆΠΌΠ΅ΡΡΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΊΠΎΠ½ΡΠΈΡ ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Python
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Python ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ncurses. Ncurses ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ncurses:
import curses
def main(stdscr):
# ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΠ²Π΅ΡΠ°
curses.start_color()
# ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠ²Π΅ΡΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΡ
curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE)
# ΠΡΠΈΡΠ°Π΅ΠΌ ΡΠΊΡΠ°Π½
stdscr.clear()
# ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΠ½Π°
height, width = stdscr.getmaxyx()
# ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ
button_y = height // 2
button_x = (width - 12) // 2
button_width = 12
# Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ
button = curses.newwin(1, button_width, button_y, button_x)
# ΠΠΊΠ»ΡΡΠ°Π΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΡ
button.attron(curses.color_pair(1))
# ΠΠ°ΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΡ ΡΠ΅ΠΊΡΡΠΎΠΌ
button.addstr(0, 0, "ΠΠ°ΠΆΠΌΠΈ ΠΌΠ΅Π½Ρ")
# ΠΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΠΊΡΠ°Π½
stdscr.refresh()
# ΠΠ΄Π΅ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ
stdscr.getch()
curses.wrapper(main)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ncurses Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ. `curses.start_color()` Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΡΠ²Π΅ΡΠΎΠ² Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅, Π° `curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE)` ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠ²Π΅ΡΠΎΠ²ΡΡ ΠΏΠ°ΡΡ Ρ ΡΠ΅ΡΠ½ΡΠΌ ΡΠΎΠ½ΠΎΠΌ ΠΈ Π±Π΅Π»ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ ΡΠ΅ΠΊΡΡΠ° Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ.
ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΎΡΠΈΡΠ°Π΅ΠΌ ΡΠΊΡΠ°Π½, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΠ½Π° ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ. `curses.newwin(1, button_width, button_y, button_x)` ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΠΌΠΈ.
ΠΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΏΠ°ΡΡ Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ `button.attron(curses.color_pair(1))`, Π° Π·Π°ΡΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ `button.addstr(0, 0, "ΠΠ°ΠΆΠΌΠΈ ΠΌΠ΅Π½Ρ")`.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΠΊΡΠ°Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ `stdscr.refresh()` ΠΈ ΠΆΠ΄Π΅ΠΌ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ»Π°Π²ΠΈΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ `stdscr.getch()`.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π² Π²Π°ΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ Python ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΡΠΎΠ·Π΄Π°Π»ΠΈ.
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π±ΡΠ»Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π΄Π»Ρ Π²Π°Ρ! Π£Π΄Π°ΡΠΈ Π² ΠΈΠ·ΡΡΠ΅Π½ΠΈΠΈ Python!