我正在使用urwid,它是一個用於在ncurses中設計終端用戶界面的Python「框架」。有一件事,雖然我不能在詛咒中輕鬆實現urwid,但使光標不可見。就像現在這樣,選擇按鈕時光標是可見的,而且看起來很醜陋。有沒有辦法禁用它?Urwid:使光標不可見
6
A
回答
2
2
我同意在urwid.Button
上閃爍的光標看起來有點跛腳,所以我想出了一個解決方案來隱藏它。在urwid中,Button
類只是WidgetWrap
的一個子類,其中包含SelectableIcon
和兩個文本小部件(包含「<」和「>」)。這是SelectableIcon
類,默認情況下,該類將光標位置設置爲標籤的第一個字符。通過繼承SelectableIcon
,修改光標位置,然後將其包裝到urwid.WidgetWrap
子類中,您可以創建自己的自定義按鈕,該按鈕可以執行內置的Button
甚至更多的所有技巧。
這裏是它在我的項目中的樣子。
import urwid
class ButtonLabel(urwid.SelectableIcon):
def __init__(self, text):
"""
Here's the trick:
we move the cursor out to the right of the label/text, so it doesn't show
"""
curs_pos = len(text) + 1
urwid.SelectableIcon.__init__(self, text, cursor_position=curs_pos)
接下來,你可以用任何其它物品一起裹ButtonLabel
對象爲WidgetWrap
子類,這將是你的自定義按鈕。
class FixedButton(urwid.WidgetWrap):
_selectable = True
signals = ["click"]
def __init__(self, label):
self.label = ButtonLabel(label)
# you could combine the ButtonLabel object with other widgets here
display_widget = self.label
urwid.WidgetWrap.__init__(self, urwid.AttrMap(display_widget, None, focus_map="button_reversed"))
def keypress(self, size, key):
"""
catch all the keys you want to handle here
and emit the click signal along with any data
"""
pass
def set_label(self, new_label):
# we can set the label at run time, if necessary
self.label.set_text(str(new_label))
def mouse_event(self, size, event, button, col, row, focus):
"""
handle any mouse events here
and emit the click signal along with any data
"""
pass
在這段代碼,實際上是不是在FixedButton
WidgetWrap
子控件的多組合,但你可以添加一個「[
」和「]
」的按鈕的邊緣,將它包裝成一個LineBox
,等等。如果所有這些都是多餘的,您可以將事件處理函數移動到ButtonLabel
類中,並使其在點擊時發出信號。
要逆轉時,其上的用戶移動,把它包裝成AttrMap
並設置focus_map
一些調色板項(「button_reversed
」,在我的情況)按鈕。
0
隨着醉拳的答案的線條,而是用「微創手術」:
class ButtonLabel(urwid.SelectableIcon):
'''
use Drunken Master's trick to move the cursor out of view
'''
def set_text(self, label):
'''
set_text is invoked by Button.set_label
'''
self.__super.set_text(label)
self._cursor_position = len(label) + 1
class MyButton(urwid.Button):
'''
- override __init__ to use our ButtonLabel instead of urwid.SelectableIcon
- make button_left and button_right plain strings and variable width -
any string, including an empty string, can be set and displayed
- otherwise, we leave Button behaviour unchanged
'''
button_left = "["
button_right = "]"
def __init__(self, label, on_press=None, user_data=None):
self._label = ButtonLabel("")
cols = urwid.Columns([
('fixed', len(self.button_left), urwid.Text(self.button_left)),
self._label,
('fixed', len(self.button_right), urwid.Text(self.button_right))],
dividechars=1)
super(urwid.Button, self).__init__(cols)
if on_press:
urwid.connect_signal(self, 'click', on_press, user_data)
self.set_label(label)
在這裏,我們只能修改按鈕的外觀,但否則保留其行爲不變。
相關問題
- 1. 如何讓鼠標光標不可見?
- 2. Android編輯文本光標不可見?
- 3. EDITTEXT光標不可見的Android
- 4. 的Android EDITTEXT光標不可見
- 5. 定製文本光標不可見EditText
- 6. 即使EditText不可編輯,EditText光標仍可見
- 7. 如何使標籤可見/不可見?
- 8. 使窗口控制檯光標不可見與python ctypes模塊
- 9. 製作第一個EditText光標可見
- 10. android editText是否可見光標?
- 11. ios7中的光標可見性問題
- 12. 使鼠標光標在NSTextField中輸入時保持可見
- 13. Flash - 右鍵單擊上下文菜單鼠標光標在使用自定義光標時不可見
- 14. python/urwid ListBox對象不可調用
- 15. Html.DropDownListFor使可見/不可見
- 16. 爲什麼提示在光標懸停時不可見?
- 17. 光標在HTC設備的EditText中不可見
- 18. 當沒有文本時,光標在EditText中不可見
- 19. 設置SetCursorVisible(false)後,編輯文本光標不可見
- 20. 光標(插入符號)在contenteditable div中不可見
- 21. Android 4.0 EditText光標始終是不可見的editable = false
- 22. 在OpenGL中使光源可見
- 23. 在ScrolledWindow中滾動TextView,使得光標在pyGTK2中可見
- 24. 使ActionBar圖標動態可見/不可見
- 25. 使標籤在Delphi中可見/不可見
- 26. Javascript:使一個div可見/不可見基於頁面標題
- 27. 使光標在editText中不可移動
- 28. 如何在光標不再徘徊時使工具提示保持可見
- 29. 當使用BackgroundColorSpan突出顯示EditText內容時,光標不可見
- 30. 滾動UITableView,使標題不可見
我明白了。我在那裏發佈了一個問題,希望urwid devs會考慮這個問題。 – makos
問題鏈接:https://github.com/urwid/urwid/issues/170 –