Python 分别使用诅咒控制多个菜单
一直在试图找出如何在诅咒中的两个独立菜单之间切换,但遇到了一些困难 我有两个菜单,如下所示:Python 分别使用诅咒控制多个菜单,python,python-3.x,ncurses,curses,Python,Python 3.x,Ncurses,Curses,一直在试图找出如何在诅咒中的两个独立菜单之间切换,但遇到了一些困难 我有两个菜单,如下所示: # 1st Window. def mainMenu(root, current_row, h, w): curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE) main_win = curses.newwin(h - 1, w // 2, 1, 1) main_win.border() main_opt
# 1st Window.
def mainMenu(root, current_row, h, w):
curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE)
main_win = curses.newwin(h - 1, w // 2, 1, 1)
main_win.border()
main_options = ["Enter data", "View data", "Exit"]
for idx, element in enumerate(main_options):
x = 1 + idx
y = 1
if idx == current_row:
main_win.attron(curses.color_pair(1))
main_win.addstr(y, x, element)
main_win.attroff(curses.color_pair(1))
else:
main_win.addstr(y, x, element)
main_win.refresh()
# 2nd window.
def secondMenu(root, current_row, h, w):
curses.init_pair(1, curses.COLOR_BLACK, curses.COLOR_WHITE)
second_win = curses.newwin(h - 1, w // 2, 1, w // 2 + 1)
second_win.border()
second_options = ["Option 1", "Option 2", "Option 3"]
for idx, element in enumerate(second_options):
x = 1 + idx
y = 1
if idx == current_row:
second_win.attron(curses.color_pair(1))
second_win.addstr(y, x, element)
second_win.attroff(curses.color_pair(1))
else:
second_win.addstr(y, x, element)
second_win.refresh()
def main(root):
curses.curs_set(0)
h, w = root.getmaxyx()
current_row = 0
mainMenu(root, current_row, h, w)
while True:
key = root.getch()
if key == curses.KEY_UP and current_row > 0:
current_row -= 1
elif key == curses.KEY_DOWN and current_row < 2:
current_row += 1
elif key == ord("q"):
break
mainMenu(root, current_row, h, w)
secondMenu(root, current_row, h, w)
root.refresh()
curses.wrapper(main)
#第一个窗口。
def主菜单(根、当前行、h、w):
curses.init\u对(1,curses.COLOR\u黑色,curses.COLOR\u白色)
main_win=curses.newwin(h-1,w//2,1,1)
梅因·温·博德()
主选项=[“输入数据”、“查看数据”、“退出”]
对于idx,枚举中的元素(主选项):
x=1+idx
y=1
如果idx==当前_行:
main_win.attron(诅咒。颜色_对(1))
main_win.addstr(y、x、元素)
main_win.attroff(诅咒。颜色_对(1))
其他:
main_win.addstr(y、x、元素)
main_win.refresh()
#第二个窗口。
def第二菜单(根、当前行、h、w):
curses.init\u对(1,curses.COLOR\u黑色,curses.COLOR\u白色)
second_-win=curses.newwin(h-1,w//2,1,w//2+1)
第二次胜利
第二个选项=[“选项1”、“选项2”、“选项3”]
对于idx,枚举中的元素(第二个选项):
x=1+idx
y=1
如果idx==当前_行:
第二个胜利。阿特伦(诅咒。颜色对(1))
第二个胜利。添加str(y,x,元素)
第二个胜利。阿特洛夫(诅咒。颜色对(1))
其他:
第二个胜利。添加str(y,x,元素)
第二次胜利刷新()
def主(根):
诅咒。诅咒集(0)
h、 w=根目录。getmaxyx()
当前行=0
主菜单(根、当前行、h、w)
尽管如此:
key=root.getch()
如果key==curses.key\u UP且当前行>0:
当前_行-=1
elif key==curses.key\u DOWN和当前\u行<2:
当前_行+=1
elif键==ord(“q”):
打破
主菜单(根、当前行、h、w)
第二菜单(根、当前行、h、w)
root.refresh()
curses.wrapper(主)
这将输出一个垂直排列的菜单,在两个窗口上都可以高亮显示。但是,当我输入时,两个菜单同时滚动。我不确定如何将控件隔离到一个窗口或另一个窗口。非常感谢您的帮助。问题是
如何将控件隔离到一个窗口或另一个窗口
curses库将光标移动到窗口中调用getch
的当前位置。您的示例在每种情况下都使用根窗口,并在每次getch
调用后重新创建这两个菜单(使用其引用被丢弃的newwin
创建一个新窗口)。您可以在菜单之间切换(例如,当您读取制表符时),而不是创建(并丢弃窗口信息),预先执行newwin
,并在循环中使用main\u win
或second\u win
变量