Я пишу ncurses GUI для приложения. У меня следующий код в файл admin.py
:Python: ncurses не печатает значение, переданное функции
#-*- coding: utf-8 -*-
import curses.textpad
from gui_helpers import *
import global_vars as g
def parse_command(win, command):
# print_str(win, 0, 0, command)
if command == "help":
print_str(win, 1, 1, "Available commands: add - adds a board, list - lists boards, mkdir - makes board directory")
def display_admin_screen(win, keypress):
rows = win.getmaxyx()[0]
cols = win.getmaxyx()[1]
print_str_center(win, 0, 1, "Admin interface", g.RED|g.BOLD)
print_str(win, 1, 0, "Command line")
textpad_win = win.subwin(1, cols - 1, 3, 1)
output_win = win.subwin(5, cols - 1, 5, 1)
output_win.refresh()
textpad_win.refresh()
win.refresh()
curses.curs_set(1)
textpad = curses.textpad.Textbox(textpad_win)
textpad.stripspaces = 0
textpad_win.move(0,0)
textpad.edit()
command = textpad.gather()
parse_command(output_win, command)
# print_str(output_win, 0, 0, command)
textpad_win.clear()
curses.curs_set(0)
Сама (функция display_admin_screen()
) код выполняется в цикле в файле gui.py
, который имеет все необходимые импорта библиотеки:
while True:
keypress = stdscr.getch()
display_title_bar(stdscr)
if g.STATE == 'motd':
display_motd(working_win, keypress)
elif g.STATE == 'boards':
boards_view.display_threads(working_win, g.SELECTED_BOARD, keypress)
elif g.STATE == 'admin':
admin.display_admin_screen(working_win, keypress)
working_win.refresh()
stdscr.refresh()
У меня проблема m имеет то, что когда я набираю 'help' в текстовом поле в admin.py
, ничего не происходит. Он должен отображать текст справки в output_win
. Я проверил, что значение правильно передается функции parse_command()
и что это правильное значение. Я думал, что это может быть проблема с созданием подокнов внутри цикла, поэтому я попытался создать их в gui.py
вне цикла и передать их функции, но безрезультатно. Если я просто скажу функции parse_command()
, чтобы написать что-то в окне вывода, это не создает никаких проблем. По какой-то причине блок if
кажется проблемой.
Боюсь, что это не так. Я пробовал комментировать «stdscr.getch()» полностью, перемещая его вокруг цикла и даже комментируя «stdscr.refresh()», но ничего не помогло. Команда 'if command ==" help ":' по какой-то причине не выполняется, а сама функция вызывается с правильными аргументами. – makos