下面的代码可让您使用箭头键"."在屏幕上的小网格中走动.你在哪里探索过或者在旁边.即使我在第一次getch之前刷新(获得一个击键),屏幕也不会先显示任何内容,直到你离开你的起始位置.不应该立即显示addstr然后刷新然后getch等待吗?我甚至尝试添加一个stdscr.refresh(),但这也没有帮助.如何在等待第一个击键之前立即刷新屏幕?
import curses
def start(stdscr):
curses.curs_set(0)
movement = curses.newpad(10, 10)
cur_x, cur_y = 5, 5
while True:
movement.addstr(cur_y, cur_x, '@')
for (x_off, y_off) in [(-1,0),(1,0),(0,-1),(0,1)]:
movement.addstr(cur_y + y_off, cur_x + x_off, '.')
movement.refresh(1, 1, 0, 0, 7, 7) #Nothing is displayed until after the first key-stroke
key_stroke = stdscr.getch()
move_attempt = False
if 0 < key_stroke < 256:
key_stroke = chr(key_stroke)
elif key_stroke == curses.KEY_UP and cur_y > 1:
cur_y -= 1
elif key_stroke == curses.KEY_DOWN and cur_y < 8: …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个如何curses.panel用来维护重叠窗口的例子.
我正在尝试npyscreen在 python 中创建一个简单的curses应用程序,该应用程序请求用户在一个屏幕上输入,然后在另一个屏幕上为用户验证它。
大多数情况下,这是为了理解如何在 内部存储和检索值npyscreen。我确信我错过了一些简单的东西,但我无法在文档中找到(或理解?)答案。
下面的示例代码将无法正确传递值:
#!/usr/bin/env python3.5
import npyscreen as np
class EmployeeForm(np.Form):
def afterEditing(self):
self.parentApp.switchForm('CONFIRMFM')
def create(self):
self.myName = self.add(np.TitleText, name='Name')
self.myDepartment = self.add(np.TitleSelectOne, scroll_exit=True, max_height=3, name='Department', values = ['Department 1', 'Department 2', 'Department 3'])
self.myDate = self.add(np.TitleDateCombo, name='Date Employed')
class EmployeeConfirmForm(np.Form):
def afterEditing(self):
self.parentApp.setNextForm(None)
def create(self):
self.value = None
self.wgName = self.add(np.TitleText, name = "Name:",)
self.wgDept = self.add(np.TitleText, name = "Dept:")
self.wgEmp = self.add(np.TitleText, name = "Employed:")
def beforeEditing(self):
if self.value:
self.name = …Run Code Online (Sandbox Code Playgroud) 我有一个要求人们输入用户名和密码的应用程序。我希望他们能够仅按Enter键即可发送名称和密码。为此,我做到了:
import curses, curses.textpad
def setup_input():
inp = curses.newwin(8,55, 0,0)
inp.addstr(1,1, "Please enter your username:")
sub = inp.subwin(2,1)
sub.border()
sub2 = sub.subwin(3,2)
global tb
tb = curses.textpad.Textbox(sub2)
inp.refresh()
tb.edit(enter_is_terminate)
def enter_is_terminate(x):
if x == 10:
tb.do_command(7)
tb.do_command(x)
setup_input()
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不能按预期工作。终止的标准字符(由CTRL + G触发)为7,输入字符为10,但是使用上面的代码,所有其他键仍然可以正确处理,但是当我按Enter键时,它只是给我换行符,而不是终止文本框的编辑模式。我究竟做错了什么?
我正在考虑使用 pythoncurses和rich库创建一个 CLI 应用程序。由于curses需要addstr将文本打印到字符串的方法,我无法使用rich. 是否可以集成这两个库?
以下代码不起作用!
import curses
from curses import wrapper
from rich.console import Console
console = Console()
with console.capture() as capture:
console.print("[bold red]Hello[/] World")
str_output = capture.get()
def main(stdscr):
stdscr.clear()
stdscr.addstr(str_output)
stdscr.refresh()
stdscr.getch()
wrapper(main)
Run Code Online (Sandbox Code Playgroud)