基于curses的滑块UI

6 投票
1 回答
1472 浏览
提问于 2025-04-17 06:58

作为一个学习项目,我想用ncurses这个库来为我想的一个程序做个界面,这个程序是用python写的。

我查看了urwid的文档,但我找不到办法来创建一个简单的滑块(我需要它来做音量调节滑块),而且这个滑块需要能用鼠标调整。

我是不是漏掉了什么在urwid里,还是说有其他更方便的curses模块可以用来做这样的滑块呢?

1 个回答

2

Curses是一个非常底层的接口,早在1980年代的C语言编程就已经出现了。

Python的封装虽然提供了一些更高级的功能,比如键盘输入和其他一些小功能,但这些功能不多,而且文档也不太好找。

不过,Python的这些小功能并不包括鼠标支持(好吧,你可以通过一个元组得到鼠标的状态,而不是像C语言那样需要创建一个结构体,所以这算是稍微好一点)。

使用Curses时,你需要:

  • 启用一个Curses窗口
  • 启用“键盘模式”,这样Python就能给你完整的按键代码
  • 启用“鼠标掩码”,这样鼠标事件才能发送到你的应用程序
  • 在getch函数中检测特殊的“mouse_key”键盘代码
  • 这样你就可以调用“getmouse”来获取鼠标的坐标和按钮状态。

所以没有现成的好用的回调函数,你需要自己设置应用程序的主循环来检测鼠标事件。

下面的示例代码展示了如何读取鼠标事件并将鼠标状态打印到屏幕上——这应该能帮助你开始使用Curses进行一些有用的鼠标处理:

# -*- coding: utf-8 -*-
import curses

screen = curses.initscr()
curses.noecho()
curses.mousemask(curses.ALL_MOUSE_EVENTS)

screen.keypad(1)

char = ""

try:
    while True:
        char = screen.getch()

        screen.addstr( str(char) + " ")
        if char == curses.KEY_MOUSE:
            screen.addstr (" |" + str(curses.getmouse()) + "| ")

finally:
    screen.keypad(0)
    curses.endwin()

    curses.echo()

撰写回答