簡體   English   中英

按鍵不適用於 Urwid 中的編輯小部件

[英]Keypress not working for Edit widget in Urwid

我正在嘗試使用 Urwid 在 Python 中制作終端應用程序。

import urwid
class Guess():
    def __init__(self):
        self.guess = urwid.Edit(align='center')

    def keypress(self, size, key):
        if key.lower() == 'enter':
            user_guess = self.guess.edit_text
            self.guess.edit_text = " "
            self.check_guess(user_guess)

這是我需要用戶輸入的部分,然后我需要將其發送到另一個函數。

keypress()方法的文檔根本沒有幫助。 我查看了其他人的代碼,並使用上述方法進行了嘗試,以及我在網上沖浪時發現的其他一些方法,但沒有運氣。

有人可以向我解釋keypress()方法的確切功能以及如何實現我想要的嗎?

urwid 是Python 的控制台用戶界面庫

如果你想跟蹤 kyepress 試試下面,

pip install keyboard

導入鍵盤 # 使用模塊鍵盤

def keypress(self, size, key):
    if keyboard.is_pressed('enter'):
        user_guess = self.guess.edit_text
        self.guess.edit_text = " "
        self.check_guess(user_guess)

keypress 是 Edit 類的內部方法,這個

class Guess():
    def __init__(self):
        self.guess = urwid.Edit(align='center')

必須更改為此才能從 Edit 繼承

class Guess(urwid.Filler)

這是您自己的按鍵實現必須從 Edit 繼承,從

def keypress(self, size, key):
    if key.lower() == 'enter':

對此

    # keep same behavior as in keypress in Edit
    return super(Guess, self).keypress(size, key)

整個程序會這樣

import urwid


def exit_on_q(key):
    if key in ('q', 'Q'):
        raise urwid.ExitMainLoop()


# class is inheritance of Filler class Edit
class Guess(urwid.Filler):

    def keypress(self, size, key):
        if key.lower() == 'enter':
            # your own implementation of keypress after enter
            user_guess = guess.edit_text
            self.original_widget = urwid.Text('your guess: {},     Q(q)uit'.format(user_guess))
            return
        # keep same behavior as in keypress in Edit
        return super(Guess, self).keypress(size, key)


# Edit(with internal keypress()
guess = urwid.Edit('guess who?', align='center')
filler = Guess(guess)
loop = urwid.MainLoop(filler, unhandled_input=exit_on_q)
loop.run()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM